diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md new file mode 100644 index 0000000000..a7371e02a6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -0,0 +1,43 @@ +--- +name: Bug report +about: Create a report to help us fix issues. +title: '' +labels: 'Type: Bug' +assignees: '' + +--- + + + +**Application version** + + +**Platform** + + +**Printer** + + +**Reproduction steps** + + +**Actual results** + + +**Expected results** + + +**Additional information** + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000..2a0a3e4e7b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,22 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: 'Type: New Feature' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** + + +**Describe the solution you'd like** + + +**Describe alternatives you've considered** + + +**Affected users and/or printers** + +**Additional context** + diff --git a/.gitignore b/.gitignore index 2ec5af2b9b..eed686fda7 100644 --- a/.gitignore +++ b/.gitignore @@ -35,7 +35,7 @@ cura.desktop .pydevproject .settings -#Externally located plug-ins. +#Externally located plug-ins commonly installed by our devs. plugins/cura-big-flame-graph plugins/cura-god-mode-plugin plugins/cura-siemensnx-plugin @@ -52,6 +52,7 @@ plugins/FlatProfileExporter plugins/GodMode plugins/OctoPrintPlugin plugins/ProfileFlattener +plugins/SettingsGuide plugins/X3GWriter #Build stuff @@ -72,3 +73,6 @@ run.sh CuraEngine /.coverage + +#Prevents import failures when plugin running tests +plugins/__init__.py diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f4a4d0771a..6c5bc61cbe 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,8 +3,12 @@ image: registry.gitlab.com/ultimaker/cura/cura-build-environment:centos7 stages: - build -build-and-test: +build and test linux: stage: build + tags: + - cura + - docker + - linux script: - docker/build.sh artifacts: diff --git a/CMakeLists.txt b/CMakeLists.txt index ba427a745d..b516de6b63 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,11 +20,12 @@ set(CURA_APP_NAME "cura" CACHE STRING "Short name of Cura, used for configuratio set(CURA_APP_DISPLAY_NAME "Ultimaker Cura" CACHE STRING "Display name of Cura") set(CURA_VERSION "master" CACHE STRING "Version name of Cura") set(CURA_BUILDTYPE "" CACHE STRING "Build type of Cura, eg. 'PPA'") -set(CURA_SDK_VERSION "" CACHE STRING "SDK version of Cura") set(CURA_CLOUD_API_ROOT "" CACHE STRING "Alternative Cura cloud API root") set(CURA_CLOUD_API_VERSION "" CACHE STRING "Alternative Cura cloud API version") +set(CURA_CLOUD_ACCOUNT_API_ROOT "" CACHE STRING "Alternative Cura cloud account API version") configure_file(${CMAKE_SOURCE_DIR}/cura.desktop.in ${CMAKE_BINARY_DIR}/cura.desktop @ONLY) + configure_file(cura/CuraVersion.py.in CuraVersion.py @ONLY) diff --git a/cmake/CuraTests.cmake b/cmake/CuraTests.cmake index c0762e2b91..b1d3e0ddc4 100644 --- a/cmake/CuraTests.cmake +++ b/cmake/CuraTests.cmake @@ -47,7 +47,7 @@ function(cura_add_test) if (NOT ${test_exists}) add_test( NAME ${_NAME} - COMMAND ${Python3_EXECUTABLE} -m pytest --verbose --full-trace --capture=no --no-print-log --junitxml=${CMAKE_BINARY_DIR}/junit-${_NAME}.xml ${_DIRECTORY} + COMMAND ${Python3_EXECUTABLE} -m pytest --junitxml=${CMAKE_BINARY_DIR}/junit-${_NAME}.xml ${_DIRECTORY} ) set_tests_properties(${_NAME} PROPERTIES ENVIRONMENT LANG=C) set_tests_properties(${_NAME} PROPERTIES ENVIRONMENT "PYTHONPATH=${_PYTHONPATH}") diff --git a/cura.desktop.in b/cura.desktop.in index b0195015a5..1e17e30f4e 100644 --- a/cura.desktop.in +++ b/cura.desktop.in @@ -13,6 +13,7 @@ TryExec=@CMAKE_INSTALL_FULL_BINDIR@/cura Icon=cura-icon Terminal=false Type=Application -MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;model/x3d+xml;text/x-gcode; +MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;text/x-gcode;application/x-amf;application/x-ply;application/x-ctm;model/vnd.collada+xml;model/gltf-binary;model/gltf+json;model/vnd.collada+xml+zip; Categories=Graphics; Keywords=3D;Printing;Slicer; +StartupWMClass=cura.real diff --git a/cura/API/Machines.py b/cura/API/Machines.py deleted file mode 100644 index de9f378d79..0000000000 --- a/cura/API/Machines.py +++ /dev/null @@ -1,139 +0,0 @@ -# Copyright (c) 2019 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. - -from typing import Optional, Dict, List, TYPE_CHECKING, Any -from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, pyqtProperty -from UM.i18n import i18nCatalog -from UM.Logger import Logger -if TYPE_CHECKING: - from cura.CuraApplication import CuraApplication - from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice - -i18n_catalog = i18nCatalog("cura") - -## The account API provides a version-proof bridge to use Ultimaker Accounts -# -# Usage: -# ``` -# from cura.API import CuraAPI -# api = CuraAPI() -# api.machines.addOutputDeviceToCurrentMachine() -# ``` - -## Since Cura doesn't have a machine class, we're going to make a fake one to make our lives a -# little bit easier. -class Machine(): - def __init__(self) -> None: - self.hostname = "" # type: str - self.group_id = "" # type: str - self.group_name = "" # type: str - self.um_network_key = "" # type: str - self.configuration = {} # type: Dict[str, Any] - self.connection_types = [] # type: List[int] - -class Machines(QObject): - - def __init__(self, application: "CuraApplication", parent = None) -> None: - super().__init__(parent) - self._application = application - - @pyqtSlot(result="QVariantMap") - def getCurrentMachine(self) -> Machine: - fake_machine = Machine() # type: Machine - global_stack = self._application.getGlobalContainerStack() - if global_stack: - metadata = global_stack.getMetaData() - if "group_id" in metadata: - fake_machine.group_id = global_stack.getMetaDataEntry("group_id") - if "group_name" in metadata: - fake_machine.group_name = global_stack.getMetaDataEntry("group_name") - if "um_network_key" in metadata: - fake_machine.um_network_key = global_stack.getMetaDataEntry("um_network_key") - - fake_machine.connection_types = global_stack.configuredConnectionTypes - - return fake_machine - - ## Set the current machine's friendy name. - # This is the same as "group name" since we use "group" and "current machine" interchangeably. - # TODO: Maybe make this "friendly name" to distinguish from "hostname"? - @pyqtSlot(str) - def setCurrentMachineGroupName(self, group_name: str) -> None: - Logger.log("d", "Attempting to set the group name of the active machine to %s", group_name) - global_stack = self._application.getGlobalContainerStack() - if global_stack: - # Update a GlobalStacks in the same group with the new group name. - group_id = global_stack.getMetaDataEntry("group_id") - machine_manager = self._application.getMachineManager() - for machine in machine_manager.getMachinesInGroup(group_id): - machine.setMetaDataEntry("group_name", group_name) - - # Set the default value for "hidden", which is used when you have a group with multiple types of printers - global_stack.setMetaDataEntry("hidden", False) - - ## Set the current machine's configuration from an (optional) output device. - # If no output device is given, the first one available on the machine will be used. - # NOTE: Group and machine are used interchangeably. - # NOTE: This doesn't seem to be used anywhere. Maybe delete? - @pyqtSlot(QObject) - def updateCurrentMachineConfiguration(self, output_device: Optional["PrinterOutputDevice"]) -> None: - - if output_device is None: - machine_manager = self._application.getMachineManager() - output_device = machine_manager.printerOutputDevices[0] - - hotend_ids = output_device.hotendIds - for index in range(len(hotend_ids)): - output_device.hotendIdChanged.emit(index, hotend_ids[index]) - - material_ids = output_device.materialIds - for index in range(len(material_ids)): - output_device.materialIdChanged.emit(index, material_ids[index]) - - ## Add an output device to the current machine. - # In practice, this means: - # - Setting the output device's network key in the current machine's metadata - # - Adding the output device's connection type to the current machine's configured connection - # types. - # TODO: CHANGE TO HOSTNAME - @pyqtSlot(QObject) - def addOutputDeviceToCurrentMachine(self, output_device: "PrinterOutputDevice") -> None: - if not output_device: - return - Logger.log("d", - "Attempting to set the network key of the active machine to %s", - output_device.key) - global_stack = self._application.getGlobalContainerStack() - if not global_stack: - return - metadata = global_stack.getMetaData() - - # Global stack already had a connection, but it's changed. - if "um_network_key" in metadata: - old_network_key = metadata["um_network_key"] - - # Since we might have a bunch of hidden stacks, we also need to change it there. - metadata_filter = {"um_network_key": old_network_key} - containers = self._application.getContainerRegistry().findContainerStacks( - type = "machine", **metadata_filter) - for container in containers: - container.setMetaDataEntry("um_network_key", output_device.key) - - # Delete old authentication data. - Logger.log("d", "Removing old authentication id %s for device %s", - global_stack.getMetaDataEntry("network_authentication_id", None), - output_device.key) - - container.removeMetaDataEntry("network_authentication_id") - container.removeMetaDataEntry("network_authentication_key") - - # Ensure that these containers do know that they are configured for the given - # connection type (can be more than one type; e.g. LAN & Cloud) - container.addConfiguredConnectionType(output_device.connectionType.value) - - else: # Global stack didn't have a connection yet, configure it. - global_stack.setMetaDataEntry("um_network_key", output_device.key) - global_stack.addConfiguredConnectionType(output_device.connectionType.value) - - return None - diff --git a/cura/API/__init__.py b/cura/API/__init__.py index 0a5eab9535..b3e702263a 100644 --- a/cura/API/__init__.py +++ b/cura/API/__init__.py @@ -6,7 +6,6 @@ from PyQt5.QtCore import QObject, pyqtProperty from cura.API.Backups import Backups from cura.API.Interface import Interface -from cura.API.Machines import Machines from cura.API.Account import Account if TYPE_CHECKING: @@ -45,9 +44,6 @@ class CuraAPI(QObject): # Backups API self._backups = Backups(self._application) - # Machines API - self._machines = Machines(self._application) - # Interface API self._interface = Interface(self._application) @@ -62,10 +58,6 @@ class CuraAPI(QObject): def backups(self) -> "Backups": return self._backups - @pyqtProperty(QObject) - def machines(self) -> "Machines": - return self._machines - @property def interface(self) -> "Interface": return self._interface diff --git a/cura/ApplicationMetadata.py b/cura/ApplicationMetadata.py index 06fdd7a3f0..daa937197c 100644 --- a/cura/ApplicationMetadata.py +++ b/cura/ApplicationMetadata.py @@ -9,7 +9,7 @@ DEFAULT_CURA_DISPLAY_NAME = "Ultimaker Cura" DEFAULT_CURA_VERSION = "master" DEFAULT_CURA_BUILD_TYPE = "" DEFAULT_CURA_DEBUG_MODE = False -DEFAULT_CURA_SDK_VERSION = "6.1.0" +DEFAULT_CURA_SDK_VERSION = "7.0.0" try: from cura.CuraVersion import CuraAppName # type: ignore @@ -42,9 +42,7 @@ try: except ImportError: CuraDebugMode = DEFAULT_CURA_DEBUG_MODE -try: - from cura.CuraVersion import CuraSDKVersion # type: ignore - if CuraSDKVersion == "": - CuraSDKVersion = DEFAULT_CURA_SDK_VERSION -except ImportError: - CuraSDKVersion = DEFAULT_CURA_SDK_VERSION +# 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" diff --git a/cura/Arranging/ShapeArray.py b/cura/Arranging/ShapeArray.py index 64b78d6f17..403db5e706 100644 --- a/cura/Arranging/ShapeArray.py +++ b/cura/Arranging/ShapeArray.py @@ -1,12 +1,19 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + import numpy import copy +from typing import Optional, Tuple, TYPE_CHECKING from UM.Math.Polygon import Polygon +if TYPE_CHECKING: + from UM.Scene.SceneNode import SceneNode + ## Polygon representation as an array for use with Arrange class ShapeArray: - def __init__(self, arr, offset_x, offset_y, scale = 1): + def __init__(self, arr: numpy.array, offset_x: float, offset_y: float, scale: float = 1) -> None: self.arr = arr self.offset_x = offset_x self.offset_y = offset_y @@ -16,7 +23,7 @@ class ShapeArray: # \param vertices # \param scale scale the coordinates @classmethod - def fromPolygon(cls, vertices, scale = 1): + def fromPolygon(cls, vertices: numpy.array, scale: float = 1) -> "ShapeArray": # scale vertices = vertices * scale # flip y, x -> x, y @@ -42,7 +49,7 @@ class ShapeArray: # \param min_offset offset for the offset ShapeArray # \param scale scale the coordinates @classmethod - def fromNode(cls, node, min_offset, scale = 0.5, include_children = False): + def fromNode(cls, node: "SceneNode", min_offset: float, scale: float = 0.5, include_children: bool = False) -> Tuple[Optional["ShapeArray"], Optional["ShapeArray"]]: transform = node._transformation transform_x = transform._data[0][3] transform_y = transform._data[2][3] @@ -88,14 +95,16 @@ class ShapeArray: # \param shape numpy format shape, [x-size, y-size] # \param vertices @classmethod - def arrayFromPolygon(cls, shape, vertices): + def arrayFromPolygon(cls, shape: Tuple[int, int], vertices: numpy.array) -> numpy.array: base_array = numpy.zeros(shape, dtype = numpy.int32) # Initialize your array of zeros fill = numpy.ones(base_array.shape) * True # Initialize boolean array defining shape fill # Create check array for each edge segment, combine into fill array for k in range(vertices.shape[0]): - fill = numpy.all([fill, cls._check(vertices[k - 1], vertices[k], base_array)], axis=0) + check_array = cls._check(vertices[k - 1], vertices[k], base_array) + if check_array is not None: + fill = numpy.all([fill, check_array], axis=0) # Set all values inside polygon to one base_array[fill] = 1 @@ -111,9 +120,9 @@ class ShapeArray: # \param p2 2-tuple with x, y for point 2 # \param base_array boolean array to project the line on @classmethod - def _check(cls, p1, p2, base_array): + def _check(cls, p1: numpy.array, p2: numpy.array, base_array: numpy.array) -> Optional[numpy.array]: if p1[0] == p2[0] and p1[1] == p2[1]: - return + return None idxs = numpy.indices(base_array.shape) # Create 3D array of indices p1 = p1.astype(float) @@ -131,5 +140,4 @@ class ShapeArray: max_col_idx = (idxs[0] - p1[0]) / (p2[0] - p1[0]) * (p2[1] - p1[1]) + p1[1] sign = numpy.sign(p2[0] - p1[0]) - return idxs[1] * sign <= max_col_idx * sign - + return idxs[1] * sign <= max_col_idx * sign \ No newline at end of file diff --git a/cura/AutoSave.py b/cura/AutoSave.py index 605a1e7beb..3b42fdafdf 100644 --- a/cura/AutoSave.py +++ b/cura/AutoSave.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from PyQt5.QtCore import QTimer @@ -16,7 +16,7 @@ class AutoSave: self._application.getPreferences().addPreference("cura/autosave_delay", 1000 * 10) self._change_timer = QTimer() - self._change_timer.setInterval(self._application.getPreferences().getValue("cura/autosave_delay")) + self._change_timer.setInterval(int(self._application.getPreferences().getValue("cura/autosave_delay"))) self._change_timer.setSingleShot(True) self._enabled = True diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index f8f691a850..bc8c806699 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -1,6 +1,6 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from UM.Scene.Camera import Camera +from UM.Mesh.MeshData import MeshData from cura.Scene.CuraSceneNode import CuraSceneNode from cura.Settings.ExtruderManager import ExtruderManager from UM.Application import Application #To modify the maximum zoom level. @@ -20,13 +20,20 @@ from UM.Signal import Signal from PyQt5.QtCore import QTimer from UM.View.RenderBatch import RenderBatch from UM.View.GL.OpenGL import OpenGL +from cura.Settings.GlobalStack import GlobalStack + catalog = i18nCatalog("cura") import numpy import math import copy -from typing import List, Optional +from typing import List, Optional, TYPE_CHECKING, Any, Set, cast, Iterable, Dict + +if TYPE_CHECKING: + from cura.CuraApplication import CuraApplication + from cura.Settings.ExtruderStack import ExtruderStack + from UM.Settings.ContainerStack import ContainerStack # Radius of disallowed area in mm around prime. I.e. how much distance to keep from prime position. PRIME_CLEARANCE = 6.5 @@ -36,45 +43,47 @@ PRIME_CLEARANCE = 6.5 class BuildVolume(SceneNode): raftThicknessChanged = Signal() - def __init__(self, application, parent = None): + def __init__(self, application: "CuraApplication", parent: Optional[SceneNode] = None) -> None: super().__init__(parent) self._application = application self._machine_manager = self._application.getMachineManager() - self._volume_outline_color = None - self._x_axis_color = None - self._y_axis_color = None - self._z_axis_color = None - self._disallowed_area_color = None - self._error_area_color = None + self._volume_outline_color = None # type: Optional[Color] + self._x_axis_color = None # type: Optional[Color] + self._y_axis_color = None # type: Optional[Color] + self._z_axis_color = None # type: Optional[Color] + self._disallowed_area_color = None # type: Optional[Color] + self._error_area_color = None # type: Optional[Color] - self._width = 0 #type: float - self._height = 0 #type: float - self._depth = 0 #type: float - self._shape = "" #type: str + self._width = 0 # type: float + self._height = 0 # type: float + self._depth = 0 # type: float + self._shape = "" # type: str self._shader = None - self._origin_mesh = None + self._origin_mesh = None # type: Optional[MeshData] self._origin_line_length = 20 - self._origin_line_width = 0.5 + self._origin_line_width = 1.5 + self._enabled = False - self._grid_mesh = None + self._grid_mesh = None # type: Optional[MeshData] self._grid_shader = None - self._disallowed_areas = [] - self._disallowed_areas_no_brim = [] - self._disallowed_area_mesh = None + self._disallowed_areas = [] # type: List[Polygon] + self._disallowed_areas_no_brim = [] # type: List[Polygon] + self._disallowed_area_mesh = None # type: Optional[MeshData] + self._disallowed_area_size = 0. - self._error_areas = [] - self._error_mesh = None + self._error_areas = [] # type: List[Polygon] + self._error_mesh = None # type: Optional[MeshData] self.setCalculateBoundingBox(False) - self._volume_aabb = None + self._volume_aabb = None # type: Optional[AxisAlignedBox] self._raft_thickness = 0.0 self._extra_z_clearance = 0.0 - self._adhesion_type = None + self._adhesion_type = None # type: Any self._platform = Platform(self) self._build_volume_message = Message(catalog.i18nc("@info:status", @@ -82,7 +91,7 @@ class BuildVolume(SceneNode): " \"Print Sequence\" setting to prevent the gantry from colliding" " with printed models."), title = catalog.i18nc("@info:title", "Build Volume")) - self._global_container_stack = None + self._global_container_stack = None # type: Optional[GlobalStack] self._stack_change_timer = QTimer() self._stack_change_timer.setInterval(100) @@ -100,7 +109,7 @@ class BuildVolume(SceneNode): self._application.getController().getScene().sceneChanged.connect(self._onSceneChanged) #Objects loaded at the moment. We are connected to the property changed events of these objects. - self._scene_objects = set() + self._scene_objects = set() # type: Set[SceneNode] self._scene_change_timer = QTimer() self._scene_change_timer.setInterval(100) @@ -117,15 +126,11 @@ 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) - # list of settings which were updated - self._changed_settings_since_last_rebuild = [] + # List of settings which were updated + self._changed_settings_since_last_rebuild = [] # type: List[str] def _onSceneChanged(self, source): if self._global_container_stack: @@ -165,16 +170,13 @@ class BuildVolume(SceneNode): active_extruder_changed.connect(self._updateDisallowedAreasAndRebuild) def setWidth(self, width: float) -> None: - if width is not None: - self._width = width + self._width = width def setHeight(self, height: float) -> None: - if height is not None: - self._height = height + self._height = height def setDepth(self, depth: float) -> None: - if depth is not None: - self._depth = depth + self._depth = depth def setShape(self, shape: str) -> None: if shape: @@ -196,7 +198,7 @@ class BuildVolume(SceneNode): self._disallowed_areas = areas def render(self, renderer): - if not self.getMeshData(): + if not self.getMeshData() or not self.isVisible(): return True if not self._shader: @@ -222,13 +224,18 @@ class BuildVolume(SceneNode): ## For every sliceable node, update node._outside_buildarea # def updateNodeBoundaryCheck(self): + if not self._global_container_stack: + return + root = self._application.getController().getScene().getRoot() - nodes = list(BreadthFirstIterator(root)) - group_nodes = [] + nodes = cast(List[SceneNode], list(cast(Iterable, BreadthFirstIterator(root)))) + group_nodes = [] # type: List[SceneNode] build_volume_bounding_box = self.getBoundingBox() if build_volume_bounding_box: # It's over 9000! + # We set this to a very low number, as we do allow models to intersect the build plate. + # This means the model gets cut off at the build plate. build_volume_bounding_box = build_volume_bounding_box.set(bottom=-9001) else: # No bounding box. This is triggered when running Cura from command line with a model for the first time @@ -241,20 +248,28 @@ class BuildVolume(SceneNode): group_nodes.append(node) # Keep list of affected group_nodes if node.callDecoration("isSliceable") or node.callDecoration("isGroup"): + if not isinstance(node, CuraSceneNode): + continue + if node.collidesWithBbox(build_volume_bounding_box): node.setOutsideBuildArea(True) continue - if node.collidesWithArea(self.getDisallowedAreas()): + if node.collidesWithAreas(self.getDisallowedAreas()): + node.setOutsideBuildArea(True) + continue + # If the entire node is below the build plate, still mark it as outside. + node_bounding_box = node.getBoundingBox() + if node_bounding_box and node_bounding_box.top < 0: node.setOutsideBuildArea(True) continue - # Mark the node as outside build volume if the set extruder is disabled extruder_position = node.callDecoration("getActiveExtruderPosition") - if extruder_position not in self._global_container_stack.extruders: - continue - if not self._global_container_stack.extruders[extruder_position].isEnabled: - node.setOutsideBuildArea(True) + try: + if not self._global_container_stack.extruderList[int(extruder_position)].isEnabled: + node.setOutsideBuildArea(True) + continue + except IndexError: continue node.setOutsideBuildArea(False) @@ -274,8 +289,8 @@ class BuildVolume(SceneNode): child_node.setOutsideBuildArea(group_node.isOutsideBuildArea()) ## Update the outsideBuildArea of a single node, given bounds or current build volume - def checkBoundsAndUpdate(self, node: CuraSceneNode, bounds: Optional[AxisAlignedBox] = None): - if not isinstance(node, CuraSceneNode): + def checkBoundsAndUpdate(self, node: CuraSceneNode, bounds: Optional[AxisAlignedBox] = None) -> None: + if not isinstance(node, CuraSceneNode) or self._global_container_stack is None: return if bounds is None: @@ -295,44 +310,55 @@ class BuildVolume(SceneNode): node.setOutsideBuildArea(True) return - if node.collidesWithArea(self.getDisallowedAreas()): + if node.collidesWithAreas(self.getDisallowedAreas()): node.setOutsideBuildArea(True) return # Mark the node as outside build volume if the set extruder is disabled extruder_position = node.callDecoration("getActiveExtruderPosition") - if not self._global_container_stack.extruders[extruder_position].isEnabled: + if not self._global_container_stack.extruderList[int(extruder_position)].isEnabled: node.setOutsideBuildArea(True) return node.setOutsideBuildArea(False) - ## Recalculates the build volume & disallowed areas. - def rebuild(self): - if not self._width or not self._height or not self._depth: - return + def _buildGridMesh(self, min_w: float, max_w: float, min_h: float, max_h: float, min_d: float, max_d:float, z_fight_distance: float) -> MeshData: + mb = MeshBuilder() + if self._shape != "elliptic": + # Build plate grid mesh + mb.addQuad( + Vector(min_w, min_h - z_fight_distance, min_d), + Vector(max_w, min_h - z_fight_distance, min_d), + Vector(max_w, min_h - z_fight_distance, max_d), + Vector(min_w, min_h - z_fight_distance, max_d) + ) - if not self._engine_ready: - return + for n in range(0, 6): + v = mb.getVertex(n) + mb.setVertexUVCoordinates(n, v[0], v[2]) + return mb.build() + else: + aspect = 1.0 + scale_matrix = Matrix() + if self._width != 0: + # Scale circular meshes by aspect ratio if width != height + aspect = self._depth / self._width + scale_matrix.compose(scale=Vector(1, 1, aspect)) + mb.addVertex(0, min_h - z_fight_distance, 0) + mb.addArc(max_w, Vector.Unit_Y, center=Vector(0, min_h - z_fight_distance, 0)) + sections = mb.getVertexCount() - 1 # Center point is not an arc section + indices = [] + for n in range(0, sections - 1): + indices.append([0, n + 2, n + 1]) + mb.addIndices(numpy.asarray(indices, dtype=numpy.int32)) + mb.calculateNormals() - if not self._volume_outline_color: - theme = self._application.getTheme() - self._volume_outline_color = Color(*theme.getColor("volume_outline").getRgb()) - self._x_axis_color = Color(*theme.getColor("x_axis").getRgb()) - self._y_axis_color = Color(*theme.getColor("y_axis").getRgb()) - self._z_axis_color = Color(*theme.getColor("z_axis").getRgb()) - self._disallowed_area_color = Color(*theme.getColor("disallowed_area").getRgb()) - self._error_area_color = Color(*theme.getColor("error_area").getRgb()) - - min_w = -self._width / 2 - max_w = self._width / 2 - min_h = 0.0 - max_h = self._height - min_d = -self._depth / 2 - max_d = self._depth / 2 - - z_fight_distance = 0.2 # Distance between buildplate and disallowed area meshes to prevent z-fighting + for n in range(0, mb.getVertexCount()): + v = mb.getVertex(n) + mb.setVertexUVCoordinates(n, v[0], v[2] * aspect) + return mb.build().getTransformed(scale_matrix) + def _buildMesh(self, min_w: float, max_w: float, min_h: float, max_h: float, min_d: float, max_d:float, z_fight_distance: float) -> MeshData: if self._shape != "elliptic": # Outline 'cube' of the build volume mb = MeshBuilder() @@ -351,25 +377,10 @@ class BuildVolume(SceneNode): mb.addLine(Vector(min_w, max_h, min_d), Vector(min_w, max_h, max_d), color = self._volume_outline_color) mb.addLine(Vector(max_w, max_h, min_d), Vector(max_w, max_h, max_d), color = self._volume_outline_color) - self.setMeshData(mb.build()) - - # Build plate grid mesh - mb = MeshBuilder() - mb.addQuad( - Vector(min_w, min_h - z_fight_distance, min_d), - Vector(max_w, min_h - z_fight_distance, min_d), - Vector(max_w, min_h - z_fight_distance, max_d), - Vector(min_w, min_h - z_fight_distance, max_d) - ) - - for n in range(0, 6): - v = mb.getVertex(n) - mb.setVertexUVCoordinates(n, v[0], v[2]) - self._grid_mesh = mb.build() + return mb.build() else: # Bottom and top 'ellipse' of the build volume - aspect = 1.0 scale_matrix = Matrix() if self._width != 0: # Scale circular meshes by aspect ratio if width != height @@ -378,23 +389,119 @@ class BuildVolume(SceneNode): mb = MeshBuilder() mb.addArc(max_w, Vector.Unit_Y, center = (0, min_h - z_fight_distance, 0), color = self._volume_outline_color) mb.addArc(max_w, Vector.Unit_Y, center = (0, max_h, 0), color = self._volume_outline_color) - self.setMeshData(mb.build().getTransformed(scale_matrix)) + return mb.build().getTransformed(scale_matrix) - # Build plate grid mesh - mb = MeshBuilder() - mb.addVertex(0, min_h - z_fight_distance, 0) - mb.addArc(max_w, Vector.Unit_Y, center = Vector(0, min_h - z_fight_distance, 0)) - sections = mb.getVertexCount() - 1 # Center point is not an arc section - indices = [] - for n in range(0, sections - 1): - indices.append([0, n + 2, n + 1]) - mb.addIndices(numpy.asarray(indices, dtype = numpy.int32)) - mb.calculateNormals() + def _buildOriginMesh(self, origin: Vector) -> MeshData: + mb = MeshBuilder() + mb.addCube( + width=self._origin_line_length, + height=self._origin_line_width, + depth=self._origin_line_width, + center=origin + Vector(self._origin_line_length / 2, 0, 0), + color=self._x_axis_color + ) + mb.addCube( + width=self._origin_line_width, + height=self._origin_line_length, + depth=self._origin_line_width, + center=origin + Vector(0, self._origin_line_length / 2, 0), + color=self._y_axis_color + ) + mb.addCube( + width=self._origin_line_width, + height=self._origin_line_width, + depth=self._origin_line_length, + center=origin - Vector(0, 0, self._origin_line_length / 2), + color=self._z_axis_color + ) + return mb.build() - for n in range(0, mb.getVertexCount()): - v = mb.getVertex(n) - mb.setVertexUVCoordinates(n, v[0], v[2] * aspect) - self._grid_mesh = mb.build().getTransformed(scale_matrix) + def _updateColors(self): + theme = self._application.getTheme() + if theme is None: + return + self._volume_outline_color = Color(*theme.getColor("volume_outline").getRgb()) + self._x_axis_color = Color(*theme.getColor("x_axis").getRgb()) + self._y_axis_color = Color(*theme.getColor("y_axis").getRgb()) + self._z_axis_color = Color(*theme.getColor("z_axis").getRgb()) + self._disallowed_area_color = Color(*theme.getColor("disallowed_area").getRgb()) + self._error_area_color = Color(*theme.getColor("error_area").getRgb()) + + def _buildErrorMesh(self, min_w: float, max_w: float, min_h: float, max_h: float, min_d: float, max_d: float, disallowed_area_height: float) -> Optional[MeshData]: + if not self._error_areas: + return None + mb = MeshBuilder() + for error_area in self._error_areas: + color = self._error_area_color + points = error_area.getPoints() + first = Vector(self._clamp(points[0][0], min_w, max_w), disallowed_area_height, + self._clamp(points[0][1], min_d, max_d)) + previous_point = Vector(self._clamp(points[0][0], min_w, max_w), disallowed_area_height, + self._clamp(points[0][1], min_d, max_d)) + for point in points: + new_point = Vector(self._clamp(point[0], min_w, max_w), disallowed_area_height, + self._clamp(point[1], min_d, max_d)) + mb.addFace(first, previous_point, new_point, color=color) + previous_point = new_point + return mb.build() + + def _buildDisallowedAreaMesh(self, min_w: float, max_w: float, min_h: float, max_h: float, min_d: float, max_d: float, disallowed_area_height: float) -> Optional[MeshData]: + if not self._disallowed_areas: + return None + + mb = MeshBuilder() + color = self._disallowed_area_color + for polygon in self._disallowed_areas: + points = polygon.getPoints() + if len(points) == 0: + continue + + first = Vector(self._clamp(points[0][0], min_w, max_w), disallowed_area_height, + self._clamp(points[0][1], min_d, max_d)) + previous_point = Vector(self._clamp(points[0][0], min_w, max_w), disallowed_area_height, + self._clamp(points[0][1], min_d, max_d)) + for point in points: + new_point = Vector(self._clamp(point[0], min_w, max_w), disallowed_area_height, + self._clamp(point[1], min_d, max_d)) + mb.addFace(first, previous_point, new_point, color=color) + previous_point = new_point + + # Find the largest disallowed area to exclude it from the maximum scale bounds. + # This is a very nasty hack. This pretty much only works for UM machines. + # This disallowed area_size needs a -lot- of rework at some point in the future: TODO + if numpy.min(points[:, + 1]) >= 0: # This filters out all areas that have points to the left of the centre. This is done to filter the skirt area. + size = abs(numpy.max(points[:, 1]) - numpy.min(points[:, 1])) + else: + size = 0 + self._disallowed_area_size = max(size, self._disallowed_area_size) + return mb.build() + + ## Recalculates the build volume & disallowed areas. + def rebuild(self) -> None: + if not self._width or not self._height or not self._depth: + return + + if not self._engine_ready: + return + + if not self._global_container_stack: + return + + if not self._volume_outline_color: + self._updateColors() + + min_w = -self._width / 2 + max_w = self._width / 2 + min_h = 0.0 + max_h = self._height + min_d = -self._depth / 2 + max_d = self._depth / 2 + + z_fight_distance = 0.2 # Distance between buildplate and disallowed area meshes to prevent z-fighting + + self._grid_mesh = self._buildGridMesh(min_w, max_w, min_h, max_h, min_d, max_d, z_fight_distance) + self.setMeshData(self._buildMesh(min_w, max_w, min_h, max_h, min_d, max_d, z_fight_distance)) # Indication of the machine origin if self._global_container_stack.getProperty("machine_center_is_zero", "value"): @@ -402,77 +509,13 @@ class BuildVolume(SceneNode): else: origin = Vector(min_w, min_h, max_d) - mb = MeshBuilder() - mb.addCube( - width = self._origin_line_length, - height = self._origin_line_width, - depth = self._origin_line_width, - center = origin + Vector(self._origin_line_length / 2, 0, 0), - color = self._x_axis_color - ) - mb.addCube( - width = self._origin_line_width, - height = self._origin_line_length, - depth = self._origin_line_width, - center = origin + Vector(0, self._origin_line_length / 2, 0), - color = self._y_axis_color - ) - mb.addCube( - width = self._origin_line_width, - height = self._origin_line_width, - depth = self._origin_line_length, - center = origin - Vector(0, 0, self._origin_line_length / 2), - color = self._z_axis_color - ) - self._origin_mesh = mb.build() + self._origin_mesh = self._buildOriginMesh(origin) disallowed_area_height = 0.1 - disallowed_area_size = 0 - if self._disallowed_areas: - mb = MeshBuilder() - color = self._disallowed_area_color - for polygon in self._disallowed_areas: - points = polygon.getPoints() - if len(points) == 0: - continue + self._disallowed_area_size = 0. + self._disallowed_area_mesh = self._buildDisallowedAreaMesh(min_w, max_w, min_h, max_h, min_d, max_d, disallowed_area_height) - first = Vector(self._clamp(points[0][0], min_w, max_w), disallowed_area_height, self._clamp(points[0][1], min_d, max_d)) - previous_point = Vector(self._clamp(points[0][0], min_w, max_w), disallowed_area_height, self._clamp(points[0][1], min_d, max_d)) - for point in points: - new_point = Vector(self._clamp(point[0], min_w, max_w), disallowed_area_height, self._clamp(point[1], min_d, max_d)) - mb.addFace(first, previous_point, new_point, color = color) - previous_point = new_point - - # Find the largest disallowed area to exclude it from the maximum scale bounds. - # This is a very nasty hack. This pretty much only works for UM machines. - # This disallowed area_size needs a -lot- of rework at some point in the future: TODO - if numpy.min(points[:, 1]) >= 0: # This filters out all areas that have points to the left of the centre. This is done to filter the skirt area. - size = abs(numpy.max(points[:, 1]) - numpy.min(points[:, 1])) - else: - size = 0 - disallowed_area_size = max(size, disallowed_area_size) - - self._disallowed_area_mesh = mb.build() - else: - self._disallowed_area_mesh = None - - if self._error_areas: - mb = MeshBuilder() - for error_area in self._error_areas: - color = self._error_area_color - points = error_area.getPoints() - first = Vector(self._clamp(points[0][0], min_w, max_w), disallowed_area_height, - self._clamp(points[0][1], min_d, max_d)) - previous_point = Vector(self._clamp(points[0][0], min_w, max_w), disallowed_area_height, - self._clamp(points[0][1], min_d, max_d)) - for point in points: - new_point = Vector(self._clamp(point[0], min_w, max_w), disallowed_area_height, - self._clamp(point[1], min_d, max_d)) - mb.addFace(first, previous_point, new_point, color=color) - previous_point = new_point - self._error_mesh = mb.build() - else: - self._error_mesh = None + self._error_mesh = self._buildErrorMesh(min_w, max_w, min_h, max_h, min_d, max_d, disallowed_area_height) self._volume_aabb = AxisAlignedBox( minimum = Vector(min_w, min_h - 1.0, min_d), @@ -484,23 +527,26 @@ class BuildVolume(SceneNode): # This is probably wrong in all other cases. TODO! # The +1 and -1 is added as there is always a bit of extra room required to work properly. scale_to_max_bounds = AxisAlignedBox( - minimum = Vector(min_w + bed_adhesion_size + 1, min_h, min_d + disallowed_area_size - bed_adhesion_size + 1), - maximum = Vector(max_w - bed_adhesion_size - 1, max_h - self._raft_thickness - self._extra_z_clearance, max_d - disallowed_area_size + bed_adhesion_size - 1) + minimum = Vector(min_w + bed_adhesion_size + 1, min_h, min_d + self._disallowed_area_size - bed_adhesion_size + 1), + maximum = Vector(max_w - bed_adhesion_size - 1, max_h - self._raft_thickness - self._extra_z_clearance, max_d - self._disallowed_area_size + bed_adhesion_size - 1) ) - self._application.getController().getScene()._maximum_bounds = scale_to_max_bounds + self._application.getController().getScene()._maximum_bounds = scale_to_max_bounds # type: ignore self.updateNodeBoundaryCheck() - def getBoundingBox(self) -> AxisAlignedBox: + def getBoundingBox(self): return self._volume_aabb def getRaftThickness(self) -> float: return self._raft_thickness - def _updateRaftThickness(self): + def _updateRaftThickness(self) -> None: + if not self._global_container_stack: + return + old_raft_thickness = self._raft_thickness - if self._global_container_stack.extruders: + if self._global_container_stack.extruderList: # This might be called before the extruder stacks have initialised, in which case getting the adhesion_type fails self._adhesion_type = self._global_container_stack.getProperty("adhesion_type", "value") self._raft_thickness = 0.0 @@ -509,7 +555,7 @@ class BuildVolume(SceneNode): self._global_container_stack.getProperty("raft_base_thickness", "value") + self._global_container_stack.getProperty("raft_interface_thickness", "value") + self._global_container_stack.getProperty("raft_surface_layers", "value") * - self._global_container_stack.getProperty("raft_surface_thickness", "value") + + self._global_container_stack.getProperty("raft_surface_thickness", "value") + self._global_container_stack.getProperty("raft_airgap", "value") - self._global_container_stack.getProperty("layer_0_z_overlap", "value")) @@ -518,28 +564,23 @@ class BuildVolume(SceneNode): self.setPosition(Vector(0, -self._raft_thickness, 0), SceneNode.TransformSpace.World) self.raftThicknessChanged.emit() - def _updateExtraZClearance(self) -> None: + def _calculateExtraZClearance(self, extruders: List["ContainerStack"]) -> float: + if not self._global_container_stack: + return 0 + extra_z = 0.0 - extruders = ExtruderManager.getInstance().getUsedExtruderStacks() - use_extruders = False for extruder in extruders: if extruder.getProperty("retraction_hop_enabled", "value"): retraction_hop = extruder.getProperty("retraction_hop", "value") if extra_z is None or retraction_hop > extra_z: extra_z = retraction_hop - use_extruders = True - if not use_extruders: - # If no extruders, take global value. - if self._global_container_stack.getProperty("retraction_hop_enabled", "value"): - extra_z = self._global_container_stack.getProperty("retraction_hop", "value") - if extra_z != self._extra_z_clearance: - self._extra_z_clearance = extra_z + return extra_z def _onStackChanged(self): self._stack_change_timer.start() ## Update the build volume visualization - def _onStackChangeTimerFinished(self): + def _onStackChangeTimerFinished(self) -> None: if self._global_container_stack: self._global_container_stack.propertyChanged.disconnect(self._onSettingPropertyChanged) extruders = ExtruderManager.getInstance().getActiveExtruderStacks() @@ -570,7 +611,7 @@ class BuildVolume(SceneNode): self._updateDisallowedAreas() self._updateRaftThickness() - self._updateExtraZClearance() + self._extra_z_clearance = self._calculateExtraZClearance(ExtruderManager.getInstance().getUsedExtruderStacks()) if self._engine_ready: self.rebuild() @@ -579,20 +620,23 @@ class BuildVolume(SceneNode): if camera: diagonal = self.getDiagonalSize() if diagonal > 1: - camera.setZoomRange(min = 0.1, max = diagonal * 5) #You can zoom out up to 5 times the diagonal. This gives some space around the volume. + # You can zoom out up to 5 times the diagonal. This gives some space around the volume. + camera.setZoomRange(min = 0.1, max = diagonal * 5) # type: ignore - def _onEngineCreated(self): + def _onEngineCreated(self) -> None: self._engine_ready = True self.rebuild() - def _onSettingChangeTimerFinished(self): + def _onSettingChangeTimerFinished(self) -> None: + if not self._global_container_stack: + return + rebuild_me = False update_disallowed_areas = False update_raft_thickness = False update_extra_z_clearance = True for setting_key in self._changed_settings_since_last_rebuild: - if setting_key == "print_sequence": machine_height = self._global_container_stack.getProperty("machine_height", "value") if self._application.getGlobalContainerStack().getProperty("print_sequence", "value") == "one_at_a_time" and len(self._scene_objects) > 1: @@ -605,33 +649,26 @@ class BuildVolume(SceneNode): self._height = self._global_container_stack.getProperty("machine_height", "value") self._build_volume_message.hide() update_disallowed_areas = True - rebuild_me = True # sometimes the machine size or shape settings are adjusted on the active machine, we should reflect this if setting_key in self._machine_settings: - self._height = self._global_container_stack.getProperty("machine_height", "value") - self._width = self._global_container_stack.getProperty("machine_width", "value") - self._depth = self._global_container_stack.getProperty("machine_depth", "value") - self._shape = self._global_container_stack.getProperty("machine_shape", "value") + self._updateMachineSizeProperties() update_extra_z_clearance = True update_disallowed_areas = True - rebuild_me = True - if setting_key in self._skirt_settings + self._prime_settings + self._tower_settings + self._ooze_shield_settings + self._distance_settings + self._extruder_settings: + if setting_key in self._disallowed_area_settings: update_disallowed_areas = True - rebuild_me = True if setting_key in self._raft_settings: update_raft_thickness = True - rebuild_me = True if setting_key in self._extra_z_settings: update_extra_z_clearance = True - rebuild_me = True if setting_key in self._limit_to_extruder_settings: update_disallowed_areas = True - rebuild_me = True + + rebuild_me = update_extra_z_clearance or update_disallowed_areas or update_raft_thickness # We only want to update all of them once. if update_disallowed_areas: @@ -641,7 +678,7 @@ class BuildVolume(SceneNode): self._updateRaftThickness() if update_extra_z_clearance: - self._updateExtraZClearance() + self._extra_z_clearance = self._calculateExtraZClearance(ExtruderManager.getInstance().getUsedExtruderStacks()) if rebuild_me: self.rebuild() @@ -649,7 +686,7 @@ class BuildVolume(SceneNode): # We just did a rebuild, reset the list. self._changed_settings_since_last_rebuild = [] - def _onSettingPropertyChanged(self, setting_key: str, property_name: str): + def _onSettingPropertyChanged(self, setting_key: str, property_name: str) -> None: if property_name != "value": return @@ -660,6 +697,14 @@ class BuildVolume(SceneNode): def hasErrors(self) -> bool: return self._has_errors + def _updateMachineSizeProperties(self) -> None: + if not self._global_container_stack: + return + self._height = self._global_container_stack.getProperty("machine_height", "value") + self._width = self._global_container_stack.getProperty("machine_width", "value") + self._depth = self._global_container_stack.getProperty("machine_depth", "value") + self._shape = self._global_container_stack.getProperty("machine_shape", "value") + ## Calls _updateDisallowedAreas and makes sure the changes appear in the # scene. # @@ -671,57 +716,26 @@ class BuildVolume(SceneNode): def _updateDisallowedAreasAndRebuild(self): self._updateDisallowedAreas() self._updateRaftThickness() - self._updateExtraZClearance() + self._extra_z_clearance = self._calculateExtraZClearance(ExtruderManager.getInstance().getUsedExtruderStacks()) self.rebuild() - def _updateDisallowedAreas(self): + def _updateDisallowedAreas(self) -> None: if not self._global_container_stack: return self._error_areas = [] - extruder_manager = ExtruderManager.getInstance() - used_extruders = extruder_manager.getUsedExtruderStacks() + used_extruders = ExtruderManager.getInstance().getUsedExtruderStacks() disallowed_border_size = self.getEdgeDisallowedSize() - if not used_extruders: - # If no extruder is used, assume that the active extruder is used (else nothing is drawn) - if extruder_manager.getActiveExtruderStack(): - used_extruders = [extruder_manager.getActiveExtruderStack()] - else: - used_extruders = [self._global_container_stack] - - result_areas = self._computeDisallowedAreasStatic(disallowed_border_size, used_extruders) #Normal machine disallowed areas can always be added. + result_areas = self._computeDisallowedAreasStatic(disallowed_border_size, used_extruders) # Normal machine disallowed areas can always be added. prime_areas = self._computeDisallowedAreasPrimeBlob(disallowed_border_size, used_extruders) - result_areas_no_brim = self._computeDisallowedAreasStatic(0, used_extruders) #Where the priming is not allowed to happen. This is not added to the result, just for collision checking. - prime_disallowed_areas = copy.deepcopy(result_areas_no_brim) + result_areas_no_brim = self._computeDisallowedAreasStatic(0, used_extruders) # Where the priming is not allowed to happen. This is not added to the result, just for collision checking. - #Check if prime positions intersect with disallowed areas. + # Check if prime positions intersect with disallowed areas. for extruder in used_extruders: extruder_id = extruder.getId() - collision = False - for prime_polygon in prime_areas[extruder_id]: - for disallowed_polygon in prime_disallowed_areas[extruder_id]: - if prime_polygon.intersectsPolygon(disallowed_polygon) is not None: - collision = True - break - if collision: - break - - #Also check other prime positions (without additional offset). - for other_extruder_id in prime_areas: - if extruder_id == other_extruder_id: #It is allowed to collide with itself. - continue - for other_prime_polygon in prime_areas[other_extruder_id]: - if prime_polygon.intersectsPolygon(other_prime_polygon): - collision = True - break - if collision: - break - if collision: - break - result_areas[extruder_id].extend(prime_areas[extruder_id]) result_areas_no_brim[extruder_id].extend(prime_areas[extruder_id]) @@ -729,33 +743,28 @@ class BuildVolume(SceneNode): for area in nozzle_disallowed_areas: polygon = Polygon(numpy.array(area, numpy.float32)) polygon_disallowed_border = polygon.getMinkowskiHull(Polygon.approximatedCircle(disallowed_border_size)) - result_areas[extruder_id].append(polygon_disallowed_border) #Don't perform the offset on these. - #polygon_minimal_border = polygon.getMinkowskiHull(5) - result_areas_no_brim[extruder_id].append(polygon) # no brim + result_areas[extruder_id].append(polygon_disallowed_border) # Don't perform the offset on these. + result_areas_no_brim[extruder_id].append(polygon) # No brim # Add prime tower location as disallowed area. - if len(used_extruders) > 1: #No prime tower in single-extrusion. - - if len([x for x in used_extruders if x.isEnabled == True]) > 1: #No prime tower if only one extruder is enabled - prime_tower_collision = False - prime_tower_areas = self._computeDisallowedAreasPrinted(used_extruders) - for extruder_id in prime_tower_areas: - for i_area, prime_tower_area in enumerate(prime_tower_areas[extruder_id]): - for area in result_areas[extruder_id]: - if prime_tower_area.intersectsPolygon(area) is not None: - prime_tower_collision = True - break - if prime_tower_collision: #Already found a collision. + if len([x for x in used_extruders if x.isEnabled]) > 1: # No prime tower if only one extruder is enabled + prime_tower_collision = False + prime_tower_areas = self._computeDisallowedAreasPrinted(used_extruders) + for extruder_id in prime_tower_areas: + for area_index, prime_tower_area in enumerate(prime_tower_areas[extruder_id]): + for area in result_areas[extruder_id]: + if prime_tower_area.intersectsPolygon(area) is not None: + prime_tower_collision = True break - if (ExtruderManager.getInstance().getResolveOrValue("prime_tower_brim_enable") and - ExtruderManager.getInstance().getResolveOrValue("adhesion_type") != "raft"): - prime_tower_areas[extruder_id][i_area] = prime_tower_area.getMinkowskiHull( - Polygon.approximatedCircle(disallowed_border_size)) - if not prime_tower_collision: - result_areas[extruder_id].extend(prime_tower_areas[extruder_id]) - result_areas_no_brim[extruder_id].extend(prime_tower_areas[extruder_id]) - else: - self._error_areas.extend(prime_tower_areas[extruder_id]) + if prime_tower_collision: # Already found a collision. + break + if self._global_container_stack.getProperty("prime_tower_brim_enable", "value") and self._global_container_stack.getProperty("adhesion_type", "value") != "raft": + prime_tower_areas[extruder_id][area_index] = prime_tower_area.getMinkowskiHull(Polygon.approximatedCircle(disallowed_border_size)) + if not prime_tower_collision: + result_areas[extruder_id].extend(prime_tower_areas[extruder_id]) + result_areas_no_brim[extruder_id].extend(prime_tower_areas[extruder_id]) + else: + self._error_areas.extend(prime_tower_areas[extruder_id]) self._has_errors = len(self._error_areas) > 0 @@ -776,11 +785,14 @@ class BuildVolume(SceneNode): # where that extruder may not print. def _computeDisallowedAreasPrinted(self, used_extruders): result = {} + adhesion_extruder = None #type: ExtruderStack for extruder in used_extruders: + if int(extruder.getProperty("extruder_nr", "value")) == int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value")): + adhesion_extruder = extruder result[extruder.getId()] = [] - #Currently, the only normally printed object is the prime tower. - if ExtruderManager.getInstance().getResolveOrValue("prime_tower_enable"): + # Currently, the only normally printed object is the prime tower. + if self._global_container_stack.getProperty("prime_tower_enable", "value"): prime_tower_size = self._global_container_stack.getProperty("prime_tower_size", "value") machine_width = self._global_container_stack.getProperty("machine_width", "value") machine_depth = self._global_container_stack.getProperty("machine_depth", "value") @@ -790,27 +802,19 @@ class BuildVolume(SceneNode): prime_tower_x = prime_tower_x - machine_width / 2 #Offset by half machine_width and _depth to put the origin in the front-left. prime_tower_y = prime_tower_y + machine_depth / 2 - if (ExtruderManager.getInstance().getResolveOrValue("prime_tower_brim_enable") and - ExtruderManager.getInstance().getResolveOrValue("adhesion_type") != "raft"): + if adhesion_extruder is not None and self._global_container_stack.getProperty("prime_tower_brim_enable", "value") and self._global_container_stack.getProperty("adhesion_type", "value") != "raft": brim_size = ( - extruder.getProperty("brim_line_count", "value") * - extruder.getProperty("skirt_brim_line_width", "value") / 100.0 * - extruder.getProperty("initial_layer_line_width_factor", "value") + adhesion_extruder.getProperty("brim_line_count", "value") * + adhesion_extruder.getProperty("skirt_brim_line_width", "value") / 100.0 * + adhesion_extruder.getProperty("initial_layer_line_width_factor", "value") ) prime_tower_x -= brim_size prime_tower_y += brim_size - if self._global_container_stack.getProperty("prime_tower_circular", "value"): - radius = prime_tower_size / 2 - prime_tower_area = Polygon.approximatedCircle(radius) - prime_tower_area = prime_tower_area.translate(prime_tower_x - radius, prime_tower_y - radius) - else: - prime_tower_area = Polygon([ - [prime_tower_x - prime_tower_size, prime_tower_y - prime_tower_size], - [prime_tower_x, prime_tower_y - prime_tower_size], - [prime_tower_x, prime_tower_y], - [prime_tower_x - prime_tower_size, prime_tower_y], - ]) + radius = prime_tower_size / 2 + prime_tower_area = Polygon.approximatedCircle(radius) + prime_tower_area = prime_tower_area.translate(prime_tower_x - radius, prime_tower_y - radius) + prime_tower_area = prime_tower_area.getMinkowskiHull(Polygon.approximatedCircle(0)) for extruder in used_extruders: result[extruder.getId()].append(prime_tower_area) #The prime tower location is the same for each extruder, regardless of offset. @@ -828,9 +832,10 @@ class BuildVolume(SceneNode): # \param used_extruders The extruder stacks to generate disallowed areas # for. # \return A dictionary with for each used extruder ID the prime areas. - def _computeDisallowedAreasPrimeBlob(self, border_size, used_extruders): - result = {} - + def _computeDisallowedAreasPrimeBlob(self, border_size: float, used_extruders: List["ExtruderStack"]) -> Dict[str, List[Polygon]]: + result = {} # type: Dict[str, List[Polygon]] + if not self._global_container_stack: + return result machine_width = self._global_container_stack.getProperty("machine_width", "value") machine_depth = self._global_container_stack.getProperty("machine_depth", "value") for extruder in used_extruders: @@ -838,13 +843,13 @@ class BuildVolume(SceneNode): prime_x = extruder.getProperty("extruder_prime_pos_x", "value") prime_y = -extruder.getProperty("extruder_prime_pos_y", "value") - #Ignore extruder prime position if it is not set or if blob is disabled + # Ignore extruder prime position if it is not set or if blob is disabled if (prime_x == 0 and prime_y == 0) or not prime_blob_enabled: result[extruder.getId()] = [] continue if not self._global_container_stack.getProperty("machine_center_is_zero", "value"): - prime_x = prime_x - machine_width / 2 #Offset by half machine_width and _depth to put the origin in the front-left. + prime_x = prime_x - machine_width / 2 # Offset by half machine_width and _depth to put the origin in the front-left. prime_y = prime_y + machine_depth / 2 prime_polygon = Polygon.approximatedCircle(PRIME_CLEARANCE) @@ -867,9 +872,12 @@ class BuildVolume(SceneNode): # for. # \return A dictionary with for each used extruder ID the disallowed areas # where that extruder may not print. - def _computeDisallowedAreasStatic(self, border_size, used_extruders): - #Convert disallowed areas to polygons and dilate them. + def _computeDisallowedAreasStatic(self, border_size:float, used_extruders: List["ExtruderStack"]) -> Dict[str, List[Polygon]]: + # Convert disallowed areas to polygons and dilate them. machine_disallowed_polygons = [] + if self._global_container_stack is None: + return {} + for area in self._global_container_stack.getProperty("machine_disallowed_areas", "value"): polygon = Polygon(numpy.array(area, numpy.float32)) polygon = polygon.getMinkowskiHull(Polygon.approximatedCircle(border_size)) @@ -880,7 +888,7 @@ class BuildVolume(SceneNode): nozzle_offsetting_for_disallowed_areas = self._global_container_stack.getMetaDataEntry( "nozzle_offsetting_for_disallowed_areas", True) - result = {} + result = {} # type: Dict[str, List[Polygon]] for extruder in used_extruders: extruder_id = extruder.getId() offset_x = extruder.getProperty("machine_nozzle_offset_x", "value") @@ -889,13 +897,13 @@ class BuildVolume(SceneNode): offset_y = extruder.getProperty("machine_nozzle_offset_y", "value") if offset_y is None: offset_y = 0 - offset_y = -offset_y #Y direction of g-code is the inverse of Y direction of Cura's scene space. + offset_y = -offset_y # Y direction of g-code is the inverse of Y direction of Cura's scene space. result[extruder_id] = [] for polygon in machine_disallowed_polygons: - result[extruder_id].append(polygon.translate(offset_x, offset_y)) #Compensate for the nozzle offset of this extruder. + result[extruder_id].append(polygon.translate(offset_x, offset_y)) # Compensate for the nozzle offset of this extruder. - #Add the border around the edge of the build volume. + # Add the border around the edge of the build volume. left_unreachable_border = 0 right_unreachable_border = 0 top_unreachable_border = 0 @@ -903,7 +911,8 @@ class BuildVolume(SceneNode): # Only do nozzle offsetting if needed if nozzle_offsetting_for_disallowed_areas: - #The build volume is defined as the union of the area that all extruders can reach, so we need to know the relative offset to all extruders. + # The build volume is defined as the union of the area that all extruders can reach, so we need to know + # the relative offset to all extruders. for other_extruder in ExtruderManager.getInstance().getActiveExtruderStacks(): other_offset_x = other_extruder.getProperty("machine_nozzle_offset_x", "value") if other_offset_x is None: @@ -987,8 +996,8 @@ class BuildVolume(SceneNode): [ half_machine_width - border_size, 0] ], numpy.float32))) result[extruder_id].append(Polygon(numpy.array([ - [ half_machine_width,-half_machine_depth], - [-half_machine_width,-half_machine_depth], + [ half_machine_width, -half_machine_depth], + [-half_machine_width, -half_machine_depth], [ 0, -half_machine_depth + border_size] ], numpy.float32))) @@ -1000,21 +1009,93 @@ class BuildVolume(SceneNode): # stack. # # \return A sequence of setting values, one for each extruder. - def _getSettingFromAllExtruders(self, setting_key): + def _getSettingFromAllExtruders(self, setting_key: str) -> List[Any]: all_values = ExtruderManager.getInstance().getAllExtruderSettings(setting_key, "value") all_types = ExtruderManager.getInstance().getAllExtruderSettings(setting_key, "type") - for i in range(len(all_values)): - if not all_values[i] and (all_types[i] == "int" or all_types[i] == "float"): + for i, (setting_value, setting_type) in enumerate(zip(all_values, all_types)): + if not setting_value and (setting_type == "int" or setting_type == "float"): all_values[i] = 0 return all_values + def _calculateBedAdhesionSize(self, used_extruders): + if self._global_container_stack is None: + return + + container_stack = self._global_container_stack + adhesion_type = container_stack.getProperty("adhesion_type", "value") + skirt_brim_line_width = self._global_container_stack.getProperty("skirt_brim_line_width", "value") + initial_layer_line_width_factor = self._global_container_stack.getProperty("initial_layer_line_width_factor", "value") + # Use brim width if brim is enabled OR the prime tower has a brim. + if adhesion_type == "brim" or (self._global_container_stack.getProperty("prime_tower_brim_enable", "value") and adhesion_type != "raft"): + brim_line_count = self._global_container_stack.getProperty("brim_line_count", "value") + bed_adhesion_size = skirt_brim_line_width * brim_line_count * initial_layer_line_width_factor / 100.0 + + for extruder_stack in used_extruders: + bed_adhesion_size += extruder_stack.getProperty("skirt_brim_line_width", "value") * extruder_stack.getProperty("initial_layer_line_width_factor", "value") / 100.0 + + # We don't create an additional line for the extruder we're printing the brim with. + bed_adhesion_size -= skirt_brim_line_width * initial_layer_line_width_factor / 100.0 + elif adhesion_type == "skirt": # No brim? Also not on prime tower? Then use whatever the adhesion type is saying: Skirt, raft or none. + skirt_distance = self._global_container_stack.getProperty("skirt_gap", "value") + skirt_line_count = self._global_container_stack.getProperty("skirt_line_count", "value") + + bed_adhesion_size = skirt_distance + ( + skirt_brim_line_width * skirt_line_count) * initial_layer_line_width_factor / 100.0 + + for extruder_stack in used_extruders: + bed_adhesion_size += extruder_stack.getProperty("skirt_brim_line_width", "value") * extruder_stack.getProperty("initial_layer_line_width_factor", "value") / 100.0 + + # We don't create an additional line for the extruder we're printing the skirt with. + bed_adhesion_size -= skirt_brim_line_width * initial_layer_line_width_factor / 100.0 + elif adhesion_type == "raft": + bed_adhesion_size = self._global_container_stack.getProperty("raft_margin", "value") + elif adhesion_type == "none": + bed_adhesion_size = 0 + else: + raise Exception("Unknown bed adhesion type. Did you forget to update the build volume calculations for your new bed adhesion type?") + + max_length_available = 0.5 * min( + self._global_container_stack.getProperty("machine_width", "value"), + self._global_container_stack.getProperty("machine_depth", "value") + ) + bed_adhesion_size = min(bed_adhesion_size, max_length_available) + return bed_adhesion_size + + def _calculateFarthestShieldDistance(self, container_stack): + farthest_shield_distance = 0 + if container_stack.getProperty("draft_shield_enabled", "value"): + farthest_shield_distance = max(farthest_shield_distance, container_stack.getProperty("draft_shield_dist", "value")) + if container_stack.getProperty("ooze_shield_enabled", "value"): + farthest_shield_distance = max(farthest_shield_distance,container_stack.getProperty("ooze_shield_dist", "value")) + return farthest_shield_distance + + def _calculateSupportExpansion(self, container_stack): + support_expansion = 0 + support_enabled = self._global_container_stack.getProperty("support_enable", "value") + support_offset = self._global_container_stack.getProperty("support_offset", "value") + if support_enabled and support_offset: + support_expansion += support_offset + return support_expansion + + def _calculateMoveFromWallRadius(self, used_extruders): + move_from_wall_radius = 0 # Moves that start from outer wall. + all_values = [move_from_wall_radius] + all_values.extend(self._getSettingFromAllExtruders("infill_wipe_dist")) + move_from_wall_radius = max(all_values) + avoid_enabled_per_extruder = [stack.getProperty("travel_avoid_other_parts", "value") for stack in used_extruders] + travel_avoid_distance_per_extruder = [stack.getProperty("travel_avoid_distance", "value") for stack in used_extruders] + for avoid_other_parts_enabled, avoid_distance in zip(avoid_enabled_per_extruder, travel_avoid_distance_per_extruder): # For each extruder (or just global). + if avoid_other_parts_enabled: + move_from_wall_radius = max(move_from_wall_radius, avoid_distance) + return move_from_wall_radius + ## Calculate the disallowed radius around the edge. # # This disallowed radius is to allow for space around the models that is # not part of the collision radius, such as bed adhesion (skirt/brim/raft) # and travel avoid distance. def getEdgeDisallowedSize(self): - if not self._global_container_stack or not self._global_container_stack.extruders: + if not self._global_container_stack or not self._global_container_stack.extruderList: return 0 container_stack = self._global_container_stack @@ -1024,67 +1105,10 @@ class BuildVolume(SceneNode): 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. - adhesion_type = container_stack.getProperty("adhesion_type", "value") - skirt_brim_line_width = self._global_container_stack.getProperty("skirt_brim_line_width", "value") - initial_layer_line_width_factor = self._global_container_stack.getProperty("initial_layer_line_width_factor", "value") - if adhesion_type == "skirt": - skirt_distance = self._global_container_stack.getProperty("skirt_gap", "value") - skirt_line_count = self._global_container_stack.getProperty("skirt_line_count", "value") - - bed_adhesion_size = skirt_distance + (skirt_brim_line_width * skirt_line_count) * initial_layer_line_width_factor / 100.0 - - for extruder_stack in used_extruders: - bed_adhesion_size += extruder_stack.getProperty("skirt_brim_line_width", "value") * extruder_stack.getProperty("initial_layer_line_width_factor", "value") / 100.0 - - # We don't create an additional line for the extruder we're printing the skirt with. - bed_adhesion_size -= skirt_brim_line_width * initial_layer_line_width_factor / 100.0 - - elif (adhesion_type == "brim" or - (self._global_container_stack.getProperty("prime_tower_brim_enable", "value") and - self._global_container_stack.getProperty("adhesion_type", "value") != "raft")): - brim_line_count = self._global_container_stack.getProperty("brim_line_count", "value") - bed_adhesion_size = skirt_brim_line_width * brim_line_count * initial_layer_line_width_factor / 100.0 - - for extruder_stack in used_extruders: - bed_adhesion_size += extruder_stack.getProperty("skirt_brim_line_width", "value") * extruder_stack.getProperty("initial_layer_line_width_factor", "value") / 100.0 - - # We don't create an additional line for the extruder we're printing the brim with. - bed_adhesion_size -= skirt_brim_line_width * initial_layer_line_width_factor / 100.0 - - elif adhesion_type == "raft": - bed_adhesion_size = self._global_container_stack.getProperty("raft_margin", "value") - - elif adhesion_type == "none": - bed_adhesion_size = 0 - - else: - raise Exception("Unknown bed adhesion type. Did you forget to update the build volume calculations for your new bed adhesion type?") - - max_length_available = 0.5 * min( - self._global_container_stack.getProperty("machine_width", "value"), - self._global_container_stack.getProperty("machine_depth", "value") - ) - bed_adhesion_size = min(bed_adhesion_size, max_length_available) - - support_expansion = 0 - support_enabled = self._global_container_stack.getProperty("support_enable", "value") - support_offset = self._global_container_stack.getProperty("support_offset", "value") - if support_enabled and support_offset: - support_expansion += support_offset - - farthest_shield_distance = 0 - if container_stack.getProperty("draft_shield_enabled", "value"): - farthest_shield_distance = max(farthest_shield_distance, container_stack.getProperty("draft_shield_dist", "value")) - if container_stack.getProperty("ooze_shield_enabled", "value"): - farthest_shield_distance = max(farthest_shield_distance, container_stack.getProperty("ooze_shield_dist", "value")) - - move_from_wall_radius = 0 # Moves that start from outer wall. - move_from_wall_radius = max(move_from_wall_radius, max(self._getSettingFromAllExtruders("infill_wipe_dist"))) - avoid_enabled_per_extruder = [stack.getProperty("travel_avoid_other_parts","value") for stack in used_extruders] - travel_avoid_distance_per_extruder = [stack.getProperty("travel_avoid_distance", "value") for stack in used_extruders] - for avoid_other_parts_enabled, avoid_distance in zip(avoid_enabled_per_extruder, travel_avoid_distance_per_extruder): #For each extruder (or just global). - if avoid_other_parts_enabled: - move_from_wall_radius = max(move_from_wall_radius, avoid_distance) + bed_adhesion_size = self._calculateBedAdhesionSize(used_extruders) + support_expansion = self._calculateSupportExpansion(self._global_container_stack) + farthest_shield_distance = self._calculateFarthestShieldDistance(self._global_container_stack) + move_from_wall_radius = self._calculateMoveFromWallRadius(used_extruders) # Now combine our different pieces of data to get the final border size. # Support expansion is added to the bed adhesion, since the bed adhesion goes around support. @@ -1100,8 +1124,9 @@ class BuildVolume(SceneNode): _raft_settings = ["adhesion_type", "raft_base_thickness", "raft_interface_thickness", "raft_surface_layers", "raft_surface_thickness", "raft_airgap", "layer_0_z_overlap"] _extra_z_settings = ["retraction_hop_enabled", "retraction_hop"] _prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "extruder_prime_pos_z", "prime_blob_enable"] - _tower_settings = ["prime_tower_enable", "prime_tower_circular", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y", "prime_tower_brim_enable"] + _tower_settings = ["prime_tower_enable", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y", "prime_tower_brim_enable"] _ooze_shield_settings = ["ooze_shield_enabled", "ooze_shield_dist"] _distance_settings = ["infill_wipe_dist", "travel_avoid_distance", "support_offset", "support_enable", "travel_avoid_other_parts", "travel_avoid_supports"] _extruder_settings = ["support_enable", "support_bottom_enable", "support_roof_enable", "support_infill_extruder_nr", "support_extruder_nr_layer_0", "support_bottom_extruder_nr", "support_roof_extruder_nr", "brim_line_count", "adhesion_extruder_nr", "adhesion_type"] #Settings that can affect which extruders are used. _limit_to_extruder_settings = ["wall_extruder_nr", "wall_0_extruder_nr", "wall_x_extruder_nr", "top_bottom_extruder_nr", "infill_extruder_nr", "support_infill_extruder_nr", "support_extruder_nr_layer_0", "support_bottom_extruder_nr", "support_roof_extruder_nr", "adhesion_extruder_nr"] + _disallowed_area_settings = _skirt_settings + _prime_settings + _tower_settings + _ooze_shield_settings + _distance_settings + _extruder_settings diff --git a/cura/CrashHandler.py b/cura/CrashHandler.py index 6e6da99b0f..1d85a1da54 100644 --- a/cura/CrashHandler.py +++ b/cura/CrashHandler.py @@ -12,9 +12,10 @@ import json import ssl import urllib.request import urllib.error -import shutil -from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, Qt, QUrl +import certifi + +from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, QUrl from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QTextEdit, QGroupBox, QCheckBox, QPushButton from PyQt5.QtGui import QDesktopServices @@ -22,7 +23,6 @@ from UM.Application import Application from UM.Logger import Logger from UM.View.GL.OpenGL import OpenGL from UM.i18n import i18nCatalog -from UM.Platform import Platform from UM.Resources import Resources catalog = i18nCatalog("cura") @@ -352,11 +352,13 @@ class CrashHandler: # Convert data to bytes binary_data = json.dumps(self.data).encode("utf-8") + # CURA-6698 Create an SSL context and use certifi CA certificates for verification. + context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLSv1_2) + context.load_verify_locations(cafile = certifi.where()) # Submit data - kwoptions = {"data": binary_data, "timeout": 5} - - if Platform.isOSX(): - kwoptions["context"] = ssl._create_unverified_context() + kwoptions = {"data": binary_data, + "timeout": 5, + "context": context} Logger.log("i", "Sending crash report info to [%s]...", self.crash_url) if not self.has_started: diff --git a/cura/CuraActions.py b/cura/CuraActions.py index 91e0966fed..b92abbe706 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -3,15 +3,17 @@ from PyQt5.QtCore import QObject, QUrl from PyQt5.QtGui import QDesktopServices -from typing import List, TYPE_CHECKING, cast +from typing import List, Optional, cast from UM.Event import CallFunctionEvent from UM.FlameProfiler import pyqtSlot +from UM.Math.Quaternion import Quaternion from UM.Math.Vector import Vector from UM.Scene.Selection import Selection from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator from UM.Operations.GroupedOperation import GroupedOperation from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation +from UM.Operations.RotateOperation import RotateOperation from UM.Operations.TranslateOperation import TranslateOperation import cura.CuraApplication @@ -23,9 +25,8 @@ from cura.Settings.ExtruderManager import ExtruderManager from cura.Operations.SetBuildPlateNumberOperation import SetBuildPlateNumberOperation from UM.Logger import Logger +from UM.Scene.SceneNode import SceneNode -if TYPE_CHECKING: - from UM.Scene.SceneNode import SceneNode class CuraActions(QObject): def __init__(self, parent: QObject = None) -> None: diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 1155c67423..8caccc786e 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 @@ -69,11 +67,12 @@ from cura.Scene.BuildPlateDecorator import BuildPlateDecorator from cura.Scene.ConvexHullDecorator import ConvexHullDecorator from cura.Scene.CuraSceneController import CuraSceneController from cura.Scene.CuraSceneNode import CuraSceneNode +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 @@ -84,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 @@ -91,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 @@ -100,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 @@ -114,6 +118,7 @@ from cura.UI.MachineSettingsManager import MachineSettingsManager from cura.UI.ObjectsModel import ObjectsModel from cura.UI.TextManager import TextManager from cura.UI.AddPrinterPagesModel import AddPrinterPagesModel +from cura.UI.RecommendedMode import RecommendedMode from cura.UI.WelcomePagesModel import WelcomePagesModel from cura.UI.WhatsNewPagesModel import WhatsNewPagesModel @@ -128,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") @@ -143,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 = 7 + SettingVersion = 10 Created = False @@ -159,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) @@ -195,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 @@ -218,6 +220,8 @@ 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) @@ -344,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")) @@ -402,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") @@ -411,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") @@ -420,7 +426,7 @@ class CuraApplication(QtApplication): # Add empty variant, material and quality containers. # Since they are empty, they should never be serialized and instead just programmatically created. # We need them to simplify the switching between materials. - self.empty_container = cura.Settings.cura_empty_instance_containers.empty_container # type: EmptyInstanceContainer + self.empty_container = cura.Settings.cura_empty_instance_containers.empty_container self._container_registry.addContainer( cura.Settings.cura_empty_instance_containers.empty_definition_changes_container) @@ -429,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 @@ -443,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"), } ) @@ -502,6 +512,8 @@ 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() @@ -630,9 +642,17 @@ class CuraApplication(QtApplication): ## A reusable dialogbox # - showMessageBox = pyqtSignal(str, str, str, str, int, int, arguments = ["title", "text", "informativeText", "detailedText", "buttons", "icon"]) + showMessageBox = pyqtSignal(str,str, str, str, int, int, + arguments = ["title", "text", "informativeText", "detailedText","buttons", "icon"]) - def messageBox(self, title, text, informativeText = "", detailedText = "", buttons = QMessageBox.Ok, icon = QMessageBox.NoIcon, callback = None, callback_arguments = []): + def messageBox(self, title, text, + informativeText = "", + detailedText = "", + buttons = QMessageBox.Ok, + icon = QMessageBox.NoIcon, + callback = None, + callback_arguments = [] + ): self._message_box_callback = callback self._message_box_callback_arguments = callback_arguments self.showMessageBox.emit(title, text, informativeText, detailedText, buttons, icon) @@ -658,14 +678,14 @@ class CuraApplication(QtApplication): def discardOrKeepProfileChangesClosed(self, option: str) -> None: global_stack = self.getGlobalContainerStack() if option == "discard": - for extruder in global_stack.extruders.values(): + for extruder in global_stack.extruderList: extruder.userChanges.clear() global_stack.userChanges.clear() # if the user decided to keep settings then the user settings should be re-calculated and validated for errors # before slicing. To ensure that slicer uses right settings values elif option == "keep": - for extruder in global_stack.extruders.values(): + for extruder in global_stack.extruderList: extruder.userChanges.update() global_stack.userChanges.update() @@ -722,21 +742,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) @@ -838,7 +843,6 @@ class CuraApplication(QtApplication): if diagonal < 1: #No printer added yet. Set a default camera distance for normal-sized printers. diagonal = 375 camera.setPosition(Vector(-80, 250, 700) * diagonal / 375) - camera.setPerspective(True) camera.lookAt(Vector(0, 0, 0)) controller.getScene().setActiveCamera("3d") @@ -917,16 +921,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: @@ -974,6 +970,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() @@ -1027,6 +1035,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) @@ -1037,6 +1046,7 @@ class CuraApplication(QtApplication): qmlRegisterType(WhatsNewPagesModel, "Cura", 1, 0, "WhatsNewPagesModel") qmlRegisterType(AddPrinterPagesModel, "Cura", 1, 0, "AddPrinterPagesModel") qmlRegisterType(TextManager, "Cura", 1, 0, "TextManager") + qmlRegisterType(RecommendedMode, "Cura", 1, 0, "RecommendedMode") qmlRegisterType(NetworkMJPGImage, "Cura", 1, 0, "NetworkMJPGImage") @@ -1050,7 +1060,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") @@ -1059,6 +1070,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") @@ -1261,7 +1274,7 @@ class CuraApplication(QtApplication): @pyqtSlot() def arrangeObjectsToAllBuildPlates(self) -> None: nodes_to_arrange = [] - for node in DepthFirstIterator(self.getController().getScene().getRoot()): # type: ignore + for node in DepthFirstIterator(self.getController().getScene().getRoot()): if not isinstance(node, SceneNode): continue @@ -1288,7 +1301,7 @@ class CuraApplication(QtApplication): def arrangeAll(self) -> None: nodes_to_arrange = [] active_build_plate = self.getMultiBuildPlateModel().activeBuildPlate - for node in DepthFirstIterator(self.getController().getScene().getRoot()): # type: ignore + for node in DepthFirstIterator(self.getController().getScene().getRoot()): if not isinstance(node, SceneNode): continue @@ -1326,7 +1339,13 @@ class CuraApplication(QtApplication): Logger.log("i", "Reloading all loaded mesh data.") nodes = [] has_merged_nodes = False - for node in DepthFirstIterator(self.getController().getScene().getRoot()): # type: ignore + gcode_filename = None # type: Optional[str] + for node in DepthFirstIterator(self.getController().getScene().getRoot()): + # Objects loaded from Gcode should also be included. + gcode_filename = node.callDecoration("getGcodeFileName") + if gcode_filename is not None: + break + if not isinstance(node, CuraSceneNode) or not node.getMeshData(): if node.getName() == "MergedMesh": has_merged_nodes = True @@ -1334,13 +1353,18 @@ class CuraApplication(QtApplication): nodes.append(node) + # We can open only one gcode file at the same time. If the current view has a gcode file open, just reopen it + # for reloading. + if gcode_filename: + self._openFile(gcode_filename) + if not nodes: return for node in nodes: - file_name = node.getMeshData().getFileName() - if file_name: - job = ReadMeshJob(file_name) + 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: @@ -1579,8 +1603,12 @@ class CuraApplication(QtApplication): openProjectFile = pyqtSignal(QUrl, arguments = ["project_file"]) # Emitted when a project file is about to open. - @pyqtSlot(QUrl, bool) - def readLocalFile(self, file, skip_project_file_check = False): + @pyqtSlot(QUrl, str) + @pyqtSlot(QUrl) + ## Open a local file + # \param project_mode How to handle project files. Either None(default): Follow user preference, "open_as_model" or + # "open_as_project". This parameter is only considered if the file is a project file. + def readLocalFile(self, file: QUrl, project_mode: Optional[str] = None): if not file.isValid(): return @@ -1591,10 +1619,24 @@ class CuraApplication(QtApplication): self.deleteAll() break - if not skip_project_file_check and self.checkIsValidProjectFile(file): + is_project_file = self.checkIsValidProjectFile(file) + + if project_mode is None: + project_mode = self.getPreferences().getValue("cura/choice_on_open_project") + + if is_project_file and project_mode == "open_as_project": + # open as project immediately without presenting a dialog + workspace_handler = self.getWorkspaceFileHandler() + workspace_handler.readLocalFile(file) + return + + if is_project_file and project_mode == "always_ask": + # present a dialog asking to open as project or import models self.callLater(self.openProjectFile.emit, file) return + # Either the file is a model file or we want to load only models from project. Continue to load models. + if self.getPreferences().getValue("cura/select_models_on_load"): Selection.clear() @@ -1655,7 +1697,7 @@ class CuraApplication(QtApplication): arranger = Arrange.create(x = machine_width, y = machine_depth, fixed_nodes = fixed_nodes) min_offset = 8 default_extruder_position = self.getMachineManager().defaultExtruderPosition - default_extruder_id = self._global_container_stack.extruders[default_extruder_position].getId() + default_extruder_id = self._global_container_stack.extruderList[int(default_extruder_position)].getId() select_models_on_load = self.getPreferences().getValue("cura/select_models_on_load") @@ -1808,3 +1850,40 @@ class CuraApplication(QtApplication): return main_window.height() else: return 0 + + @pyqtSlot() + def deleteAll(self, only_selectable: bool = True) -> None: + super().deleteAll(only_selectable = only_selectable) + + # Also remove nodes with LayerData + self._removeNodesWithLayerData(only_selectable = only_selectable) + + def _removeNodesWithLayerData(self, only_selectable: bool = True) -> None: + Logger.log("i", "Clearing scene") + nodes = [] + for node in DepthFirstIterator(self.getController().getScene().getRoot()): + if not isinstance(node, SceneNode): + continue + if not node.isEnabled(): + continue + if (not node.getMeshData() and not node.callDecoration("getLayerData")) and not node.callDecoration("isGroup"): + continue # Node that doesnt have a mesh and is not a group. + if only_selectable and not node.isSelectable(): + continue # Only remove nodes that are selectable. + if not node.callDecoration("isSliceable") and not node.callDecoration("getLayerData") and not node.callDecoration("isGroup"): + continue # Grouped nodes don't need resetting as their parent (the group) is resetted) + nodes.append(node) + if nodes: + from UM.Operations.GroupedOperation import GroupedOperation + op = GroupedOperation() + + for node in nodes: + from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation + op.addOperation(RemoveSceneNodeOperation(node)) + + # Reset the print information + self.getController().getScene().sceneChanged.emit(node) + + op.push() + from UM.Scene.Selection import Selection + Selection.clear() diff --git a/cura/CuraVersion.py.in b/cura/CuraVersion.py.in index 1a500df248..4583e76f67 100644 --- a/cura/CuraVersion.py.in +++ b/cura/CuraVersion.py.in @@ -6,7 +6,6 @@ CuraAppDisplayName = "@CURA_APP_DISPLAY_NAME@" CuraVersion = "@CURA_VERSION@" CuraBuildType = "@CURA_BUILDTYPE@" CuraDebugMode = True if "@_cura_debugmode@" == "ON" else False -CuraSDKVersion = "@CURA_SDK_VERSION@" CuraCloudAPIRoot = "@CURA_CLOUD_API_ROOT@" CuraCloudAPIVersion = "@CURA_CLOUD_API_VERSION@" CuraCloudAccountAPIRoot = "@CURA_CLOUD_ACCOUNT_API_ROOT@" diff --git a/cura/CuraView.py b/cura/CuraView.py index 45cd7ba61b..b358558dff 100644 --- a/cura/CuraView.py +++ b/cura/CuraView.py @@ -18,8 +18,8 @@ class CuraView(View): def __init__(self, parent = None, use_empty_menu_placeholder: bool = False) -> None: super().__init__(parent) - self._empty_menu_placeholder_url = QUrl(Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, - "EmptyViewMenuComponent.qml")) + self._empty_menu_placeholder_url = QUrl.fromLocalFile(Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, + "EmptyViewMenuComponent.qml")) self._use_empty_menu_placeholder = use_empty_menu_placeholder @pyqtProperty(QUrl, constant = True) diff --git a/cura/Layer.py b/cura/Layer.py index 9cd45380fc..73fda64a45 100644 --- a/cura/Layer.py +++ b/cura/Layer.py @@ -1,14 +1,20 @@ -from UM.Mesh.MeshBuilder import MeshBuilder +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import List import numpy +from UM.Mesh.MeshBuilder import MeshBuilder +from UM.Mesh.MeshData import MeshData +from cura.LayerPolygon import LayerPolygon + class Layer: - def __init__(self, layer_id): + def __init__(self, layer_id: int) -> None: self._id = layer_id self._height = 0.0 self._thickness = 0.0 - self._polygons = [] + self._polygons = [] # type: List[LayerPolygon] self._element_count = 0 @property @@ -20,7 +26,7 @@ class Layer: return self._thickness @property - def polygons(self): + def polygons(self) -> List[LayerPolygon]: return self._polygons @property @@ -33,14 +39,14 @@ class Layer: def setThickness(self, thickness): self._thickness = thickness - def lineMeshVertexCount(self): + def lineMeshVertexCount(self) -> int: result = 0 for polygon in self._polygons: result += polygon.lineMeshVertexCount() return result - def lineMeshElementCount(self): + def lineMeshElementCount(self) -> int: result = 0 for polygon in self._polygons: result += polygon.lineMeshElementCount() @@ -57,18 +63,18 @@ class Layer: result_index_offset += polygon.lineMeshElementCount() self._element_count += polygon.elementCount - return (result_vertex_offset, result_index_offset) + return result_vertex_offset, result_index_offset - def createMesh(self): + def createMesh(self) -> MeshData: return self.createMeshOrJumps(True) - def createJumps(self): + def createJumps(self) -> MeshData: return self.createMeshOrJumps(False) # Defines the two triplets of local point indices to use to draw the two faces for each line segment in createMeshOrJump __index_pattern = numpy.array([[0, 3, 2, 0, 1, 3]], dtype = numpy.int32 ) - def createMeshOrJumps(self, make_mesh): + def createMeshOrJumps(self, make_mesh: bool) -> MeshData: builder = MeshBuilder() line_count = 0 @@ -79,14 +85,14 @@ class Layer: for polygon in self._polygons: line_count += polygon.jumpCount - # Reserve the neccesary space for the data upfront + # Reserve the necessary space for the data upfront builder.reserveFaceAndVertexCount(2 * line_count, 4 * line_count) for polygon in self._polygons: - # Filter out the types of lines we are not interesed in depending on whether we are drawing the mesh or the jumps. + # Filter out the types of lines we are not interested in depending on whether we are drawing the mesh or the jumps. index_mask = numpy.logical_not(polygon.jumpMask) if make_mesh else polygon.jumpMask - # Create an array with rows [p p+1] and only keep those we whant to draw based on make_mesh + # Create an array with rows [p p+1] and only keep those we want to draw based on make_mesh points = numpy.concatenate((polygon.data[:-1], polygon.data[1:]), 1)[index_mask.ravel()] # Line types of the points we want to draw line_types = polygon.types[index_mask] diff --git a/cura/LayerPolygon.py b/cura/LayerPolygon.py index ddf1450664..a62083945b 100644 --- a/cura/LayerPolygon.py +++ b/cura/LayerPolygon.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. from UM.Application import Application @@ -61,19 +61,19 @@ class LayerPolygon: # When type is used as index returns true if type == LayerPolygon.InfillType or type == LayerPolygon.SkinType or type == LayerPolygon.SupportInfillType # Should be generated in better way, not hardcoded. - self._isInfillOrSkinTypeMap = numpy.array([0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1], dtype=numpy.bool) + self._isInfillOrSkinTypeMap = numpy.array([0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0], dtype = numpy.bool) self._build_cache_line_mesh_mask = None # type: Optional[numpy.ndarray] self._build_cache_needed_points = None # type: Optional[numpy.ndarray] def buildCache(self) -> None: # For the line mesh we do not draw Infill or Jumps. Therefore those lines are filtered out. - self._build_cache_line_mesh_mask = numpy.ones(self._jump_mask.shape, dtype=bool) + self._build_cache_line_mesh_mask = numpy.ones(self._jump_mask.shape, dtype = bool) mesh_line_count = numpy.sum(self._build_cache_line_mesh_mask) self._index_begin = 0 self._index_end = mesh_line_count - self._build_cache_needed_points = numpy.ones((len(self._types), 2), dtype=numpy.bool) + self._build_cache_needed_points = numpy.ones((len(self._types), 2), dtype = numpy.bool) # Only if the type of line segment changes do we need to add an extra vertex to change colors self._build_cache_needed_points[1:, 0][:, numpy.newaxis] = self._types[1:] != self._types[:-1] # Mark points as unneeded if they are of types we don't want in the line mesh according to the calculated mask @@ -136,9 +136,9 @@ class LayerPolygon: self._index_begin += index_offset self._index_end += index_offset - indices[self._index_begin:self._index_end, :] = numpy.arange(self._index_end-self._index_begin, dtype=numpy.int32).reshape((-1, 1)) + indices[self._index_begin:self._index_end, :] = numpy.arange(self._index_end-self._index_begin, dtype = numpy.int32).reshape((-1, 1)) # When the line type changes the index needs to be increased by 2. - indices[self._index_begin:self._index_end, :] += numpy.cumsum(needed_points_list[line_mesh_mask.ravel(), 0], dtype=numpy.int32).reshape((-1, 1)) + indices[self._index_begin:self._index_end, :] += numpy.cumsum(needed_points_list[line_mesh_mask.ravel(), 0], dtype = numpy.int32).reshape((-1, 1)) # Each line segment goes from it's starting point p to p+1, offset by the vertex index. # The -1 is to compensate for the neccecarily True value of needed_points_list[0,0] which causes an unwanted +1 in cumsum above. indices[self._index_begin:self._index_end, :] += numpy.array([self._vertex_begin - 1, self._vertex_begin]) 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 fb11123af6..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() @@ -67,7 +66,7 @@ class MachineErrorChecker(QObject): self._global_stack.propertyChanged.disconnect(self.startErrorCheckPropertyChanged) self._global_stack.containersChanged.disconnect(self.startErrorCheck) - for extruder in self._global_stack.extruders.values(): + for extruder in self._global_stack.extruderList: extruder.propertyChanged.disconnect(self.startErrorCheckPropertyChanged) extruder.containersChanged.disconnect(self.startErrorCheck) @@ -77,7 +76,7 @@ class MachineErrorChecker(QObject): self._global_stack.propertyChanged.connect(self.startErrorCheckPropertyChanged) self._global_stack.containersChanged.connect(self.startErrorCheck) - for extruder in self._global_stack.extruders.values(): + for extruder in self._global_stack.extruderList: extruder.propertyChanged.connect(self.startErrorCheckPropertyChanged) extruder.containersChanged.connect(self.startErrorCheck) @@ -127,7 +126,7 @@ class MachineErrorChecker(QObject): # Populate the (stack, key) tuples to check self._stacks_and_keys_to_check = deque() - for stack in [global_stack] + list(global_stack.extruders.values()): + for stack in global_stack.extruderList: for key in stack.getAllKeys(): self._stacks_and_keys_to_check.append((stack, key)) @@ -168,7 +167,7 @@ class MachineErrorChecker(QObject): if validator_type: validator = validator_type(key) validation_state = validator(stack) - if validation_state in (ValidatorState.Exception, ValidatorState.MaximumError, ValidatorState.MinimumError): + if validation_state in (ValidatorState.Exception, ValidatorState.MaximumError, ValidatorState.MinimumError, ValidatorState.Invalid): # Finish self._setResult(True) return diff --git a/cura/Machines/MachineNode.py b/cura/Machines/MachineNode.py new file mode 100644 index 0000000000..72652f2987 --- /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 "position" in quality_changes: # 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 2163cde623..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() # type: Dict[str, MaterialGroup] - - # 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) # type: Dict[str, List[MaterialGroup]] - 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() # type: Dict[str, Dict[str, MaterialNode]] - 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 e936877923..73d9d48b22 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -1,18 +1,21 @@ -# 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 +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 +27,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 +75,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,14 +84,19 @@ 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 = global_stack.extruders.get(str(self._extruder_position)) + self._extruder_stack.pyqtContainersChanged.disconnect(self._onChanged) + self._extruder_stack.approximateMaterialDiameterChanged.disconnect(self._onChanged) + + try: + self._extruder_stack = global_stack.extruderList[self._extruder_position] + except IndexError: + 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: @@ -92,43 +113,71 @@ 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() + materials = ContainerTree.getInstance().machines[global_stack.definition.getId()].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 extruder_position = str(self._extruder_position) - if extruder_position not in global_stack.extruders: return False - - extruder_stack = global_stack.extruders[extruder_position] - self._available_materials = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack, extruder_stack) - if self._available_materials is None: - return False return True ## 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"], @@ -149,4 +198,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..c52228cf76 100644 --- a/cura/Machines/Models/BuildPlateModel.py +++ b/cura/Machines/Models/BuildPlateModel.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 @@ -21,31 +21,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 \ No newline at end of file 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 a2a1fac3f7..a1b68ee1ae 100644 --- a/cura/Machines/Models/DiscoveredPrintersModel.py +++ b/cura/Machines/Models/DiscoveredPrintersModel.py @@ -62,32 +62,46 @@ class DiscoveredPrinter(QObject): self._machine_type = machine_type self.machineTypeChanged.emit() + # Checks if the given machine type name in the available machine list. + # The machine type is a code name such as "ultimaker_3", while the machine type name is the human-readable name of + # the machine type, which is "Ultimaker 3" for "ultimaker_3". + def _hasHumanReadableMachineTypeName(self, machine_type_name: str) -> bool: + from cura.CuraApplication import CuraApplication + results = CuraApplication.getInstance().getContainerRegistry().findDefinitionContainersMetadata(name = machine_type_name) + return len(results) > 0 + # Human readable machine type string @pyqtProperty(str, notify = machineTypeChanged) def readableMachineType(self) -> str: from cura.CuraApplication import CuraApplication machine_manager = CuraApplication.getInstance().getMachineManager() - # In ClusterUM3OutputDevice, when it updates a printer information, it updates the machine type using the field + # In NetworkOutputDevice, when it updates a printer information, it updates the machine type using the field # "machine_variant", and for some reason, it's not the machine type ID/codename/... but a human-readable string # like "Ultimaker 3". The code below handles this case. - if machine_manager.hasHumanReadableMachineTypeName(self._machine_type): + if self._hasHumanReadableMachineTypeName(self._machine_type): readable_type = self._machine_type else: - readable_type = machine_manager.getMachineTypeNameFromId(self._machine_type) + readable_type = self._getMachineTypeNameFromId(self._machine_type) if not readable_type: readable_type = catalog.i18nc("@label", "Unknown") return readable_type @pyqtProperty(bool, notify = machineTypeChanged) def isUnknownMachineType(self) -> bool: - from cura.CuraApplication import CuraApplication - machine_manager = CuraApplication.getInstance().getMachineManager() - if machine_manager.hasHumanReadableMachineTypeName(self._machine_type): + if self._hasHumanReadableMachineTypeName(self._machine_type): readable_type = self._machine_type else: - readable_type = machine_manager.getMachineTypeNameFromId(self._machine_type) + readable_type = self._getMachineTypeNameFromId(self._machine_type) return not readable_type + def _getMachineTypeNameFromId(self, machine_type_id: str) -> str: + machine_type_name = "" + from cura.CuraApplication import CuraApplication + results = CuraApplication.getInstance().getContainerRegistry().findDefinitionContainersMetadata(id = machine_type_id) + if results: + machine_type_name = results[0]["name"] + return machine_type_name + @pyqtProperty(QObject, constant = True) def device(self) -> "NetworkedPrinterOutputDevice": return self._device 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/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..add70f4c1a --- /dev/null +++ b/cura/Machines/Models/IntentCategoryModel.py @@ -0,0 +1,101 @@ +#Copyright (c) 2019 Ultimaker B.V. +#Cura is released under the terms of the LGPLv3 or higher. + +from PyQt5.QtCore import Qt +import collections +from typing import TYPE_CHECKING, Optional, Dict + +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 to user-visible string. Ordered by weight. + # TODO: Create a solution for this name and weight to be used dynamically. + _translations = collections.OrderedDict() # type: "collections.OrderedDict[str,Dict[str,Optional[str]]]" + _translations["default"] = { + "name": catalog.i18nc("@label", "Default") + } + _translations["engineering"] = { + "name": catalog.i18nc("@label", "Engineering"), + "description": catalog.i18nc("@text", "Suitable for engineering work") + + } + _translations["smooth"] = { + "name": catalog.i18nc("@label", "Smooth"), + "description": catalog.i18nc("@text", "Optimized for a smooth surfaces") + } + + ## Creates a new model for a certain intent category. + # \param The category to list the intent profiles for. + 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() + + ## 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() + + ## 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(self._translations.keys()).index(category), + "qualities": qualities + }) + result.sort(key = lambda k: k["weight"]) + self.setItems(result) + + ## Get a display value for a category. See IntenCategoryModel._translations + ## for categories and keys + @staticmethod + def translation(category: str, key: str, default: Optional[str] = None): + display_strings = IntentCategoryModel._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..f5560bc94e --- /dev/null +++ b/cura/Machines/Models/IntentModel.py @@ -0,0 +1,131 @@ +# 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 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") + 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/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..d8b0785778 100644 --- a/cura/Machines/Models/QualityManagementModel.py +++ b/cura/Machines/Models/QualityManagementModel.py @@ -1,10 +1,29 @@ -# 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 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 +32,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 +292,70 @@ 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_category.capitalize()), + }) + # Sort by quality_type for each intent category + result = sorted(result, key = lambda x: (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/Models/UserChangesModel.py b/cura/Machines/Models/UserChangesModel.py index e629295397..ec623f0f38 100644 --- a/cura/Machines/Models/UserChangesModel.py +++ b/cura/Machines/Models/UserChangesModel.py @@ -50,7 +50,7 @@ class UserChangesModel(ListModel): return stacks = [global_stack] - stacks.extend(global_stack.extruders.values()) + stacks.extend(global_stack.extruderList) # Check if the definition container has a translation file and ensure it's loaded. definition = global_stack.getBottom() 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 ef1ff920fe..0000000000 --- a/cura/Machines/QualityManager.py +++ /dev/null @@ -1,552 +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")): - if str(i) in machine.extruders and machine.extruders[str(i)].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) - - # This determines if we should only get the global qualities for the global stack and skip the global qualities for the extruder stacks - has_machine_specific_qualities = machine.getHasMachineQuality() - - # 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 eaaa9fc5f0..0000000000 --- a/cura/Machines/VariantManager.py +++ /dev/null @@ -1,145 +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() - - variant_container = self._container_registry.findContainers(type = "variant", id = variant_metadata["id"])[0] - 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..334a01158b --- /dev/null +++ b/cura/Machines/VariantNode.py @@ -0,0 +1,173 @@ +# 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 +from UM.Settings.ContainerRegistry import ContainerRegistry +from UM.Settings.Interfaces import ContainerInterface +from UM.Signal import Signal + +from cura.Settings.cura_empty_instance_containers import empty_variant_container +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 in base_material and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")): + return material_node + # First fallback: Choose any material with matching diameter. + for material_node in self.materials.values(): + if material_node.getMetaDataEntry("approximate_diameter") and approximate_diameter == int(material_node.getMetaDataEntry("approximate_diameter")): + 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/MultiplyObjectsJob.py b/cura/MultiplyObjectsJob.py index e71bbf6668..5c25f70336 100644 --- a/cura/MultiplyObjectsJob.py +++ b/cura/MultiplyObjectsJob.py @@ -2,10 +2,12 @@ # Cura is released under the terms of the LGPLv3 or higher. import copy +from typing import List from UM.Job import Job from UM.Operations.GroupedOperation import GroupedOperation from UM.Message import Message +from UM.Scene.SceneNode import SceneNode from UM.i18n import i18nCatalog i18n_catalog = i18nCatalog("cura") @@ -23,7 +25,7 @@ class MultiplyObjectsJob(Job): self._count = count self._min_offset = min_offset - def run(self): + def run(self) -> None: status_message = Message(i18n_catalog.i18nc("@info:status", "Multiplying and placing objects"), lifetime=0, dismissable=False, progress=0, title = i18n_catalog.i18nc("@info:title", "Placing Objects")) status_message.show() @@ -33,13 +35,15 @@ class MultiplyObjectsJob(Job): current_progress = 0 global_container_stack = Application.getInstance().getGlobalContainerStack() + if global_container_stack is None: + return # We can't do anything in this case. machine_width = global_container_stack.getProperty("machine_width", "value") machine_depth = global_container_stack.getProperty("machine_depth", "value") root = scene.getRoot() scale = 0.5 arranger = Arrange.create(x = machine_width, y = machine_depth, scene_root = root, scale = scale, min_offset = self._min_offset) - processed_nodes = [] + processed_nodes = [] # type: List[SceneNode] nodes = [] not_fit_count = 0 @@ -67,7 +71,11 @@ class MultiplyObjectsJob(Job): new_node = copy.deepcopy(node) solution_found = False if not node_too_big: - solution_found = arranger.findNodePlacement(new_node, offset_shape_arr, hull_shape_arr) + if offset_shape_arr is not None and hull_shape_arr is not None: + solution_found = arranger.findNodePlacement(new_node, offset_shape_arr, hull_shape_arr) + else: + # The node has no shape, so no need to arrange it. The solution is simple: Do nothing. + solution_found = True if node_too_big or not solution_found: found_solution_for_all = False diff --git a/cura/OAuth2/AuthorizationRequestHandler.py b/cura/OAuth2/AuthorizationRequestHandler.py index 66ecfc2787..83b94ed586 100644 --- a/cura/OAuth2/AuthorizationRequestHandler.py +++ b/cura/OAuth2/AuthorizationRequestHandler.py @@ -25,6 +25,10 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler): self.authorization_callback = None # type: Optional[Callable[[AuthenticationResponse], None]] self.verification_code = None # type: Optional[str] + # CURA-6609: Some browser seems to issue a HEAD instead of GET request as the callback. + def do_HEAD(self) -> None: + self.do_GET() + def do_GET(self) -> None: # Extract values from the query string. parsed_url = urlparse(self.path) diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py index 27041b1f80..68756f8df6 100644 --- a/cura/OAuth2/AuthorizationService.py +++ b/cura/OAuth2/AuthorizationService.py @@ -2,15 +2,19 @@ # Cura is released under the terms of the LGPLv3 or higher. import json -import webbrowser from datetime import datetime, timedelta +import os from typing import Optional, TYPE_CHECKING from urllib.parse import urlencode + import requests.exceptions +from PyQt5.QtCore import QUrl +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 @@ -163,7 +167,7 @@ class AuthorizationService: }) # Open the authorization page in a new browser window. - webbrowser.open_new("{}?{}".format(self._auth_url, query_string)) + QDesktopServices.openUrl(QUrl("{}?{}".format(self._auth_url, query_string))) # Start a local web server to receive the callback URL on. self._server.start(verification_code) @@ -195,8 +199,6 @@ class AuthorizationService: self._unable_to_get_data_message.hide() self._unable_to_get_data_message = Message(i18n_catalog.i18nc("@info", "Unable to reach the Ultimaker account server."), title = i18n_catalog.i18nc("@info:title", "Warning")) - self._unable_to_get_data_message.addAction("retry", i18n_catalog.i18nc("@action:button", "Retry"), "[no_icon]", "[no_description]") - self._unable_to_get_data_message.actionTriggered.connect(self._onMessageActionTriggered) self._unable_to_get_data_message.show() except ValueError: Logger.logException("w", "Could not load auth data from preferences") @@ -218,6 +220,3 @@ class AuthorizationService: self.accessTokenChanged.emit() - def _onMessageActionTriggered(self, _, action): - if action == "retry": - self.loadAuthDataFromPreferences() diff --git a/cura/OAuth2/LocalAuthorizationServer.py b/cura/OAuth2/LocalAuthorizationServer.py index 25b2435012..a80b0deb28 100644 --- a/cura/OAuth2/LocalAuthorizationServer.py +++ b/cura/OAuth2/LocalAuthorizationServer.py @@ -63,6 +63,10 @@ class LocalAuthorizationServer: Logger.log("d", "Stopping local oauth2 web server...") if self._web_server: - self._web_server.server_close() + try: + self._web_server.server_close() + except OSError: + # OS error can happen if the socket was already closed. We really don't care about that case. + pass self._web_server = None self._web_server_thread = None diff --git a/cura/OneAtATimeIterator.py b/cura/OneAtATimeIterator.py index a08f3ed2bf..b77e1f3982 100644 --- a/cura/OneAtATimeIterator.py +++ b/cura/OneAtATimeIterator.py @@ -1,149 +1,127 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -import sys +from typing import List -from shapely import affinity -from shapely.geometry import Polygon - -from UM.Scene.Iterator.Iterator import Iterator +from UM.Scene.Iterator import Iterator from UM.Scene.SceneNode import SceneNode +from functools import cmp_to_key +## Iterator that returns a list of nodes in the order that they need to be printed +# If there is no solution an empty list is returned. +# Take note that the list of nodes can have children (that may or may not contain mesh data) +class OneAtATimeIterator(Iterator.Iterator): + def __init__(self, scene_node) -> None: + super().__init__(scene_node) # Call super to make multiple inheritance work. + self._hit_map = [[]] # type: List[List[bool]] # For each node, which other nodes this hits. A grid of booleans on which nodes hit which. + self._original_node_list = [] # type: List[SceneNode] # The nodes that need to be checked for collisions. -# Iterator that determines the object print order when one-at a time mode is enabled. -# -# In one-at-a-time mode, only one extruder can be enabled to print. In order to maximize the number of objects we can -# print, we need to print from the corner that's closest to the extruder that's being used. Here is an illustration: -# -# +--------------------------------+ -# | | -# | | -# | | - Rectangle represents the complete print head including fans, etc. -# | X X | y - X's are the nozzles -# | (1) (2) | ^ -# | | | -# +--------------------------------+ +--> x -# -# In this case, the nozzles are symmetric, nozzle (1) is closer to the bottom left corner while (2) is closer to the -# bottom right. If we use nozzle (1) to print, then we better off printing from the bottom left corner so the print -# head will not collide into an object on its top-right side, which is a very large unused area. Following the same -# logic, if we are printing with nozzle (2), then it's better to print from the bottom-right side. -# -# This iterator determines the print order following the rules above. -# -class OneAtATimeIterator(Iterator): - - def __init__(self, scene_node): - from cura.CuraApplication import CuraApplication - self._global_stack = CuraApplication.getInstance().getGlobalContainerStack() - self._original_node_list = [] - - super().__init__(scene_node) # Call super to make multiple inheritance work. - - def getMachineNearestCornerToExtruder(self, global_stack): - head_and_fans_coordinates = global_stack.getHeadAndFansCoordinates() - - used_extruder = None - for extruder in global_stack.extruders.values(): - if extruder.isEnabled: - used_extruder = extruder - break - - extruder_offsets = [used_extruder.getProperty("machine_nozzle_offset_x", "value"), - used_extruder.getProperty("machine_nozzle_offset_y", "value")] - - # find the corner that's closest to the origin - min_distance2 = sys.maxsize - min_coord = None - for coord in head_and_fans_coordinates: - x = coord[0] - extruder_offsets[0] - y = coord[1] - extruder_offsets[1] - - distance2 = x**2 + y**2 - if distance2 <= min_distance2: - min_distance2 = distance2 - min_coord = coord - - return min_coord - - def _checkForCollisions(self) -> bool: - all_nodes = [] - for node in self._scene_node.getChildren(): - if not issubclass(type(node), SceneNode): - continue - convex_hull = node.callDecoration("getConvexHullHead") - if not convex_hull: - continue - - bounding_box = node.getBoundingBox() - if not bounding_box: - continue - from UM.Math.Polygon import Polygon - bounding_box_polygon = Polygon([[bounding_box.left, bounding_box.front], - [bounding_box.left, bounding_box.back], - [bounding_box.right, bounding_box.back], - [bounding_box.right, bounding_box.front]]) - - all_nodes.append({"node": node, - "bounding_box": bounding_box_polygon, - "convex_hull": convex_hull}) - - has_collisions = False - for i, node_dict in enumerate(all_nodes): - for j, other_node_dict in enumerate(all_nodes): - if i == j: - continue - if node_dict["bounding_box"].intersectsPolygon(other_node_dict["convex_hull"]): - has_collisions = True - break - - if has_collisions: - break - - return has_collisions - - def _fillStack(self): - min_coord = self.getMachineNearestCornerToExtruder(self._global_stack) - transform_x = -int(round(min_coord[0] / abs(min_coord[0]))) - transform_y = -int(round(min_coord[1] / abs(min_coord[1]))) - - machine_size = [self._global_stack.getProperty("machine_width", "value"), - self._global_stack.getProperty("machine_depth", "value")] - - def flip_x(polygon): - tm2 = [-1, 0, 0, 1, 0, 0] - return affinity.affine_transform(affinity.translate(polygon, xoff = -machine_size[0]), tm2) - - def flip_y(polygon): - tm2 = [1, 0, 0, -1, 0, 0] - return affinity.affine_transform(affinity.translate(polygon, yoff = -machine_size[1]), tm2) - - if self._checkForCollisions(): - self._node_stack = [] - return - + ## Fills the ``_node_stack`` with a list of scene nodes that need to be + # printed in order. + def _fillStack(self) -> None: node_list = [] for node in self._scene_node.getChildren(): if not issubclass(type(node), SceneNode): continue - convex_hull = node.callDecoration("getConvexHull") - if convex_hull: - xmin = min(x for x, _ in convex_hull._points) - xmax = max(x for x, _ in convex_hull._points) - ymin = min(y for _, y in convex_hull._points) - ymax = max(y for _, y in convex_hull._points) + if node.callDecoration("getConvexHull"): + node_list.append(node) - convex_hull_polygon = Polygon.from_bounds(xmin, ymin, xmax, ymax) - if transform_x < 0: - convex_hull_polygon = flip_x(convex_hull_polygon) - if transform_y < 0: - convex_hull_polygon = flip_y(convex_hull_polygon) - node_list.append({"node": node, - "min_coord": [convex_hull_polygon.bounds[0], convex_hull_polygon.bounds[1]], - }) + if len(node_list) < 2: + self._node_stack = node_list[:] + return - node_list = sorted(node_list, key = lambda d: d["min_coord"]) + # Copy the list + self._original_node_list = node_list[:] - self._node_stack = [d["node"] for d in node_list] + ## Initialise the hit map (pre-compute all hits between all objects) + self._hit_map = [[self._checkHit(i,j) for i in node_list] for j in node_list] + + # Check if we have to files that block each other. If this is the case, there is no solution! + for a in range(0, len(node_list)): + for b in range(0, len(node_list)): + if a != b and self._hit_map[a][b] and self._hit_map[b][a]: + return + + # Sort the original list so that items that block the most other objects are at the beginning. + # This does not decrease the worst case running time, but should improve it in most cases. + sorted(node_list, key = cmp_to_key(self._calculateScore)) + + todo_node_list = [_ObjectOrder([], node_list)] + while len(todo_node_list) > 0: + current = todo_node_list.pop() + for node in current.todo: + # Check if the object can be placed with what we have and still allows for a solution in the future + if not self._checkHitMultiple(node, current.order) and not self._checkBlockMultiple(node, current.todo): + # We found a possible result. Create new todo & order list. + new_todo_list = current.todo[:] + new_todo_list.remove(node) + new_order = current.order[:] + [node] + if len(new_todo_list) == 0: + # We have no more nodes to check, so quit looking. + self._node_stack = new_order + return + todo_node_list.append(_ObjectOrder(new_order, new_todo_list)) + self._node_stack = [] #No result found! + + + # Check if first object can be printed before the provided list (using the hit map) + def _checkHitMultiple(self, node: SceneNode, other_nodes: List[SceneNode]) -> bool: + node_index = self._original_node_list.index(node) + for other_node in other_nodes: + other_node_index = self._original_node_list.index(other_node) + if self._hit_map[node_index][other_node_index]: + return True + return False + + ## Check for a node whether it hits any of the other nodes. + # \param node The node to check whether it collides with the other nodes. + # \param other_nodes The nodes to check for collisions. + def _checkBlockMultiple(self, node: SceneNode, other_nodes: List[SceneNode]) -> bool: + node_index = self._original_node_list.index(node) + for other_node in other_nodes: + other_node_index = self._original_node_list.index(other_node) + if self._hit_map[other_node_index][node_index] and node_index != other_node_index: + return True + return False + + ## Calculate score simply sums the number of other objects it 'blocks' + def _calculateScore(self, a: SceneNode, b: SceneNode) -> int: + score_a = sum(self._hit_map[self._original_node_list.index(a)]) + score_b = sum(self._hit_map[self._original_node_list.index(b)]) + return score_a - score_b + + ## Checks if A can be printed before B + def _checkHit(self, a: SceneNode, b: SceneNode) -> bool: + if a == b: + return False + + a_hit_hull = a.callDecoration("getConvexHullBoundary") + b_hit_hull = b.callDecoration("getConvexHullHeadFull") + overlap = a_hit_hull.intersectsPolygon(b_hit_hull) + + if overlap: + return True + + # Adhesion areas must never overlap, regardless of printing order + # This would cause over-extrusion + a_hit_hull = a.callDecoration("getAdhesionArea") + b_hit_hull = b.callDecoration("getAdhesionArea") + overlap = a_hit_hull.intersectsPolygon(b_hit_hull) + + if overlap: + return True + else: + return False + + +## Internal object used to keep track of a possible order in which to print objects. +class _ObjectOrder: + ## Creates the _ObjectOrder instance. + # \param order List of indices in which to print objects, ordered by printing + # order. + # \param todo: List of indices which are not yet inserted into the order list. + def __init__(self, order: List[SceneNode], todo: List[SceneNode]): + self.order = order + self.todo = todo diff --git a/cura/PlatformPhysics.py b/cura/PlatformPhysics.py index d9876b3b36..d084c0dbf4 100755 --- a/cura/PlatformPhysics.py +++ b/cura/PlatformPhysics.py @@ -49,18 +49,20 @@ class PlatformPhysics: return root = self._controller.getScene().getRoot() + build_volume = Application.getInstance().getBuildVolume() + build_volume.updateNodeBoundaryCheck() # Keep a list of nodes that are moving. We use this so that we don't move two intersecting objects in the # same direction. transformed_nodes = [] - # We try to shuffle all the nodes to prevent "locked" situations, where iteration B inverts iteration A. - # By shuffling the order of the nodes, this might happen a few times, but at some point it will resolve. nodes = list(BreadthFirstIterator(root)) # Only check nodes inside build area. nodes = [node for node in nodes if (hasattr(node, "_outside_buildarea") and not node._outside_buildarea)] + # We try to shuffle all the nodes to prevent "locked" situations, where iteration B inverts iteration A. + # By shuffling the order of the nodes, this might happen a few times, but at some point it will resolve. random.shuffle(nodes) for node in nodes: if node is root or not isinstance(node, SceneNode) or node.getBoundingBox() is None: @@ -160,7 +162,6 @@ class PlatformPhysics: op.push() # After moving, we have to evaluate the boundary checks for nodes - build_volume = Application.getInstance().getBuildVolume() build_volume.updateNodeBoundaryCheck() def _onToolOperationStarted(self, tool): diff --git a/cura/PreviewPass.py b/cura/PreviewPass.py index befb52ee5e..58205ba708 100644 --- a/cura/PreviewPass.py +++ b/cura/PreviewPass.py @@ -1,7 +1,8 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import Optional, TYPE_CHECKING +from typing import Optional, TYPE_CHECKING, cast + from UM.Application import Application from UM.Resources import Resources @@ -12,6 +13,7 @@ from UM.View.RenderBatch import RenderBatch from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator +from cura.Scene.CuraSceneNode import CuraSceneNode if TYPE_CHECKING: from UM.View.GL.ShaderProgram import ShaderProgram @@ -44,9 +46,9 @@ class PreviewPass(RenderPass): self._renderer = Application.getInstance().getRenderer() - self._shader = None #type: Optional[ShaderProgram] - self._non_printing_shader = None #type: Optional[ShaderProgram] - self._support_mesh_shader = None #type: Optional[ShaderProgram] + self._shader = None # type: Optional[ShaderProgram] + self._non_printing_shader = None # type: Optional[ShaderProgram] + self._support_mesh_shader = None # type: Optional[ShaderProgram] self._scene = Application.getInstance().getController().getScene() # Set the camera to be used by this render pass @@ -62,6 +64,7 @@ class PreviewPass(RenderPass): self._shader.setUniformValue("u_ambientColor", [0.1, 0.1, 0.1, 1.0]) self._shader.setUniformValue("u_specularColor", [0.6, 0.6, 0.6, 1.0]) self._shader.setUniformValue("u_shininess", 20.0) + self._shader.setUniformValue("u_faceId", -1) # Don't render any selected faces in the preview. if not self._non_printing_shader: if self._non_printing_shader: @@ -83,30 +86,31 @@ class PreviewPass(RenderPass): batch_support_mesh = RenderBatch(self._support_mesh_shader) # Fill up the batch with objects that can be sliced. - for node in DepthFirstIterator(self._scene.getRoot()): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. - if node.callDecoration("isSliceable") and node.getMeshData() and node.isVisible(): - per_mesh_stack = node.callDecoration("getStack") - if node.callDecoration("isNonThumbnailVisibleMesh"): - # Non printing mesh - continue - elif per_mesh_stack is not None and per_mesh_stack.getProperty("support_mesh", "value"): - # Support mesh - uniforms = {} - shade_factor = 0.6 - diffuse_color = node.getDiffuseColor() - diffuse_color2 = [ - diffuse_color[0] * shade_factor, - diffuse_color[1] * shade_factor, - diffuse_color[2] * shade_factor, - 1.0] - uniforms["diffuse_color"] = prettier_color(diffuse_color) - uniforms["diffuse_color_2"] = diffuse_color2 - batch_support_mesh.addItem(node.getWorldTransformation(), node.getMeshData(), uniforms = uniforms) - else: - # Normal scene node - uniforms = {} - uniforms["diffuse_color"] = prettier_color(node.getDiffuseColor()) - batch.addItem(node.getWorldTransformation(), node.getMeshData(), uniforms = uniforms) + for node in DepthFirstIterator(self._scene.getRoot()): + if hasattr(node, "_outside_buildarea") and not getattr(node, "_outside_buildarea"): + if node.callDecoration("isSliceable") and node.getMeshData() and node.isVisible(): + per_mesh_stack = node.callDecoration("getStack") + if node.callDecoration("isNonThumbnailVisibleMesh"): + # Non printing mesh + continue + elif per_mesh_stack is not None and per_mesh_stack.getProperty("support_mesh", "value"): + # Support mesh + uniforms = {} + shade_factor = 0.6 + diffuse_color = cast(CuraSceneNode, node).getDiffuseColor() + diffuse_color2 = [ + diffuse_color[0] * shade_factor, + diffuse_color[1] * shade_factor, + diffuse_color[2] * shade_factor, + 1.0] + uniforms["diffuse_color"] = prettier_color(diffuse_color) + uniforms["diffuse_color_2"] = diffuse_color2 + batch_support_mesh.addItem(node.getWorldTransformation(), node.getMeshData(), uniforms = uniforms) + else: + # Normal scene node + uniforms = {} + uniforms["diffuse_color"] = prettier_color(cast(CuraSceneNode, node).getDiffuseColor()) + batch.addItem(node.getWorldTransformation(), node.getMeshData(), uniforms = uniforms) self.bind() diff --git a/cura/PrinterOutput/GenericOutputController.py b/cura/PrinterOutput/GenericOutputController.py index e770fc79a1..c160459776 100644 --- a/cura/PrinterOutput/GenericOutputController.py +++ b/cura/PrinterOutput/GenericOutputController.py @@ -55,7 +55,7 @@ class GenericOutputController(PrinterOutputController): self._preheat_hotends_timer.stop() for extruder in self._preheat_hotends: extruder.updateIsPreheating(False) - self._preheat_hotends = set() # type: Set[ExtruderOutputModel] + self._preheat_hotends = set() def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed) -> None: self._output_device.sendCommand("G91") @@ -159,7 +159,7 @@ class GenericOutputController(PrinterOutputController): def _onPreheatHotendsTimerFinished(self) -> None: for extruder in self._preheat_hotends: self.setTargetHotendTemperature(extruder.getPrinter(), extruder.getPosition(), 0) - self._preheat_hotends = set() #type: Set[ExtruderOutputModel] + self._preheat_hotends = set() # Cancel any ongoing preheating timers, without setting back the temperature to 0 # This can be used eg at the start of a print @@ -167,7 +167,7 @@ class GenericOutputController(PrinterOutputController): if self._preheat_hotends_timer.isActive(): for extruder in self._preheat_hotends: extruder.updateIsPreheating(False) - self._preheat_hotends = set() #type: Set[ExtruderOutputModel] + self._preheat_hotends = set() self._preheat_hotends_timer.stop() diff --git a/cura/PrinterOutput/Models/ExtruderConfigurationModel.py b/cura/PrinterOutput/Models/ExtruderConfigurationModel.py index 5b4cb5d6f5..4a1cf4916f 100644 --- a/cura/PrinterOutput/Models/ExtruderConfigurationModel.py +++ b/cura/PrinterOutput/Models/ExtruderConfigurationModel.py @@ -25,15 +25,16 @@ class ExtruderConfigurationModel(QObject): return self._position def setMaterial(self, material: Optional[MaterialOutputModel]) -> None: - if self._hotend_id != 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]: return self._material - @pyqtProperty(QObject, fset=setMaterial, notify=extruderConfigurationChanged) + @pyqtProperty(QObject, fset = setMaterial, notify = extruderConfigurationChanged) def material(self) -> Optional[MaterialOutputModel]: return self._material 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/PrinterConfigurationModel.py b/cura/PrinterOutput/Models/PrinterConfigurationModel.py index 47b9532080..52c7b6f960 100644 --- a/cura/PrinterOutput/Models/PrinterConfigurationModel.py +++ b/cura/PrinterOutput/Models/PrinterConfigurationModel.py @@ -58,6 +58,14 @@ class PrinterConfigurationModel(QObject): return False return self._printer_type != "" + def hasAnyMaterialLoaded(self) -> bool: + if not self.isValid(): + return False + for configuration in self._extruder_configurations: + if configuration.activeMaterial and configuration.activeMaterial.type != "empty": + return True + return False + def __str__(self): message_chunks = [] message_chunks.append("Printer type: " + self._printer_type) diff --git a/cura/PrinterOutput/Models/PrinterOutputModel.py b/cura/PrinterOutput/Models/PrinterOutputModel.py index 4004a90a33..a1a23201fb 100644 --- a/cura/PrinterOutput/Models/PrinterOutputModel.py +++ b/cura/PrinterOutput/Models/PrinterOutputModel.py @@ -2,13 +2,14 @@ # Cura is released under the terms of the LGPLv3 or higher. from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant, pyqtSlot, QUrl -from typing import List, Dict, Optional +from typing import List, Dict, Optional, TYPE_CHECKING from UM.Math.Vector import Vector +from cura.PrinterOutput.Peripheral import Peripheral from cura.PrinterOutput.Models.PrinterConfigurationModel import PrinterConfigurationModel from cura.PrinterOutput.Models.ExtruderOutputModel import ExtruderOutputModel +from UM.Logger import Logger -MYPY = False -if MYPY: +if TYPE_CHECKING: from cura.PrinterOutput.Models.PrintJobOutputModel import PrintJobOutputModel from cura.PrinterOutput.PrinterOutputController import PrinterOutputController @@ -37,7 +38,7 @@ class PrinterOutputModel(QObject): self._controller = output_controller self._controller.canUpdateFirmwareChanged.connect(self._onControllerCanUpdateFirmwareChanged) self._extruders = [ExtruderOutputModel(printer = self, position = i) for i in range(number_of_extruders)] - self._printer_configuration = PrinterConfigurationModel() # Indicates the current configuration setup in this printer + self._active_printer_configuration = PrinterConfigurationModel() # Indicates the current configuration setup in this printer self._head_position = Vector(0, 0, 0) self._active_print_job = None # type: Optional[PrintJobOutputModel] self._firmware_version = firmware_version @@ -45,9 +46,12 @@ class PrinterOutputModel(QObject): self._is_preheating = False self._printer_type = "" self._buildplate = "" + self._peripherals = [] # type: List[Peripheral] - self._printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in - self._extruders] + self._active_printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in + self._extruders] + self._active_printer_configuration.configurationChanged.connect(self.configurationChanged) + self._available_printer_configurations = [] # type: List[PrinterConfigurationModel] self._camera_url = QUrl() # type: QUrl @@ -80,7 +84,7 @@ class PrinterOutputModel(QObject): def updateType(self, printer_type: str) -> None: if self._printer_type != printer_type: self._printer_type = printer_type - self._printer_configuration.printerType = self._printer_type + self._active_printer_configuration.printerType = self._printer_type self.typeChanged.emit() self.configurationChanged.emit() @@ -91,7 +95,7 @@ class PrinterOutputModel(QObject): def updateBuildplate(self, buildplate: str) -> None: if self._buildplate != buildplate: self._buildplate = buildplate - self._printer_configuration.buildplateConfiguration = self._buildplate + self._active_printer_configuration.buildplateConfiguration = self._buildplate self.buildplateChanged.emit() self.configurationChanged.emit() @@ -289,9 +293,48 @@ class PrinterOutputModel(QObject): def _onControllerCanUpdateFirmwareChanged(self) -> None: self.canUpdateFirmwareChanged.emit() - # Returns the configuration (material, variant and buildplate) of the current printer + # Returns the active configuration (material, variant and buildplate) of the current printer @pyqtProperty(QObject, notify = configurationChanged) def printerConfiguration(self) -> Optional[PrinterConfigurationModel]: - if self._printer_configuration.isValid(): - return self._printer_configuration - return None \ No newline at end of file + if self._active_printer_configuration.isValid(): + return self._active_printer_configuration + return None + + peripheralsChanged = pyqtSignal() + + @pyqtProperty(str, notify = peripheralsChanged) + def peripherals(self) -> str: + return ", ".join([peripheral.name for peripheral in self._peripherals]) + + def addPeripheral(self, peripheral: Peripheral) -> None: + self._peripherals.append(peripheral) + self.peripheralsChanged.emit() + + def removePeripheral(self, peripheral: Peripheral) -> None: + self._peripherals.remove(peripheral) + self.peripheralsChanged.emit() + + availableConfigurationsChanged = pyqtSignal() + + # The availableConfigurations are configuration options that a printer can switch to, but doesn't currently have + # active (eg; Automatic tool changes, material loaders, etc). + @pyqtProperty("QVariantList", notify = availableConfigurationsChanged) + def availableConfigurations(self) -> List[PrinterConfigurationModel]: + return self._available_printer_configurations + + def addAvailableConfiguration(self, new_configuration: PrinterConfigurationModel) -> None: + if new_configuration not in self._available_printer_configurations: + self._available_printer_configurations.append(new_configuration) + self.availableConfigurationsChanged.emit() + + def removeAvailableConfiguration(self, config_to_remove: PrinterConfigurationModel) -> None: + try: + self._available_printer_configurations.remove(config_to_remove) + except ValueError: + Logger.log("w", "Unable to remove configuration that isn't in the list of available configurations") + else: + self.availableConfigurationsChanged.emit() + + def setAvailableConfigurations(self, new_configurations: List[PrinterConfigurationModel]) -> None: + self._available_printer_configurations = new_configurations + self.availableConfigurationsChanged.emit() diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py index 86da9bf57f..392df7bded 100644 --- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py +++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py @@ -35,8 +35,6 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): def __init__(self, device_id, address: str, properties: Dict[bytes, bytes], connection_type: ConnectionType = ConnectionType.NetworkConnection, parent: QObject = None) -> None: super().__init__(device_id = device_id, connection_type = connection_type, parent = parent) self._manager = None # type: Optional[QNetworkAccessManager] - self._last_manager_create_time = None # type: Optional[float] - self._recreate_network_manager_time = 30 self._timeout_time = 10 # After how many seconds of no response should a timeout occur? self._last_response_time = None # type: Optional[float] @@ -60,8 +58,8 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._gcode = [] # type: List[str] self._connection_state_before_timeout = None # type: Optional[ConnectionState] - def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, - file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: + def requestWrite(self, nodes: List["SceneNode"], file_name: Optional[str] = None, limit_mimetypes: bool = False, + file_handler: Optional["FileHandler"] = None, filter_by_machine: bool = False, **kwargs) -> None: raise NotImplementedError("requestWrite needs to be implemented") def setAuthenticationState(self, authentication_state: AuthState) -> None: @@ -133,12 +131,6 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self.setConnectionState(ConnectionState.Closed) - # We need to check if the manager needs to be re-created. If we don't, we get some issues when OSX goes to - # sleep. - if time_since_last_response > self._recreate_network_manager_time: - if self._last_manager_create_time is None or time() - self._last_manager_create_time > self._recreate_network_manager_time: - self._createNetworkManager() - assert(self._manager is not None) elif self._connection_state == ConnectionState.Closed: # Go out of timeout. if self._connection_state_before_timeout is not None: # sanity check, but it should never be None here @@ -317,7 +309,6 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._manager = QNetworkAccessManager() self._manager.finished.connect(self._handleOnFinished) - self._last_manager_create_time = time() self._manager.authenticationRequired.connect(self._onAuthenticationRequired) if self._properties.get(b"temporary", b"false") != b"true": diff --git a/cura/PrinterOutput/Peripheral.py b/cura/PrinterOutput/Peripheral.py new file mode 100644 index 0000000000..2693b82c36 --- /dev/null +++ b/cura/PrinterOutput/Peripheral.py @@ -0,0 +1,16 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + + +## Data class that represents a peripheral for a printer. +# +# Output device plug-ins may specify that the printer has a certain set of +# peripherals. This set is then possibly shown in the interface of the monitor +# stage. +class Peripheral: + ## Constructs the peripheral. + # \param type A unique ID for the type of peripheral. + # \param name A human-readable name for the peripheral. + def __init__(self, peripheral_type: str, name: str) -> None: + self.type = peripheral_type + self.name = name diff --git a/cura/PrinterOutput/PrinterOutputDevice.py b/cura/PrinterOutput/PrinterOutputDevice.py index 8e1b220a86..ec682a1739 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 @@ -144,7 +143,7 @@ class PrinterOutputDevice(QObject, OutputDevice): return None def requestWrite(self, nodes: List["SceneNode"], file_name: Optional[str] = None, limit_mimetypes: bool = False, - file_handler: Optional["FileHandler"] = None, **kwargs: str) -> None: + file_handler: Optional["FileHandler"] = None, filter_by_machine: bool = False, **kwargs) -> None: raise NotImplementedError("requestWrite needs to be implemented") @pyqtProperty(QObject, notify = printersChanged) @@ -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: @@ -220,20 +215,28 @@ class PrinterOutputDevice(QObject, OutputDevice): return self._unique_configurations def _updateUniqueConfigurations(self) -> None: - self._unique_configurations = sorted( - {printer.printerConfiguration for printer in self._printers if printer.printerConfiguration is not None}, - key=lambda config: config.printerType, - ) - self.uniqueConfigurationsChanged.emit() + all_configurations = set() + for printer in self._printers: + if printer.printerConfiguration is not None and printer.printerConfiguration.hasAnyMaterialLoaded(): + all_configurations.add(printer.printerConfiguration) + all_configurations.update(printer.availableConfigurations) + if None in all_configurations: # Shouldn't happen, but it do. 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() # 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: printer.configurationChanged.connect(self._updateUniqueConfigurations) + printer.availableConfigurationsChanged.connect(self._updateUniqueConfigurations) # At this point there may be non-updated configurations self._updateUniqueConfigurations() diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py index 1aae97942a..72e95c9299 100644 --- a/cura/Scene/ConvexHullDecorator.py +++ b/cura/Scene/ConvexHullDecorator.py @@ -66,18 +66,35 @@ class ConvexHullDecorator(SceneNodeDecorator): node.boundingBoxChanged.connect(self._onChanged) + per_object_stack = node.callDecoration("getStack") + if per_object_stack: + per_object_stack.propertyChanged.connect(self._onSettingValueChanged) + self._onChanged() ## Force that a new (empty) object is created upon copy. def __deepcopy__(self, memo): return ConvexHullDecorator() - ## Get the unmodified 2D projected convex hull of the node (if any) - def getConvexHull(self) -> Optional[Polygon]: + ## The polygon representing the 2D adhesion area. + # If no adhesion is used, the regular convex hull is returned + def getAdhesionArea(self) -> Optional[Polygon]: if self._node is None: return None hull = self._compute2DConvexHull() + if hull is None: + return None + + return self._add2DAdhesionMargin(hull) + + ## Get the unmodified 2D projected convex hull with 2D adhesion area of the node (if any) + 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. @@ -106,7 +123,8 @@ class ConvexHullDecorator(SceneNodeDecorator): 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() @@ -122,6 +140,9 @@ class ConvexHullDecorator(SceneNodeDecorator): 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): @@ -257,9 +278,13 @@ class ConvexHullDecorator(SceneNodeDecorator): return offset_hull def _getHeadAndFans(self) -> Polygon: - if self._global_stack: - return Polygon(numpy.array(self._global_stack.getHeadAndFansCoordinates(), numpy.float32)) - return Polygon() + if not self._global_stack: + return Polygon() + + polygon = Polygon(numpy.array(self._global_stack.getHeadAndFansCoordinates(), numpy.float32)) + offset_x = self._getSettingProperty("machine_nozzle_offset_x", "value") + offset_y = self._getSettingProperty("machine_nozzle_offset_y", "value") + return polygon.translate(-offset_x, -offset_y) def _compute2DConvexHeadFull(self) -> Optional[Polygon]: convex_hull = self._compute2DConvexHull() @@ -398,4 +423,4 @@ class ConvexHullDecorator(SceneNodeDecorator): ## Settings that change the convex hull. # # If these settings change, the convex hull should be recalculated. - _influencing_settings = {"xy_offset", "xy_offset_layer_0", "mold_enabled", "mold_width"} + _influencing_settings = {"xy_offset", "xy_offset_layer_0", "mold_enabled", "mold_width", "anti_overhang_mesh", "infill_mesh", "cutting_mesh"} diff --git a/cura/Scene/CuraSceneNode.py b/cura/Scene/CuraSceneNode.py index 1983bc6008..4215c8fa84 100644 --- a/cura/Scene/CuraSceneNode.py +++ b/cura/Scene/CuraSceneNode.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 copy import deepcopy @@ -6,13 +6,14 @@ from typing import cast, Dict, List, Optional from UM.Application import Application from UM.Math.AxisAlignedBox import AxisAlignedBox -from UM.Math.Polygon import Polygon #For typing. +from UM.Math.Polygon import Polygon # For typing. from UM.Scene.SceneNode import SceneNode -from UM.Scene.SceneNodeDecorator import SceneNodeDecorator #To cast the deepcopy of every decorator back to SceneNodeDecorator. +from UM.Scene.SceneNodeDecorator import SceneNodeDecorator # To cast the deepcopy of every decorator back to SceneNodeDecorator. + +import cura.CuraApplication # To get the build plate. +from cura.Settings.ExtruderStack import ExtruderStack # For typing. +from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator # For per-object settings. -import cura.CuraApplication #To get the build plate. -from cura.Settings.ExtruderStack import ExtruderStack #For typing. -from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator #For per-object settings. ## Scene nodes that are models are only seen when selecting the corresponding build plate # Note that many other nodes can just be UM SceneNode objects. @@ -20,7 +21,7 @@ class CuraSceneNode(SceneNode): def __init__(self, parent: Optional["SceneNode"] = None, visible: bool = True, name: str = "", no_setting_override: bool = False) -> None: super().__init__(parent = parent, visible = visible, name = name) if not no_setting_override: - self.addDecorator(SettingOverrideDecorator()) # now we always have a getActiveExtruderPosition, unless explicitly disabled + self.addDecorator(SettingOverrideDecorator()) # Now we always have a getActiveExtruderPosition, unless explicitly disabled self._outside_buildarea = False def setOutsideBuildArea(self, new_value: bool) -> None: @@ -58,7 +59,7 @@ class CuraSceneNode(SceneNode): if extruder_id is not None: if extruder_id == extruder.getId(): return extruder - else: # If the id is unknown, then return the extruder in the position 0 + else: # If the id is unknown, then return the extruder in the position 0 try: if extruder.getMetaDataEntry("position", default = "0") == "0": # Check if the position is zero return extruder @@ -85,24 +86,14 @@ class CuraSceneNode(SceneNode): 1.0 ] - ## Return if the provided bbox collides with the bbox of this scene node - def collidesWithBbox(self, check_bbox: AxisAlignedBox) -> bool: - bbox = self.getBoundingBox() - if bbox is not None: - # Mark the node as outside the build volume if the bounding box test fails. - if check_bbox.intersectsBox(bbox) != AxisAlignedBox.IntersectionResult.FullIntersection: - return True - - return False - ## Return if any area collides with the convex hull of this scene node - def collidesWithArea(self, areas: List[Polygon]) -> bool: + def collidesWithAreas(self, areas: List[Polygon]) -> bool: convex_hull = self.callDecoration("getConvexHull") if convex_hull: if not convex_hull.isValid(): return False - # Check for collisions between disallowed areas and the object + # Check for collisions between provided areas and the object for area in areas: overlap = convex_hull.intersectsPolygon(area) if overlap is None: @@ -115,6 +106,9 @@ class CuraSceneNode(SceneNode): self._aabb = None if self._mesh_data: self._aabb = self._mesh_data.getExtents(self.getWorldTransformation()) + else: # If there is no mesh_data, use a boundingbox that encompasses the local (0,0,0) + position = self.getWorldPosition() + self._aabb = AxisAlignedBox(minimum=position, maximum=position) for child in self.getAllChildren(): if child.callDecoration("isNonPrintingMesh"): diff --git a/cura/Scene/GCodeListDecorator.py b/cura/Scene/GCodeListDecorator.py index d3dadb3f23..6c52fb89bf 100644 --- a/cura/Scene/GCodeListDecorator.py +++ b/cura/Scene/GCodeListDecorator.py @@ -1,11 +1,18 @@ from UM.Scene.SceneNodeDecorator import SceneNodeDecorator -from typing import List +from typing import List, Optional class GCodeListDecorator(SceneNodeDecorator): def __init__(self) -> None: super().__init__() self._gcode_list = [] # type: List[str] + self._filename = None # type: Optional[str] + + def getGcodeFileName(self) -> Optional[str]: + return self._filename + + def setGcodeFileName(self, filename: str) -> None: + self._filename = filename def getGCodeList(self) -> List[str]: return self._gcode_list diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 2422fa3b21..4a4a7b64dd 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 +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,12 +235,13 @@ 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) @@ -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 [metadata["name"] for metadata in same_guid if metadata["base_file"] != material_node.base_file] + else: + return [metadata["name"] for metadata 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 = [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 dd7ed625d6..f6028e9d4d 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -5,7 +5,7 @@ import os import re import configparser -from typing import Any, cast, Dict, Optional +from typing import Any, cast, Dict, Optional, List, Union from PyQt5.QtWidgets import QMessageBox from UM.Decorators import override @@ -20,14 +20,16 @@ from UM.Logger import Logger 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.Util import parseBool from UM.Resources import Resources +from UM.Util import parseBool +from cura.ReaderWriters.ProfileWriter import ProfileWriter from . import ExtruderStack from . import GlobalStack import cura.CuraApplication -from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch +from cura.Settings.cura_empty_instance_containers import empty_quality_container +from cura.Machines.ContainerTree import ContainerTree from cura.ReaderWriters.ProfileReader import NoProfileException, ProfileReader from UM.i18n import i18nCatalog @@ -50,10 +52,10 @@ class CuraContainerRegistry(ContainerRegistry): # This will also try to convert a ContainerStack to either Extruder or # Global stack based on metadata information. @override(ContainerRegistry) - def addContainer(self, container): + def addContainer(self, container: ContainerInterface) -> None: # Note: Intentional check with type() because we want to ignore subclasses if type(container) == ContainerStack: - container = self._convertContainerStack(container) + container = self._convertContainerStack(cast(ContainerStack, container)) if isinstance(container, InstanceContainer) and type(container) != type(self.getEmptyInstanceContainer()): # Check against setting version of the definition. @@ -61,7 +63,7 @@ class CuraContainerRegistry(ContainerRegistry): actual_setting_version = int(container.getMetaDataEntry("setting_version", default = 0)) if required_setting_version != actual_setting_version: Logger.log("w", "Instance container {container_id} is outdated. Its setting version is {actual_setting_version} but it should be {required_setting_version}.".format(container_id = container.getId(), actual_setting_version = actual_setting_version, required_setting_version = required_setting_version)) - return #Don't add. + return # Don't add. super().addContainer(container) @@ -71,9 +73,9 @@ class CuraContainerRegistry(ContainerRegistry): # \param new_name \type{string} Base name, which may not be unique # \param fallback_name \type{string} Name to use when (stripped) new_name is empty # \return \type{string} Name that is unique for the specified type and name/id - def createUniqueName(self, container_type, current_name, new_name, fallback_name): + def createUniqueName(self, container_type: str, current_name: str, new_name: str, fallback_name: str) -> str: new_name = new_name.strip() - num_check = re.compile("(.*?)\s*#\d+$").match(new_name) + num_check = re.compile(r"(.*?)\s*#\d+$").match(new_name) if num_check: new_name = num_check.group(1) if new_name == "": @@ -92,7 +94,7 @@ class CuraContainerRegistry(ContainerRegistry): # Both the id and the name are checked, because they may not be the same and it is better if they are both unique # \param container_type \type{string} Type of the container (machine, quality, ...) # \param container_name \type{string} Name to check - def _containerExists(self, container_type, container_name): + def _containerExists(self, container_type: str, container_name: str): container_class = ContainerStack if container_type == "machine" else InstanceContainer return self.findContainersMetadata(container_type = container_class, id = container_name, type = container_type, ignore_case = True) or \ @@ -100,16 +102,18 @@ class CuraContainerRegistry(ContainerRegistry): ## Exports an profile to a file # - # \param instance_ids \type{list} the IDs of the profiles 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 " (*.)" - def exportQualityProfile(self, container_list, file_name, file_type): + # \return True if the export succeeded, false otherwise. + def exportQualityProfile(self, container_list: List[InstanceContainer], file_name: str, file_type: str) -> bool: # Parse the fileType to deduce what plugin can save the file format. # fileType has the format " (*.)" split = file_type.rfind(" (*.") # Find where the description ends and the extension starts. if split < 0: # Not found. Invalid format. Logger.log("e", "Invalid file format identifier %s", file_type) - return + return False description = file_type[:split] extension = file_type[split + 4:-1] # Leave out the " (*." and ")". if not file_name.endswith("." + extension): # Auto-fill the extension if the user did not provide any. @@ -121,10 +125,12 @@ class CuraContainerRegistry(ContainerRegistry): result = QMessageBox.question(None, catalog.i18nc("@title:window", "File Already Exists"), catalog.i18nc("@label Don't translate the XML tag !", "The file {0} already exists. Are you sure you want to overwrite it?").format(file_name)) if result == QMessageBox.No: - return + return False profile_writer = self._findProfileWriter(extension, description) try: + if profile_writer is None: + raise Exception("Unable to find a profile writer") success = profile_writer.write(file_name, container_list) except Exception as e: Logger.log("e", "Failed to export profile to %s: %s", file_name, str(e)) @@ -132,23 +138,24 @@ class CuraContainerRegistry(ContainerRegistry): lifetime = 0, title = catalog.i18nc("@info:title", "Error")) m.show() - return + return False if not success: Logger.log("w", "Failed to export profile to %s: Writer plugin reported failure.", file_name) m = Message(catalog.i18nc("@info:status Don't translate the XML tag !", "Failed to export profile to {0}: Writer plugin reported failure.", file_name), lifetime = 0, title = catalog.i18nc("@info:title", "Error")) m.show() - return + return False m = Message(catalog.i18nc("@info:status Don't translate the XML tag !", "Exported profile to {0}", file_name), title = catalog.i18nc("@info:title", "Export succeeded")) m.show() + return True ## Gets the plugin object matching the criteria # \param extension # \param description # \return The plugin object matching the given extension and description. - def _findProfileWriter(self, extension, description): + def _findProfileWriter(self, extension: str, description: str) -> Optional[ProfileWriter]: plugin_registry = PluginRegistry.getInstance() for plugin_id, meta_data in self._getIOPlugins("profile_writer"): for supported_type in meta_data["profile_writer"]: # All file types this plugin can supposedly write. @@ -156,7 +163,7 @@ class CuraContainerRegistry(ContainerRegistry): if supported_extension == extension: # This plugin supports a file type with the same extension. supported_description = supported_type.get("description", None) if supported_description == description: # The description is also identical. Assume it's the same file type. - return plugin_registry.getPluginObject(plugin_id) + return cast(ProfileWriter, plugin_registry.getPluginObject(plugin_id)) return None ## Imports a profile from a file @@ -169,17 +176,18 @@ class CuraContainerRegistry(ContainerRegistry): if not file_name: return { "status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags !", "Failed to import profile from {0}: {1}", file_name, "Invalid path")} - plugin_registry = PluginRegistry.getInstance() - extension = file_name.split(".")[-1] - 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): machine_extruders.append(global_stack.extruders[position]) + plugin_registry = PluginRegistry.getInstance() + extension = file_name.split(".")[-1] + for plugin_id, meta_data in self._getIOPlugins("profile_reader"): if meta_data["profile_reader"][0]["extension"] != extension: continue @@ -221,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", @@ -231,17 +239,17 @@ 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: - Logger.log("e", "Profile [%s] is for machine [%s] but the current active machine is [%s]. Will not import the profile", file_name, profile_definition, expected_machine_definition) - return { "status": "error", - "message": catalog.i18nc("@info:status Don't translate the XML tags !", "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it.", file_name, profile_definition, expected_machine_definition)} + Logger.log("d", "Profile {file_name} is for machine {profile_definition}, but the current active machine is {expected_machine_definition}. Changing profile's definition.".format(file_name = file_name, profile_definition = profile_definition, expected_machine_definition = expected_machine_definition)) + global_profile.setMetaDataEntry("definition", expected_machine_definition) + for extruder_profile in extruder_profiles: + extruder_profile.setMetaDataEntry("definition", expected_machine_definition) - # Fix the global quality profile's definition field in case it's not correct - global_profile.setMetaDataEntry("definition", expected_machine_definition) quality_name = global_profile.getName() quality_type = global_profile.getMetaDataEntry("quality_type") @@ -264,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 @@ -281,13 +288,14 @@ class CuraContainerRegistry(ContainerRegistry): profile.addInstance(new_instance) profile.setDirty(True) - global_profile.removeInstance(qc_setting_key, postpone_emit=True) + global_profile.removeInstance(qc_setting_key, postpone_emit = True) extruder_profiles.append(profile) for profile in extruder_profiles: profile_or_list.append(profile) # Import all profiles + profile_ids_added = [] # type: List[str] for profile_index, profile in enumerate(profile_or_list): if profile_index == 0: # This is assumed to be the global profile @@ -308,11 +316,15 @@ class CuraContainerRegistry(ContainerRegistry): result = self._configureProfile(profile, profile_id, new_name, expected_machine_definition) if result is not None: - return {"status": "error", "message": catalog.i18nc( - "@info:status Don't translate the XML tags or !", - "Failed to import profile from {0}:", - file_name) + " " + result + ""} + # Remove any profiles that did got added. + for profile_id in profile_ids_added: + self.removeContainer(profile_id) + return {"status": "error", "message": catalog.i18nc( + "@info:status Don't translate the XML tag !", + "Failed to import profile from {0}:", + file_name) + " " + result} + profile_ids_added.append(profile.getId()) return {"status": "ok", "message": catalog.i18nc("@info:status", "Successfully imported profile {0}", profile_or_list[0].getName())} # This message is throw when the profile reader doesn't find any profile in the file @@ -322,7 +334,7 @@ class CuraContainerRegistry(ContainerRegistry): return {"status": "error", "message": catalog.i18nc("@info:status", "Profile {0} has an unknown file type or is corrupted.", file_name)} @override(ContainerRegistry) - def load(self): + def load(self) -> None: super().load() self._registerSingleExtrusionMachinesExtruderStacks() self._connectUpgradedExtruderStacksToMachines() @@ -375,21 +387,40 @@ 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) - if quality_type not in quality_group_dict: + 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) ContainerRegistry.getInstance().addContainer(profile) return None + @override(ContainerRegistry) + def saveDirtyContainers(self) -> None: + # Lock file for "more" atomically loading and saving to/from config dir. + with self.lockFile(): + # Save base files first + for instance in self.findDirtyContainers(container_type=InstanceContainer): + if instance.getMetaDataEntry("removed"): + continue + if instance.getId() == instance.getMetaData().get("base_file"): + self.saveContainer(instance) + + for instance in self.findDirtyContainers(container_type=InstanceContainer): + if instance.getMetaDataEntry("removed"): + continue + self.saveContainer(instance) + + for stack in self.findContainerStacks(): + self.saveContainer(stack) + ## Gets a list of profile writer plugins # \return List of tuples of (plugin_id, meta_data). def _getIOPlugins(self, io_type): @@ -404,7 +435,7 @@ class CuraContainerRegistry(ContainerRegistry): return result ## Convert an "old-style" pure ContainerStack to either an Extruder or Global stack. - def _convertContainerStack(self, container): + def _convertContainerStack(self, container: ContainerStack) -> Union[ExtruderStack.ExtruderStack, GlobalStack.GlobalStack]: assert type(container) == ContainerStack container_type = container.getMetaDataEntry("type") @@ -428,14 +459,14 @@ class CuraContainerRegistry(ContainerRegistry): return new_stack - def _registerSingleExtrusionMachinesExtruderStacks(self): + def _registerSingleExtrusionMachinesExtruderStacks(self) -> None: machines = self.findContainerStacks(type = "machine", machine_extruder_trains = {"0": "fdmextruder"}) for machine in machines: extruder_stacks = self.findContainerStacks(type = "extruder_train", machine = machine.getId()) if not extruder_stacks: self.addExtruderStackForSingleExtrusionMachine(machine, "fdmextruder") - def _onContainerAdded(self, container): + def _onContainerAdded(self, container: ContainerInterface) -> None: # We don't have all the machines loaded in the beginning, so in order to add the missing extruder stack # for single extrusion machines, we subscribe to the containerAdded signal, and whenever a global stack # is added, we check to see if an extruder stack needs to be added. @@ -585,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) @@ -669,7 +701,7 @@ class CuraContainerRegistry(ContainerRegistry): return extruder_stack - def _findQualityChangesContainerInCuraFolder(self, name): + def _findQualityChangesContainerInCuraFolder(self, name: str) -> Optional[InstanceContainer]: quality_changes_dir = Resources.getPath(cura.CuraApplication.CuraApplication.ResourceTypes.QualityChangesInstanceContainer) instance_container = None @@ -682,7 +714,7 @@ class CuraContainerRegistry(ContainerRegistry): parser = configparser.ConfigParser(interpolation = None) try: parser.read([file_path]) - except: + except Exception: # Skip, it is not a valid stack file continue @@ -714,7 +746,7 @@ class CuraContainerRegistry(ContainerRegistry): # due to problems with loading order, some stacks may not have the proper next stack # set after upgrading, because the proper global stack was not yet loaded. This method # makes sure those extruders also get the right stack set. - def _connectUpgradedExtruderStacksToMachines(self): + def _connectUpgradedExtruderStacksToMachines(self) -> None: extruder_stacks = self.findContainers(container_type = ExtruderStack.ExtruderStack) for extruder_stack in extruder_stacks: if extruder_stack.getNextStack(): 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/CuraFormulaFunctions.py b/cura/Settings/CuraFormulaFunctions.py index a8b416eeb5..b35069da6f 100644 --- a/cura/Settings/CuraFormulaFunctions.py +++ b/cura/Settings/CuraFormulaFunctions.py @@ -40,8 +40,8 @@ class CuraFormulaFunctions: global_stack = machine_manager.activeMachine try: - extruder_stack = global_stack.extruders[str(extruder_position)] - except KeyError: + extruder_stack = global_stack.extruderList[int(extruder_position)] + except IndexError: if extruder_position != 0: Logger.log("w", "Value for %s of extruder %s was requested, but that extruder is not available. Returning the result form extruder 0 instead" % (property_key, extruder_position)) # This fixes a very specific fringe case; If a profile was created for a custom printer and one of the @@ -104,11 +104,14 @@ class CuraFormulaFunctions: machine_manager = self._application.getMachineManager() global_stack = machine_manager.activeMachine - extruder_stack = global_stack.extruders[str(extruder_position)] + try: + extruder_stack = global_stack.extruderList[extruder_position] + except IndexError: + Logger.log("w", "Unable to find extruder on in index %s", extruder_position) + else: + context = self.createContextForDefaultValueEvaluation(extruder_stack) - context = self.createContextForDefaultValueEvaluation(extruder_stack) - - return self.getValueInExtruder(extruder_position, property_key, context = context) + return self.getValueInExtruder(extruder_position, property_key, context = context) # Gets all default setting values as a list from all extruders of the currently active machine. # The default values are those excluding the values in the user_changes container. diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index a14ae7c328..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,45 +49,20 @@ 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) # Create ExtruderStacks extruder_dict = machine_definition.getMetaDataEntry("machine_extruder_trains") - print(machine_definition, extruder_dict, machine_definition.getMetaDataEntry) 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) @@ -109,36 +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. - Logger.log("e", "Unable to find extruder with the id %s", extruder_definition_id) - raise e + 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 3ed08cf118..b3d108e1aa 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,7 @@ 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.Settings.ContainerStack import ContainerStack +from UM.Decorators import deprecated from typing import Any, cast, Dict, List, Optional, TYPE_CHECKING, Union @@ -42,8 +42,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. @@ -74,7 +72,7 @@ class ExtruderManager(QObject): global_container_stack = self._application.getGlobalContainerStack() if global_container_stack: - extruder_stack_ids = {position: extruder.id for position, extruder in global_container_stack.extruders.items()} + extruder_stack_ids = {extruder.getMetaDataEntry("position", ""): extruder.id for extruder in global_container_stack.extruderList} return extruder_stack_ids @@ -91,16 +89,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) - def getExtruderName(self, index: int) -> str: - try: - return self.getActiveExtruderStacks()[index].getName() - except IndexError: - return "" - ## Emitted whenever the selectedObjectExtruders property changes. selectedObjectExtrudersChanged = pyqtSignal() @@ -114,7 +102,7 @@ class ExtruderManager(QObject): selected_nodes = [] # type: List["SceneNode"] for node in Selection.getAllSelectedObjects(): if node.callDecoration("isGroup"): - for grouped_node in BreadthFirstIterator(node): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. + for grouped_node in BreadthFirstIterator(node): if grouped_node.callDecoration("isGroup"): continue @@ -131,7 +119,7 @@ class ExtruderManager(QObject): elif current_extruder_trains: object_extruders.add(current_extruder_trains[0].getId()) - self._selected_object_extruders = list(object_extruders) # type: List[Union[str, "ExtruderStack"]] + self._selected_object_extruders = list(object_extruders) return self._selected_object_extruders @@ -140,7 +128,7 @@ class ExtruderManager(QObject): # This will trigger a recalculation of the extruders used for the # selection. def resetSelectedObjectExtruders(self) -> None: - self._selected_object_extruders = [] # type: List[Union[str, "ExtruderStack"]] + self._selected_object_extruders = [] self.selectedObjectExtrudersChanged.emit() @pyqtSlot(result = QObject) @@ -180,7 +168,7 @@ class ExtruderManager(QObject): # \param setting_key \type{str} The setting to get the property of. # \param property \type{str} The property to get. # \return \type{List} the list of results - def getAllExtruderSettings(self, setting_key: str, prop: str) -> List: + def getAllExtruderSettings(self, setting_key: str, prop: str) -> List[Any]: result = [] for extruder_stack in self.getActiveExtruderStacks(): @@ -205,7 +193,7 @@ class ExtruderManager(QObject): # list. # # \return A list of extruder stacks. - def getUsedExtruderStacks(self) -> List["ContainerStack"]: + def getUsedExtruderStacks(self) -> List["ExtruderStack"]: global_stack = self._application.getGlobalContainerStack() container_registry = ContainerRegistry.getInstance() @@ -321,48 +309,47 @@ 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. def fixSingleExtrusionMachineExtruderDefinition(self, global_stack: "GlobalStack") -> None: container_registry = ContainerRegistry.getInstance() expected_extruder_definition_0_id = global_stack.getMetaDataEntry("machine_extruder_trains")["0"] - extruder_stack_0 = global_stack.extruders.get("0") + try: + extruder_stack_0 = global_stack.extruderList[0] + except IndexError: + extruder_stack_0 = None + # At this point, extruder stacks for this machine may not have been loaded yet. In this case, need to look in # the container registry as well. - if not global_stack.extruders: + if not global_stack.extruderList: extruder_trains = container_registry.findContainerStacks(type = "extruder_train", machine = global_stack.getId()) if extruder_trains: @@ -380,7 +367,13 @@ class ExtruderManager(QObject): elif extruder_stack_0.definition.getId() != expected_extruder_definition_0_id: Logger.log("e", "Single extruder printer [{printer}] expected extruder [{expected}], but got [{got}]. I'm making it [{expected}].".format( printer = global_stack.getId(), expected = expected_extruder_definition_0_id, got = extruder_stack_0.definition.getId())) - extruder_definition = container_registry.findDefinitionContainers(id = expected_extruder_definition_0_id)[0] + try: + extruder_definition = container_registry.findDefinitionContainers(id = expected_extruder_definition_0_id)[0] + except IndexError as e: + # 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) + raise IndexError(msg) extruder_stack_0.definition = extruder_definition ## Get all extruder values for a certain setting. diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index edb0e7d41f..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. @@ -135,12 +139,15 @@ class ExtruderStack(CuraContainerStack): if limit_to_extruder == -1: limit_to_extruder = int(cura.CuraApplication.CuraApplication.getInstance().getMachineManager().defaultExtruderPosition) limit_to_extruder = str(limit_to_extruder) + if (limit_to_extruder is not None and limit_to_extruder != "-1") and self.getMetaDataEntry("position") != str(limit_to_extruder): - if str(limit_to_extruder) in self.getNextStack().extruders: - result = self.getNextStack().extruders[str(limit_to_extruder)].getProperty(key, property_name, context) + try: + result = self.getNextStack().extruderList[int(limit_to_extruder)].getProperty(key, property_name, context) if result is not None: context.popContainer() return result + except IndexError: + pass result = super().getProperty(key, property_name, context) context.popContainer() diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index f6c739a08e..d3a8842aa3 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.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 collections import defaultdict @@ -8,7 +8,7 @@ import uuid from PyQt5.QtCore import pyqtProperty, pyqtSlot, pyqtSignal -from UM.Decorators import override +from UM.Decorators import deprecated, override from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase from UM.Settings.ContainerStack import ContainerStack from UM.Settings.SettingInstance import InstanceState @@ -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 @@ -61,12 +62,13 @@ class GlobalStack(CuraContainerStack): # # \return The extruders registered with this stack. @pyqtProperty("QVariantMap", notify = extrudersChanged) + @deprecated("Please use extruderList instead.", "4.4") def extruders(self) -> Dict[str, "ExtruderStack"]: return self._extruders @pyqtProperty("QVariantList", notify = extrudersChanged) def extruderList(self) -> List["ExtruderStack"]: - result_tuple_list = sorted(list(self.extruders.items()), key=lambda x: int(x[0])) + result_tuple_list = sorted(list(self._extruders.items()), key=lambda x: int(x[0])) result_list = [item[1] for item in result_tuple_list] machine_extruder_count = self.getProperty("machine_extruder_count", "value") @@ -107,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 @@ -118,7 +133,7 @@ class GlobalStack(CuraContainerStack): ## \sa configuredConnectionTypes def removeConfiguredConnectionType(self, connection_type: int) -> None: configured_connection_types = self.configuredConnectionTypes - if connection_type in self.configured_connection_types: + if connection_type in configured_connection_types: # Store the values as a string. configured_connection_types.remove(connection_type) self.setMetaDataEntry("connection_type", ",".join([str(c_type) for c_type in configured_connection_types])) @@ -130,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": @@ -264,18 +287,18 @@ class GlobalStack(CuraContainerStack): def getHeadAndFansCoordinates(self): return self.getProperty("machine_head_with_fans_polygon", "value") - def getHasMaterials(self) -> bool: + @pyqtProperty(bool, constant = True) + def hasMaterials(self) -> bool: return parseBool(self.getMetaDataEntry("has_materials", False)) - def getHasVariants(self) -> bool: + @pyqtProperty(bool, constant = True) + def hasVariants(self) -> bool: return parseBool(self.getMetaDataEntry("has_variants", False)) - def getHasVariantsBuildPlates(self) -> bool: + @pyqtProperty(bool, constant = True) + def hasVariantBuildplates(self) -> bool: return parseBool(self.getMetaDataEntry("has_variant_buildplates", False)) - def getHasMachineQuality(self) -> bool: - return parseBool(self.getMetaDataEntry("has_machine_quality", False)) - ## Get default firmware file name if one is specified in the firmware @pyqtSlot(result = str) def getDefaultFirmwareName(self) -> str: @@ -302,6 +325,17 @@ class GlobalStack(CuraContainerStack): Logger.log("w", "Firmware file %s not found.", hex_file) return "" + def getName(self) -> str: + return self._metadata.get("group_name", self._metadata.get("name", "")) + + def setName(self, name: "str") -> None: + super().setName(name) + + nameChanged = pyqtSignal() + name = pyqtProperty(str, fget=getName, fset=setName, notify=nameChanged) + + + ## private: global_stack_mime = MimeType( name = "application/x-cura-globalstack", diff --git a/cura/Settings/IntentManager.py b/cura/Settings/IntentManager.py new file mode 100644 index 0000000000..c1d59fb84a --- /dev/null +++ b/cura/Settings/IntentManager.py @@ -0,0 +1,169 @@ +#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 +import cura.CuraApplication +from UM.Logger import Logger +from cura.Machines.ContainerTree import ContainerTree +from cura.Settings.cura_empty_instance_containers import empty_intent_container +from UM.Settings.InstanceContainer import InstanceContainer + +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]]: + material_node = ContainerTree.getInstance().machines[definition_id].variants[nozzle_name].materials[material_base_file] + intent_metadatas = [] + 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 249b5db885..aa48e39410 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,23 +37,19 @@ 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 from UM.i18n import i18nCatalog 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.Settings.GlobalStack import GlobalStack - 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): @@ -59,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 @@ -96,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) @@ -119,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() @@ -142,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 @@ -158,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") @@ -184,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.extruders.values(): - 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 @@ -198,11 +195,11 @@ 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. - self._current_printer_configuration.buildplateConfiguration = self._global_container_stack.getProperty("machine_buildplate_type", "value") if self._global_container_stack.variant != empty_variant_container else "" + self._current_printer_configuration.buildplateConfiguration = self._global_container_stack.getProperty("machine_buildplate_type", "value")\ + if self._global_container_stack.variant != empty_variant_container else self._global_container_stack.getProperty("machine_buildplate_type", "default_value") self.currentConfigurationChanged.emit() @pyqtSlot(QObject, result = bool) @@ -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 global_stack.extruders.items(): - material_dict[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 global_stack.extruders: - self.updateMaterialWithVariant(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() @@ -388,7 +335,7 @@ class MachineManager(QObject): machines = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine", **metadata_filter) for machine in machines: if machine.definition.getId() == definition_id: - return machine + return cast(GlobalStack, machine) return None @pyqtSlot(str) @@ -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,24 +463,6 @@ class MachineManager(QObject): def printerConnected(self) -> bool: return bool(self._printer_output_devices) - @pyqtProperty(bool, notify = printerConnectedStatusChanged) - 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 @@ -598,7 +506,7 @@ class MachineManager(QObject): def activeStack(self) -> Optional["ExtruderStack"]: return self._active_container_stack - @pyqtProperty(str, notify=activeMaterialChanged) + @pyqtProperty(str, notify = activeMaterialChanged) def activeMaterialId(self) -> str: if self._active_container_stack: material = self._active_container_stack.material @@ -606,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: @@ -655,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. # @@ -686,7 +600,7 @@ class MachineManager(QObject): def isCurrentSetupSupported(self) -> bool: if not self._global_container_stack: return False - for stack in [self._global_container_stack] + list(self._global_container_stack.extruders.values()): + for stack in [self._global_container_stack] + self._global_container_stack.extruderList: for container in stack.getContainers(): if not container: return False @@ -712,8 +626,8 @@ class MachineManager(QObject): def copyAllValuesToExtruders(self) -> None: if self._active_container_stack is None or self._global_container_stack is None: return - extruder_stacks = list(self._global_container_stack.extruders.values()) - for extruder_stack in extruder_stacks: + + for extruder_stack in self._global_container_stack.extruderList: if extruder_stack != self._active_container_stack: for key in self._active_container_stack.userChanges.getAllKeys(): new_value = self._active_container_stack.getProperty(key, "value") @@ -721,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) @@ -815,24 +692,6 @@ class MachineManager(QObject): # This reuses the method and remove all printers recursively self.removeMachine(hidden_containers[0].getId()) - @pyqtProperty(bool, notify = globalContainerChanged) - def hasMaterials(self) -> bool: - if self._global_container_stack: - return self._global_container_stack.getHasMaterials() - return False - - @pyqtProperty(bool, notify = globalContainerChanged) - def hasVariants(self) -> bool: - if self._global_container_stack: - return self._global_container_stack.getHasVariants() - return False - - @pyqtProperty(bool, notify = globalContainerChanged) - def hasVariantBuildplates(self) -> bool: - if self._global_container_stack: - return self._global_container_stack.getHasVariantsBuildPlates() - 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: @@ -840,15 +699,15 @@ class MachineManager(QObject): return True buildplate_compatible = True # It is compatible by default - extruder_stacks = self._global_container_stack.extruders.values() - for stack in extruder_stacks: + for stack in self._global_container_stack.extruderList: if not stack.isEnabled: continue material_container = stack.material 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 @@ -864,8 +723,8 @@ class MachineManager(QObject): # (material_left_compatible or material_left_usable) and # (material_right_compatible or material_right_usable) result = not self.variantBuildplateCompatible - extruder_stacks = self._global_container_stack.extruders.values() - for stack in extruder_stacks: + + for stack in self._global_container_stack.extruderList: material_container = stack.material if material_container == empty_material_container: continue @@ -893,20 +752,15 @@ class MachineManager(QObject): result = [] # type: List[str] for setting_instance in container.findInstances(): setting_key = setting_instance.definition.key - setting_enabled = self._global_container_stack.getProperty(setting_key, "enabled") - if not setting_enabled: - # A setting is not visible anymore - result.append(setting_key) - Logger.log("d", "Reset setting [%s] from [%s] because the setting is no longer enabled", setting_key, container) - continue - if not self._global_container_stack.getProperty(setting_key, "type") in ("extruder", "optional_extruder"): continue old_value = container.getProperty(setting_key, "value") + if isinstance(old_value, SettingFunction): + old_value = old_value(self._global_container_stack) if int(old_value) < 0: continue - if int(old_value) >= extruder_count or not self._global_container_stack.extruders[str(old_value)].isEnabled: + if int(old_value) >= extruder_count or not self._global_container_stack.extruderList[int(old_value)].isEnabled: result.append(setting_key) Logger.log("d", "Reset setting [%s] in [%s] because its old value [%s] is no longer valid", setting_key, container, old_value) return result @@ -922,9 +776,8 @@ class MachineManager(QObject): # Apply quality changes that are incompatible to user changes, so we do not change the quality changes itself. self._global_container_stack.userChanges.setProperty(setting_key, "value", self._default_extruder_position) if add_user_changes: - caution_message = Message(catalog.i18nc( - "@info:generic", - "Settings have been changed to match the current availability of extruders: [%s]" % ", ".join(add_user_changes)), + caution_message = Message( + catalog.i18nc("@info:message Followed by a list of settings.", "Settings have been changed to match the current availability of extruders:") + " [{settings_list}]".format(settings_list = ", ".join(add_user_changes)), lifetime = 0, title = catalog.i18nc("@info:title", "Settings updated")) caution_message.show() @@ -952,7 +805,7 @@ class MachineManager(QObject): # Check to see if any objects are set to print with an extruder that will no longer exist root_node = self._application.getController().getScene().getRoot() - for node in DepthFirstIterator(root_node): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. + for node in DepthFirstIterator(root_node): if node.getMeshData(): extruder_nr = node.callDecoration("getActiveExtruderPosition") @@ -977,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: @@ -988,21 +841,15 @@ class MachineManager(QObject): self._application.globalContainerStackChanged.emit() self.forceUpdateAllSettings() - @pyqtSlot(int, result = QObject) - def getExtruder(self, position: int) -> Optional[ExtruderStack]: - if self._global_container_stack: - return self._global_container_stack.extruders.get(str(position)) - return None - def updateDefaultExtruder(self) -> None: if self._global_container_stack is None: return - extruder_items = sorted(self._global_container_stack.extruders.items()) + old_position = self._default_extruder_position new_default_position = "0" - for position, extruder in extruder_items: + for extruder in self._global_container_stack.extruderList: if extruder.isEnabled: - new_default_position = position + new_default_position = extruder.getMetaDataEntry("position", "0") break if new_default_position != old_position: self._default_extruder_position = new_default_position @@ -1014,7 +861,7 @@ class MachineManager(QObject): definition_changes_container = self._global_container_stack.definitionChanges machine_extruder_count = self._global_container_stack.getProperty("machine_extruder_count", "value") extruder_count = 0 - for position, extruder in self._global_container_stack.extruders.items(): + for position, extruder in enumerate(self._global_container_stack.extruderList): if extruder.isEnabled and int(position) < machine_extruder_count: extruder_count += 1 if self.numberExtrudersEnabled != extruder_count: @@ -1038,16 +885,16 @@ class MachineManager(QObject): return with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): property_names = ["value", "resolve", "validationState"] - for container in [self._global_container_stack] + list(self._global_container_stack.extruders.values()): + for container in [self._global_container_stack] + self._global_container_stack.extruderList: for setting_key in container.getAllKeys(): container.propertiesChanged.emit(setting_key, property_names) @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() @@ -1069,25 +916,25 @@ 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: if self._global_container_stack is None: return - for key, extruder in self._global_container_stack.extruders.items(): + for extruder in self._global_container_stack.extruderList: container = extruder.userChanges container.setProperty(setting_name, property_name, property_value) @@ -1097,59 +944,46 @@ class MachineManager(QObject): def resetSettingForAllExtruders(self, setting_name: str) -> None: if self._global_container_stack is None: return - for key, extruder in self._global_container_stack.extruders.items(): + for extruder in self._global_container_stack.extruderList: container = extruder.userChanges container.removeInstance(setting_name) - @pyqtProperty("QVariantList", notify = globalContainerChanged) - 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 = {} + changed = False + if self._global_container_stack: - for position in self._global_container_stack.extruders: - self._current_root_material_id[position] = self._global_container_stack.extruders[position].material.getMetaDataEntry("base_file") + for extruder in self._global_container_stack.extruderList: + material_id = extruder.material.getMetaDataEntry("base_file") + position = extruder.getMetaDataEntry("position") + if position not in self._current_root_material_id or material_id != self._current_root_material_id[position]: + changed = True + self._current_root_material_id[position] = material_id + + if changed: + self.activeMaterialChanged.emit() @pyqtProperty("QVariant", notify = rootMaterialChanged) 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.extruders.values(): + for extruder in self._global_container_stack.extruderList: extruder.quality = empty_quality_container extruder.qualityChanges = empty_quality_changes_container 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: @@ -1158,37 +992,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(): - self._global_container_stack.extruders[str(position)].quality = node.getContainer() + 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: @@ -1197,67 +1027,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 position, extruder in self._global_container_stack.extruders.items(): - quality_changes_node = quality_changes_group.nodes_for_extruders.get(position) 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.extruders[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.extruders[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.extruders[position].material = empty_material_container + 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() @@ -1265,7 +1104,7 @@ class MachineManager(QObject): # Check material - variant compatibility if self._global_container_stack is not None: if Util.parseBool(self._global_container_stack.getMetaDataEntry("has_materials", False)): - for position, extruder in self._global_container_stack.extruders.items(): + for extruder in self._global_container_stack.extruderList: if not extruder.isEnabled: continue if not extruder.material.getMetaDataEntry("compatible"): @@ -1274,13 +1113,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) @@ -1291,7 +1129,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 @@ -1304,6 +1142,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 @@ -1312,7 +1153,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: @@ -1320,63 +1194,56 @@ 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: - extruder = self._global_container_stack.extruders[position_item] + try: + extruder = self._global_container_stack.extruderList[int(position_item)] + except IndexError: + 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 - metadata_filter = {"group_id": self._global_container_stack.getMetaDataEntry("group_id"), - "um_network_key": self.activeMachineNetworkKey(), - } + metadata_filter = {"group_id": self._global_container_stack.getMetaDataEntry("group_id")} new_machine = self.getMachine(machine_definition_id, metadata_filter = metadata_filter) # If there is no machine, then create a new one and set it to the non-hidden instance if not new_machine: new_machine = CuraStackBuilder.createMachine(machine_definition_id + "_sync", machine_definition_id) if not new_machine: return - new_machine.setMetaDataEntry("group_id", self._global_container_stack.getMetaDataEntry("group_id")) - new_machine.setMetaDataEntry("um_network_key", self.activeMachineNetworkKey()) - new_machine.setMetaDataEntry("group_name", self.activeMachineNetworkGroupName) - new_machine.setMetaDataEntry("connection_type", self._global_container_stack.getMetaDataEntry("connection_type")) + + for metadata_key in self._global_container_stack.getMetaData(): + 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)) else: Logger.log("i", "Found a %s with the key %s. Let's use it!", machine_name, self.activeMachineNetworkKey()) @@ -1391,6 +1258,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) @@ -1411,7 +1279,7 @@ class MachineManager(QObject): extruders_to_disable.add(extruder_configuration.position) # If there's no material and/or nozzle on the printer, enable the first extruder and disable the rest. - if len(extruders_to_disable) == len(self._global_container_stack.extruders): + if len(extruders_to_disable) == len(self._global_container_stack.extruderList): extruders_to_disable.remove(min(extruders_to_disable)) for extruder_configuration in configuration.extruderConfigurations: @@ -1419,42 +1287,33 @@ class MachineManager(QObject): # If the machine doesn't have a hotend or material, disable this extruder if int(position) in extruders_to_disable: - self._global_container_stack.extruders[position].setEnabled(False) + self._global_container_stack.extruderList[int(position)].setEnabled(False) need_to_show_message = True 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.extruders[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.extruders[position].material = empty_material_container + # 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: @@ -1463,7 +1322,7 @@ class MachineManager(QObject): # Show human-readable extruder names such as "Extruder Left", "Extruder Front" instead of "Extruder 1, 2, 3". extruder_names = [] for extruder_position in sorted(disabled_used_extruder_position_set): - extruder_stack = self._global_container_stack.extruders[str(extruder_position)] + extruder_stack = self._global_container_stack.extruderList[int(extruder_position)] extruder_name = extruder_stack.definition.getName() extruder_names.append(extruder_name) extruders_str = ", ".join(extruder_names) @@ -1488,17 +1347,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.extruders[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 @@ -1506,7 +1360,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.extruders[position].material = container_node.getContainer() + global_stack.extruders[position].material = container_node.container return position = str(position) self.blurSettings.emit() @@ -1523,15 +1377,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() @@ -1544,9 +1399,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. @@ -1560,11 +1413,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 @@ -1577,9 +1430,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: @@ -1596,30 +1531,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: @@ -1646,22 +1601,3 @@ class MachineManager(QObject): abbr_machine += stripped_word return abbr_machine - - # Checks if the given machine type name in the available machine list. - # The machine type is a code name such as "ultimaker_3", while the machine type name is the human-readable name of - # the machine type, which is "Ultimaker 3" for "ultimaker_3". - def hasHumanReadableMachineTypeName(self, machine_type_name: str) -> bool: - results = self._container_registry.findDefinitionContainersMetadata(name = machine_type_name) - return len(results) > 0 - - @pyqtSlot(str, result = str) - def getMachineTypeNameFromId(self, machine_type_id: str) -> str: - machine_type_name = "" - results = self._container_registry.findDefinitionContainersMetadata(id = machine_type_id) - if results: - machine_type_name = results[0]["name"] - return machine_type_name - - # 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/PerObjectContainerStack.py b/cura/Settings/PerObjectContainerStack.py index 7ed9eb6fb7..a4f1f6ed06 100644 --- a/cura/Settings/PerObjectContainerStack.py +++ b/cura/Settings/PerObjectContainerStack.py @@ -12,6 +12,10 @@ from .CuraContainerStack import CuraContainerStack class PerObjectContainerStack(CuraContainerStack): + def isDirty(self): + # This stack should never be auto saved, so always return that there is nothing to save. + return False + @override(CuraContainerStack) def getProperty(self, key: str, property_name: str, context: Optional[PropertyEvaluationContext] = None) -> Any: if context is None: diff --git a/cura/Settings/SettingOverrideDecorator.py b/cura/Settings/SettingOverrideDecorator.py index f2a465242e..2fa5234ec3 100644 --- a/cura/Settings/SettingOverrideDecorator.py +++ b/cura/Settings/SettingOverrideDecorator.py @@ -114,14 +114,9 @@ class SettingOverrideDecorator(SceneNodeDecorator): def _onSettingChanged(self, setting_key, property_name): # Reminder: 'property' is a built-in function # We're only interested in a few settings and only if it's value changed. if property_name == "value": - if setting_key in self._non_printing_mesh_settings or setting_key in self._non_thumbnail_visible_settings: - # Trigger slice/need slicing if the value has changed. - new_is_non_printing_mesh = self._evaluateIsNonPrintingMesh() - self._is_non_thumbnail_visible_mesh = self._evaluateIsNonThumbnailVisibleMesh() - - if self._is_non_printing_mesh != new_is_non_printing_mesh: - self._is_non_printing_mesh = new_is_non_printing_mesh - + # Trigger slice/need slicing if the value has changed. + self._is_non_printing_mesh = self._evaluateIsNonPrintingMesh() + self._is_non_thumbnail_visible_mesh = self._evaluateIsNonThumbnailVisibleMesh() Application.getInstance().getBackend().needsSlicing() Application.getInstance().getBackend().tickle() diff --git a/cura/Settings/SimpleModeSettingsManager.py b/cura/Settings/SimpleModeSettingsManager.py index b1896a9205..3923435e63 100644 --- a/cura/Settings/SimpleModeSettingsManager.py +++ b/cura/Settings/SimpleModeSettingsManager.py @@ -39,8 +39,8 @@ class SimpleModeSettingsManager(QObject): user_setting_keys.update(global_stack.userChanges.getAllKeys()) # check user settings in the extruder stacks - if global_stack.extruders: - for extruder_stack in global_stack.extruders.values(): + if global_stack.extruderList: + for extruder_stack in global_stack.extruderList: user_setting_keys.update(extruder_stack.userChanges.getAllKeys()) # remove settings that are visible in recommended (we don't show the reset button for those) 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/SingleInstance.py b/cura/SingleInstance.py index cf07b143c6..6fcf0da6cf 100644 --- a/cura/SingleInstance.py +++ b/cura/SingleInstance.py @@ -87,7 +87,7 @@ class SingleInstance: if command == "clear-all": self._application.callLater(lambda: self._application.deleteAll()) - # Command: Load a model file + # Command: Load a model or project file elif command == "open": self._application.callLater(lambda f = payload["filePath"]: self._application._openFile(f)) diff --git a/cura/Snapshot.py b/cura/Snapshot.py index b730c1fdcf..353b5ae17c 100644 --- a/cura/Snapshot.py +++ b/cura/Snapshot.py @@ -48,12 +48,12 @@ class Snapshot: # determine zoom and look at bbox = None for node in DepthFirstIterator(root): - if node.callDecoration("isSliceable") and node.getMeshData() and node.isVisible() and not node.callDecoration("isNonThumbnailVisibleMesh"): - if bbox is None: - bbox = node.getBoundingBox() - else: - bbox = bbox + node.getBoundingBox() - + if not getattr(node, "_outside_buildarea", False): + if node.callDecoration("isSliceable") and node.getMeshData() and node.isVisible() and not node.callDecoration("isNonThumbnailVisibleMesh"): + if bbox is None: + bbox = node.getBoundingBox() + else: + bbox = bbox + node.getBoundingBox() # If there is no bounding box, it means that there is no model in the buildplate if bbox is None: return None @@ -66,7 +66,7 @@ class Snapshot: looking_from_offset = Vector(-1, 1, 2) if size > 0: # determine the watch distance depending on the size - looking_from_offset = looking_from_offset * size * 1.3 + looking_from_offset = looking_from_offset * size * 1.75 camera.setPosition(look_at + looking_from_offset) camera.lookAt(look_at) @@ -85,8 +85,10 @@ class Snapshot: preview_pass.setCamera(camera) preview_pass.render() pixel_output = preview_pass.getOutput() - - min_x, max_x, min_y, max_y = Snapshot.getImageBoundaries(pixel_output) + try: + min_x, max_x, min_y, max_y = Snapshot.getImageBoundaries(pixel_output) + except ValueError: + return None size = max((max_x - min_x) / render_width, (max_y - min_y) / render_height) if size > 0.5 or satisfied: 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/UI/ObjectsModel.py b/cura/UI/ObjectsModel.py index d1ca3353f5..5526b41098 100644 --- a/cura/UI/ObjectsModel.py +++ b/cura/UI/ObjectsModel.py @@ -1,8 +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 collections import defaultdict -from typing import Dict +from UM.Logger import Logger +import re +from typing import Any, Dict, List, Optional, Union from PyQt5.QtCore import QTimer, Qt @@ -17,6 +17,20 @@ from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") +# Simple convenience class to keep stuff together. Since we're still stuck on python 3.5, we can't use the full +# typed named tuple, so we have to do it like this. +# Once we are at python 3.6, feel free to change this to a named tuple. +class _NodeInfo: + def __init__(self, index_to_node: Optional[Dict[int, SceneNode]] = None, nodes_to_rename: Optional[List[SceneNode]] = None, is_group: bool = False) -> None: + if index_to_node is None: + index_to_node = {} + if nodes_to_rename is None: + nodes_to_rename = [] + self.index_to_node = index_to_node # type: Dict[int, SceneNode] + self.nodes_to_rename = nodes_to_rename # type: List[SceneNode] + self.is_group = is_group # type: bool + + ## Keep track of all objects in the project class ObjectsModel(ListModel): NameRole = Qt.UserRole + 1 @@ -36,6 +50,7 @@ class ObjectsModel(ListModel): Application.getInstance().getController().getScene().sceneChanged.connect(self._updateSceneDelayed) Application.getInstance().getPreferences().preferenceChanged.connect(self._updateDelayed) + Selection.selectionChanged.connect(self._updateDelayed) self._update_timer = QTimer() self._update_timer.setInterval(200) @@ -44,6 +59,11 @@ class ObjectsModel(ListModel): self._build_plate_number = -1 + self._group_name_template = catalog.i18nc("@label", "Group #{group_nr}") + self._group_name_prefix = self._group_name_template.split("#")[0] + + self._naming_regex = re.compile("^(.+)\(([0-9]+)\)$") + def setActiveBuildPlate(self, nr: int) -> None: if self._build_plate_number != nr: self._build_plate_number = nr @@ -56,57 +76,109 @@ class ObjectsModel(ListModel): def _updateDelayed(self, *args) -> None: self._update_timer.start() + def _shouldNodeBeHandled(self, node: SceneNode) -> bool: + is_group = bool(node.callDecoration("isGroup")) + if not node.callDecoration("isSliceable") and not is_group: + return False + + parent = node.getParent() + if parent and parent.callDecoration("isGroup"): + return False # Grouped nodes don't need resetting as their parent (the group) is resetted) + + node_build_plate_number = node.callDecoration("getBuildPlateNumber") + if Application.getInstance().getPreferences().getValue("view/filter_current_build_plate") and node_build_plate_number != self._build_plate_number: + return False + + return True + + def _renameNodes(self, node_info_dict: Dict[str, _NodeInfo]) -> List[SceneNode]: + # Go through all names and find out the names for all nodes that need to be renamed. + all_nodes = [] # type: List[SceneNode] + for name, node_info in node_info_dict.items(): + # First add the ones that do not need to be renamed. + for node in node_info.index_to_node.values(): + all_nodes.append(node) + + # Generate new names for the nodes that need to be renamed + current_index = 0 + for node in node_info.nodes_to_rename: + current_index += 1 + while current_index in node_info.index_to_node: + current_index += 1 + + if not node_info.is_group: + new_group_name = "{0}({1})".format(name, current_index) + else: + new_group_name = "{0}#{1}".format(name, current_index) + + old_name = node.getName() + node.setName(new_group_name) + Logger.log("d", "Node [%s] renamed to [%s]", old_name, new_group_name) + all_nodes.append(node) + return all_nodes + def _update(self, *args) -> None: - nodes = [] - filter_current_build_plate = Application.getInstance().getPreferences().getValue("view/filter_current_build_plate") - active_build_plate_number = self._build_plate_number - group_nr = 1 - name_count_dict = defaultdict(int) # type: Dict[str, int] - + nodes = [] # type: List[Dict[str, Union[str, int, bool, SceneNode]]] + name_to_node_info_dict = {} # type: Dict[str, _NodeInfo] for node in DepthFirstIterator(Application.getInstance().getController().getScene().getRoot()): # type: ignore - if not isinstance(node, SceneNode): - continue - if (not node.getMeshData() and not node.callDecoration("getLayerData")) and not node.callDecoration("isGroup"): + if not self._shouldNodeBeHandled(node): continue - parent = node.getParent() - if parent and parent.callDecoration("isGroup"): - continue # Grouped nodes don't need resetting as their parent (the group) is resetted) - if not node.callDecoration("isSliceable") and not node.callDecoration("isGroup"): - continue - node_build_plate_number = node.callDecoration("getBuildPlateNumber") - if filter_current_build_plate and node_build_plate_number != active_build_plate_number: - continue + is_group = bool(node.callDecoration("isGroup")) - if not node.callDecoration("isGroup"): + force_rename = False + if not is_group: + # Handle names for individual nodes name = node.getName() - - else: - name = catalog.i18nc("@label", "Group #{group_nr}").format(group_nr = str(group_nr)) - group_nr += 1 + name_match = self._naming_regex.fullmatch(name) + if name_match is None: + original_name = name + name_index = 0 + else: + original_name = name_match.groups()[0] + name_index = int(name_match.groups()[1]) + else: + # Handle names for grouped nodes + original_name = self._group_name_prefix + + current_name = node.getName() + if current_name.startswith(self._group_name_prefix): + name_index = int(current_name.split("#")[-1]) + else: + # Force rename this group because this node has not been named as a group yet, probably because + # it's a newly created group. + name_index = 0 + force_rename = True + + if original_name not in name_to_node_info_dict: + # Keep track of 2 things: + # - known indices for nodes which doesn't need to be renamed + # - a list of nodes that need to be renamed. When renaming then, we should avoid using the known indices. + name_to_node_info_dict[original_name] = _NodeInfo(is_group = is_group) + node_info = name_to_node_info_dict[original_name] + if not force_rename and name_index not in node_info.index_to_node: + node_info.index_to_node[name_index] = node + else: + node_info.nodes_to_rename.append(node) + + all_nodes = self._renameNodes(name_to_node_info_dict) + + for node in all_nodes: if hasattr(node, "isOutsideBuildArea"): is_outside_build_area = node.isOutsideBuildArea() # type: ignore else: is_outside_build_area = False - - # Check if we already have an instance of the object based on name - name_count_dict[name] += 1 - name_count = name_count_dict[name] - if name_count > 1: - name = "{0}({1})".format(name, name_count-1) - node.setName(name) + node_build_plate_number = node.callDecoration("getBuildPlateNumber") nodes.append({ - "name": name, + "name": node.getName(), "selected": Selection.isSelected(node), "outside_build_area": is_outside_build_area, "buildplate_number": node_build_plate_number, "node": node }) - + nodes = sorted(nodes, key=lambda n: n["name"]) self.setItems(nodes) - - self.itemsChanged.emit() diff --git a/cura/UI/PrintInformation.py b/cura/UI/PrintInformation.py index 3fafaaba12..abf1083836 100644 --- a/cura/UI/PrintInformation.py +++ b/cura/UI/PrintInformation.py @@ -197,11 +197,7 @@ class PrintInformation(QObject): material_preference_values = json.loads(self._application.getInstance().getPreferences().getValue("cura/material_settings")) - extruder_stacks = global_stack.extruders - - for position in extruder_stacks: - extruder_stack = extruder_stacks[position] - index = int(position) + for index, extruder_stack in enumerate(global_stack.extruderList): if index >= len(self._material_amounts): continue amount = self._material_amounts[index] diff --git a/cura/UI/RecommendedMode.py b/cura/UI/RecommendedMode.py new file mode 100644 index 0000000000..47b617740a --- /dev/null +++ b/cura/UI/RecommendedMode.py @@ -0,0 +1,49 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from PyQt5.QtCore import QObject, pyqtSlot + +from cura import CuraApplication + +# +# This object contains helper/convenience functions for Recommended mode. +# +class RecommendedMode(QObject): + + # Sets to use the adhesion or not for the "Adhesion" CheckBox in Recommended mode. + @pyqtSlot(bool) + def setAdhesion(self, checked: bool) -> None: + application = CuraApplication.CuraApplication.getInstance() + global_stack = application.getMachineManager().activeMachine + if global_stack is None: + return + + # Remove the adhesion type value set by the user. + adhesion_type_key = "adhesion_type" + user_changes_container = global_stack.userChanges + if adhesion_type_key in user_changes_container.getAllKeys(): + user_changes_container.removeInstance(adhesion_type_key) + + # Get the default value of adhesion type after user's value has been removed. + # skirt and none are counted as "no adhesion", the others are considered as "with adhesion". The conditions are + # as the following: + # - if the user checks the adhesion checkbox, get the default value (including the custom quality) for adhesion + # type. + # (1) If the default value is "skirt" or "none" (no adhesion), set adhesion_type to "brim". + # (2) If the default value is "with adhesion", do nothing. + # - if the user unchecks the adhesion checkbox, get the default value (including the custom quality) for + # adhesion type. + # (1) If the default value is "skirt" or "none" (no adhesion), do nothing. + # (2) Otherwise, set adhesion_type to "skirt". + value = global_stack.getProperty(adhesion_type_key, "value") + if checked: + if value in ("skirt", "none"): + value = "brim" + else: + if value not in ("skirt", "none"): + value = "skirt" + + user_changes_container.setProperty(adhesion_type_key, "value", value) + + +__all__ = ["RecommendedMode"] 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 1978e0f5fd..080479ee92 100755 --- a/cura_app.py +++ b/cura_app.py @@ -32,7 +32,8 @@ if not known_args["debug"]: elif Platform.isOSX(): return os.path.expanduser("~/Library/Logs/" + CuraAppName) - if hasattr(sys, "frozen"): + # Do not redirect stdout and stderr to files if we are running CLI. + if hasattr(sys, "frozen") and "cli" not in os.path.basename(sys.argv[0]).lower(): dirpath = get_cura_dir_path() os.makedirs(dirpath, exist_ok = True) sys.stdout = open(os.path.join(dirpath, "stdout.log"), "w", encoding = "utf-8") @@ -59,6 +60,14 @@ if Platform.isWindows() and hasattr(sys, "frozen"): except KeyError: pass +# GITHUB issue #6194: https://github.com/Ultimaker/Cura/issues/6194 +# With AppImage 2 on Linux, the current working directory will be somewhere in /tmp//usr, which is owned +# by root. For some reason, QDesktopServices.openUrl() requires to have a usable current working directory, +# otherwise it doesn't work. This is a workaround on Linux that before we call QDesktopServices.openUrl(), we +# switch to a directory where the user has the ownership. +if Platform.isLinux() and hasattr(sys, "frozen"): + os.chdir(os.path.expanduser("~")) + # WORKAROUND: GITHUB-704 GITHUB-708 # It looks like setuptools creates a .pth file in # the default /usr/lib which causes the default site-packages @@ -132,5 +141,37 @@ import Arcus #@UnusedImport import Savitar #@UnusedImport from cura.CuraApplication import CuraApplication + +# WORKAROUND: CURA-6739 +# The CTM file loading module in Trimesh requires the OpenCTM library to be dynamically loaded. It uses +# ctypes.util.find_library() to find libopenctm.dylib, but this doesn't seem to look in the ".app" application folder +# on Mac OS X. Adding the search path to environment variables such as DYLD_LIBRARY_PATH and DYLD_FALLBACK_LIBRARY_PATH +# makes it work. The workaround here uses DYLD_FALLBACK_LIBRARY_PATH. +if Platform.isOSX() and getattr(sys, "frozen", False): + old_env = os.environ.get("DYLD_FALLBACK_LIBRARY_PATH", "") + # This is where libopenctm.so is in the .app folder. + search_path = os.path.join(CuraApplication.getInstallPrefix(), "MacOS") + path_list = old_env.split(":") + if search_path not in path_list: + path_list.append(search_path) + os.environ["DYLD_FALLBACK_LIBRARY_PATH"] = ":".join(path_list) + import trimesh.exchange.load + os.environ["DYLD_FALLBACK_LIBRARY_PATH"] = old_env + +# WORKAROUND: CURA-6739 +# Similar CTM file loading fix for Linux, but NOTE THAT this doesn't work directly with Python 3.5.7. There's a fix +# for ctypes.util.find_library() in Python 3.6 and 3.7. That fix makes sure that find_library() will check +# LD_LIBRARY_PATH. With Python 3.5, that fix needs to be backported to make this workaround work. +if Platform.isLinux() and getattr(sys, "frozen", False): + old_env = os.environ.get("LD_LIBRARY_PATH", "") + # This is where libopenctm.so is in the AppImage. + search_path = os.path.join(CuraApplication.getInstallPrefix(), "bin") + path_list = old_env.split(":") + if search_path not in path_list: + path_list.append(search_path) + os.environ["LD_LIBRARY_PATH"] = ":".join(path_list) + import trimesh.exchange.load + os.environ["LD_LIBRARY_PATH"] = old_env + app = CuraApplication() app.run() 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 8a18d1b698..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,22 +23,25 @@ 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 +from PyQt5.QtCore import QCoreApplication + from .WorkspaceDialog import WorkspaceDialog 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 @@ -59,7 +61,11 @@ class MachineInfo: self.container_id = None self.name = None self.definition_id = None + + 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 @@ -79,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. @@ -227,6 +234,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): else: Logger.log("w", "Unknown definition container type %s for %s", definition_container_type, definition_container_file) + QCoreApplication.processEvents() # Ensure that the GUI does not freeze. Job.yieldThread() if machine_definition_container_count != 1: @@ -253,12 +261,15 @@ class ThreeMFWorkspaceReader(WorkspaceReader): containers_found_dict["material"] = True if not self._container_registry.isReadOnly(container_id): # Only non readonly materials can be in conflict material_conflict = True + QCoreApplication.processEvents() # Ensure that the GUI does not freeze. Job.yieldThread() # Check if any quality_changes instance container is in conflict. 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 @@ -316,13 +327,17 @@ 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: # Ignore certain instance container types Logger.log("w", "Ignoring instance container [%s] with type [%s]", container_id, container_type) continue - + QCoreApplication.processEvents() # Ensure that the GUI does not freeze. Job.yieldThread() if self._machine_info.quality_changes_info.global_info is None: @@ -341,7 +356,10 @@ 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) + stacks = self._container_registry.findContainerStacks(name = machine_name, type = "machine") self._is_same_machine_type = True existing_global_stack = None @@ -397,7 +415,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): variant_id = parser["containers"][str(_ContainerIndexes.Variant)] if variant_id not in ("empty", "empty_variant"): self._machine_info.variant_info = instance_container_info_dict[variant_id] - + QCoreApplication.processEvents() # Ensure that the GUI does not freeze. Job.yieldThread() # if the global stack is found, we check if there are conflicts in the extruder stacks @@ -419,18 +437,26 @@ class ThreeMFWorkspaceReader(WorkspaceReader): if parser.has_option("metadata", "enabled"): extruder_info.enabled = parser["metadata"]["enabled"] if variant_id not in ("empty", "empty_variant"): - extruder_info.variant_info = instance_container_info_dict[variant_id] + if variant_id in instance_container_info_dict: + extruder_info.variant_info = instance_container_info_dict[variant_id] + if material_id not in ("empty", "empty_material"): root_material_id = reverse_material_id_dict[material_id] extruder_info.root_material_id = root_material_id + definition_changes_id = parser["containers"][str(_ContainerIndexes.DefinitionChanges)] if definition_changes_id not in ("empty", "empty_definition_changes"): extruder_info.definition_changes_info = instance_container_info_dict[definition_changes_id] + user_changes_id = parser["containers"][str(_ContainerIndexes.UserChanges)] if user_changes_id not in ("empty", "empty_user_changes"): 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 @@ -495,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 @@ -515,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) @@ -558,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") @@ -648,6 +657,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): definition_container = self._container_registry.findDefinitionContainers(id = "fdmprinter")[0] #Fall back to defaults. self._container_registry.addContainer(definition_container) Job.yieldThread() + QCoreApplication.processEvents() # Ensure that the GUI does not freeze. Logger.log("d", "Workspace loading is checking materials...") # Get all the material files and check if they exist. If not, add them. @@ -674,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. @@ -697,6 +707,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): material_container.setDirty(True) self._container_registry.addContainer(material_container) Job.yieldThread() + QCoreApplication.processEvents() # Ensure that the GUI does not freeze. # Handle quality changes if any self._processQualityChanges(global_stack) @@ -727,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: @@ -737,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" @@ -753,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()) @@ -787,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()) @@ -817,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(): @@ -828,7 +833,47 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._machine_info.quality_changes_info.name = quality_changes_name - def _clearStack(self, stack): + ## 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() stack.definitionChanges.clear() @@ -887,41 +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: - 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 @@ -932,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 @@ -959,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(): @@ -973,34 +999,38 @@ class ThreeMFWorkspaceReader(WorkspaceReader): extruder_stack.setMetaDataEntry("enabled", "True") extruder_stack.setMetaDataEntry("enabled", str(extruder_info.enabled)) + # Set metadata fields that are missing from the global stack + for key, value in self._machine_info.metadata_dict.items(): + if key not in global_stack.getMetaData(): + global_stack.setMetaDataEntry(key, value) + 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()) + # Set metadata fields that are missing from the global stack + for key, value in self._machine_info.metadata_dict.items(): + if key not in global_stack.getMetaData(): + 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) @@ -1008,10 +1038,16 @@ 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()) - def _stripFileToId(self, file): + @staticmethod + def _stripFileToId(file): mime_type = MimeTypeDatabase.getMimeTypeForFile(file) file = mime_type.stripExtension(file) return file.replace("Cura/", "") @@ -1020,7 +1056,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): return self._container_registry.getContainerForMimeType(MimeTypeDatabase.getMimeType("application/x-ultimaker-material-profile")) ## Get the list of ID's of all containers in a container stack by partially parsing it's serialized data. - def _getContainerIdListFromSerialized(self, serialized): + @staticmethod + def _getContainerIdListFromSerialized(serialized): parser = ConfigParser(interpolation = None, empty_lines_in_values = False) parser.read_string(serialized) @@ -1041,12 +1078,20 @@ class ThreeMFWorkspaceReader(WorkspaceReader): return container_ids - def _getMachineNameFromSerializedStack(self, serialized): + @staticmethod + def _getMachineNameFromSerializedStack(serialized): parser = ConfigParser(interpolation = None, empty_lines_in_values = False) parser.read_string(serialized) return parser["general"].get("name", "") - def _getMaterialLabelFromSerialized(self, serialized): + @staticmethod + def _getMetaDataDictFromSerializedStack(serialized: str) -> Dict[str, str]: + parser = ConfigParser(interpolation = None, empty_lines_in_values = False) + parser.read_string(serialized) + return dict(parser["metadata"]) + + @staticmethod + def _getMaterialLabelFromSerialized(serialized): data = ET.fromstring(serialized) metadata = data.iterfind("./um:metadata/um:name/um:label", {"um": "http://www.ultimaker.com/material"}) for entry in metadata: 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 58d881c915..a38c53457c 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 @@ -24,7 +24,7 @@ UM.Dialog onClosing: manager.notifyClosed() onVisibleChanged: { - if(visible) + if (visible) { machineResolveComboBox.currentIndex = 0 qualityChangesResolveComboBox.currentIndex = 0 @@ -55,8 +55,8 @@ UM.Dialog // See http://stackoverflow.com/questions/7659442/listelement-fields-as-properties Component.onCompleted: { - append({"key": "override", "label": catalog.i18nc("@action:ComboBox option", "Update existing")}); - append({"key": "new", "label": catalog.i18nc("@action:ComboBox option", "Create new")}); + append({"key": "override", "label": catalog.i18nc("@action:ComboBox Update/override existing profile", "Update existing")}); + append({"key": "new", "label": catalog.i18nc("@action:ComboBox Save settings in a new profile", "Create new")}); } } @@ -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/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/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 6b558bc65b..1437153f32 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -369,7 +369,7 @@ class CuraEngineBackend(QObject, Backend): elif job.getResult() == StartJobResult.ObjectSettingError: errors = {} - for node in DepthFirstIterator(self._application.getController().getScene().getRoot()): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. + for node in DepthFirstIterator(self._application.getController().getScene().getRoot()): stack = node.callDecoration("getStack") if not stack: continue @@ -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) @@ -438,7 +438,7 @@ class CuraEngineBackend(QObject, Backend): if not self._application.getPreferences().getValue("general/auto_slice"): enable_timer = False - for node in DepthFirstIterator(self._scene.getRoot()): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. + for node in DepthFirstIterator(self._scene.getRoot()): if node.callDecoration("isBlockSlicing"): enable_timer = False self.setState(BackendState.Disabled) @@ -460,7 +460,7 @@ class CuraEngineBackend(QObject, Backend): ## Return a dict with number of objects per build plate def _numObjectsPerBuildPlate(self) -> Dict[int, int]: num_objects = defaultdict(int) #type: Dict[int, int] - for node in DepthFirstIterator(self._scene.getRoot()): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. + for node in DepthFirstIterator(self._scene.getRoot()): # Only count sliceable objects if node.callDecoration("isSliceable"): build_plate_number = node.callDecoration("getBuildPlateNumber") @@ -543,15 +543,25 @@ class CuraEngineBackend(QObject, Backend): if error.getErrorCode() == Arcus.ErrorCode.BindFailedError and self._start_slice_job is not None: self._start_slice_job.setIsCancelled(False) + # Check if there's any slicable object in the scene. + def hasSlicableObject(self) -> bool: + has_slicable = False + for node in DepthFirstIterator(self._scene.getRoot()): + if node.callDecoration("isSliceable"): + has_slicable = True + break + return has_slicable + ## Remove old layer data (if any) def _clearLayerData(self, build_plate_numbers: Set = None) -> None: # Clear out any old gcode self._scene.gcode_dict = {} # type: ignore - for node in DepthFirstIterator(self._scene.getRoot()): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. + for node in DepthFirstIterator(self._scene.getRoot()): if node.callDecoration("getLayerData"): if not build_plate_numbers or node.callDecoration("getBuildPlateNumber") in build_plate_numbers: - node.getParent().removeChild(node) + # We can asume that all nodes have a parent as we're looping through the scene (and filter out root) + cast(SceneNode, node.getParent()).removeChild(node) def markSliceAll(self) -> None: for build_plate_number in range(self._application.getMultiBuildPlateModel().maxBuildPlate + 1): @@ -560,6 +570,10 @@ class CuraEngineBackend(QObject, Backend): ## Convenient function: mark everything to slice, emit state and clear layer data def needsSlicing(self) -> None: + # CURA-6604: If there's no slicable object, do not (try to) trigger slice, which will clear all the current + # gcode. This can break Gcode file loading if it tries to remove it afterwards. + if not self.hasSlicableObject(): + return self.determineAutoSlicing() self.stopSlicing() self.markSliceAll() @@ -631,7 +645,10 @@ class CuraEngineBackend(QObject, Backend): self.setState(BackendState.Done) self.processingProgress.emit(1.0) - gcode_list = self._scene.gcode_dict[self._start_slice_job_build_plate] #type: ignore #Because we generate this attribute dynamically. + try: + gcode_list = self._scene.gcode_dict[self._start_slice_job_build_plate] #type: ignore #Because we generate this attribute dynamically. + except KeyError: # Can occur if the g-code has been cleared while a slice message is still arriving from the other end. + gcode_list = [] for index, line in enumerate(gcode_list): replaced = line.replace("{print_time}", str(self._application.getPrintInformation().currentPrintTime.getDisplayString(DurationFormat.Format.ISO8601))) replaced = replaced.replace("{filament_amount}", str(self._application.getPrintInformation().materialLengths)) @@ -670,14 +687,20 @@ class CuraEngineBackend(QObject, Backend): # # \param message The protobuf message containing g-code, encoded as UTF-8. def _onGCodeLayerMessage(self, message: Arcus.PythonMessage) -> None: - self._scene.gcode_dict[self._start_slice_job_build_plate].append(message.data.decode("utf-8", "replace")) #type: ignore #Because we generate this attribute dynamically. + try: + self._scene.gcode_dict[self._start_slice_job_build_plate].append(message.data.decode("utf-8", "replace")) #type: ignore #Because we generate this attribute dynamically. + except KeyError: # Can occur if the g-code has been cleared while a slice message is still arriving from the other end. + pass # Throw the message away. ## Called when a g-code prefix message is received from the engine. # # \param message The protobuf message containing the g-code prefix, # encoded as UTF-8. def _onGCodePrefixMessage(self, message: Arcus.PythonMessage) -> None: - self._scene.gcode_dict[self._start_slice_job_build_plate].insert(0, message.data.decode("utf-8", "replace")) #type: ignore #Because we generate this attribute dynamically. + try: + self._scene.gcode_dict[self._start_slice_job_build_plate].insert(0, message.data.decode("utf-8", "replace")) #type: ignore #Because we generate this attribute dynamically. + except KeyError: # Can occur if the g-code has been cleared while a slice message is still arriving from the other end. + pass # Throw the message away. ## Creates a new socket connection. def _createSocket(self, protocol_file: str = None) -> None: @@ -811,9 +834,8 @@ class CuraEngineBackend(QObject, Backend): if self._global_container_stack: self._global_container_stack.propertyChanged.disconnect(self._onSettingChanged) self._global_container_stack.containersChanged.disconnect(self._onChanged) - extruders = list(self._global_container_stack.extruders.values()) - for extruder in extruders: + for extruder in self._global_container_stack.extruderList: extruder.propertyChanged.disconnect(self._onSettingChanged) extruder.containersChanged.disconnect(self._onChanged) @@ -822,8 +844,8 @@ class CuraEngineBackend(QObject, Backend): if self._global_container_stack: self._global_container_stack.propertyChanged.connect(self._onSettingChanged) # Note: Only starts slicing when the value changed. self._global_container_stack.containersChanged.connect(self._onChanged) - extruders = list(self._global_container_stack.extruders.values()) - for extruder in extruders: + + for extruder in self._global_container_stack.extruderList: extruder.propertyChanged.connect(self._onSettingChanged) extruder.containersChanged.connect(self._onChanged) self._onChanged() diff --git a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py index ed4f556cc9..32d60eb68b 100644 --- a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py +++ b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.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 gc @@ -136,23 +136,23 @@ class ProcessSlicedLayersJob(Job): extruder = polygon.extruder - line_types = numpy.fromstring(polygon.line_type, dtype="u1") # Convert bytearray to numpy array + line_types = numpy.fromstring(polygon.line_type, dtype = "u1") # Convert bytearray to numpy array line_types = line_types.reshape((-1,1)) - points = numpy.fromstring(polygon.points, dtype="f4") # Convert bytearray to numpy array + points = numpy.fromstring(polygon.points, dtype = "f4") # Convert bytearray to numpy array if polygon.point_type == 0: # Point2D points = points.reshape((-1,2)) # We get a linear list of pairs that make up the points, so make numpy interpret them correctly. else: # Point3D points = points.reshape((-1,3)) - line_widths = numpy.fromstring(polygon.line_width, dtype="f4") # Convert bytearray to numpy array + line_widths = numpy.fromstring(polygon.line_width, dtype = "f4") # Convert bytearray to numpy array line_widths = line_widths.reshape((-1,1)) # We get a linear list of pairs that make up the points, so make numpy interpret them correctly. - line_thicknesses = numpy.fromstring(polygon.line_thickness, dtype="f4") # Convert bytearray to numpy array + line_thicknesses = numpy.fromstring(polygon.line_thickness, dtype = "f4") # Convert bytearray to numpy array line_thicknesses = line_thicknesses.reshape((-1,1)) # We get a linear list of pairs that make up the points, so make numpy interpret them correctly. - line_feedrates = numpy.fromstring(polygon.line_feedrate, dtype="f4") # Convert bytearray to numpy array + line_feedrates = numpy.fromstring(polygon.line_feedrate, dtype = "f4") # Convert bytearray to numpy array line_feedrates = line_feedrates.reshape((-1,1)) # We get a linear list of pairs that make up the points, so make numpy interpret them correctly. # Create a new 3D-array, copy the 2D points over and insert the right height. @@ -194,7 +194,7 @@ class ProcessSlicedLayersJob(Job): manager = ExtruderManager.getInstance() extruders = manager.getActiveExtruderStacks() if extruders: - material_color_map = numpy.zeros((len(extruders), 4), dtype=numpy.float32) + material_color_map = numpy.zeros((len(extruders), 4), dtype = numpy.float32) for extruder in extruders: position = int(extruder.getMetaDataEntry("position", default = "0")) try: @@ -206,8 +206,8 @@ class ProcessSlicedLayersJob(Job): material_color_map[position, :] = color else: # Single extruder via global stack. - material_color_map = numpy.zeros((1, 4), dtype=numpy.float32) - color_code = global_container_stack.material.getMetaDataEntry("color_code", default="#e0e000") + material_color_map = numpy.zeros((1, 4), dtype = numpy.float32) + color_code = global_container_stack.material.getMetaDataEntry("color_code", default = "#e0e000") color = colorCodeToRGBA(color_code) material_color_map[0, :] = color diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 8ce3110a93..29a6d8ff30 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -11,6 +11,7 @@ import Arcus #For typing. from UM.Job import Job from UM.Logger import Logger +from UM.Scene.SceneNode import SceneNode from UM.Settings.ContainerStack import ContainerStack #For typing. from UM.Settings.SettingRelation import SettingRelation #For typing. @@ -105,9 +106,14 @@ 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): + if validation_state in (ValidatorState.Exception, ValidatorState.MaximumError, ValidatorState.MinimumError, ValidatorState.Invalid): Logger.log("w", "Setting %s is not valid, but %s. Aborting slicing.", key, validation_state) return True Job.yieldThread() @@ -133,6 +139,14 @@ class StartSliceJob(Job): self.setResult(StartJobResult.BuildPlateError) return + # Wait for error checker to be done. + while CuraApplication.getInstance().getMachineErrorChecker().needToWaitForResult: + time.sleep(0.1) + + if CuraApplication.getInstance().getMachineErrorChecker().hasError: + self.setResult(StartJobResult.SettingError) + return + # Don't slice if the buildplate or the nozzle type is incompatible with the materials if not CuraApplication.getInstance().getMachineManager().variantBuildplateCompatible and \ not CuraApplication.getInstance().getMachineManager().variantBuildplateUsable: @@ -150,7 +164,7 @@ class StartSliceJob(Job): # Don't slice if there is a per object setting with an error value. - for node in DepthFirstIterator(self._scene.getRoot()): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. + for node in DepthFirstIterator(self._scene.getRoot()): if not isinstance(node, CuraSceneNode) or not node.isSelectable(): continue @@ -160,15 +174,16 @@ class StartSliceJob(Job): with self._scene.getSceneLock(): # Remove old layer data. - for node in DepthFirstIterator(self._scene.getRoot()): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. + for node in DepthFirstIterator(self._scene.getRoot()): if node.callDecoration("getLayerData") and node.callDecoration("getBuildPlateNumber") == self._build_plate_number: - node.getParent().removeChild(node) + # Singe we walk through all nodes in the scene, they always have a parent. + cast(SceneNode, node.getParent()).removeChild(node) break # Get the objects in their groups to print. object_groups = [] if stack.getProperty("print_sequence", "value") == "one_at_a_time": - for node in OneAtATimeIterator(self._scene.getRoot()): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. + for node in OneAtATimeIterator(self._scene.getRoot()): temp_list = [] # Node can't be printed, so don't bother sending it. @@ -183,7 +198,8 @@ class StartSliceJob(Job): children = node.getAllChildren() children.append(node) for child_node in children: - if child_node.getMeshData() and child_node.getMeshData().getVertices() is not None: + mesh_data = child_node.getMeshData() + if mesh_data and mesh_data.getVertices() is not None: temp_list.append(child_node) if temp_list: @@ -194,8 +210,9 @@ class StartSliceJob(Job): else: temp_list = [] has_printing_mesh = False - for node in DepthFirstIterator(self._scene.getRoot()): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. - if node.callDecoration("isSliceable") and node.getMeshData() and node.getMeshData().getVertices() is not None: + for node in DepthFirstIterator(self._scene.getRoot()): + mesh_data = node.getMeshData() + if node.callDecoration("isSliceable") and mesh_data and mesh_data.getVertices() is not None: is_non_printing_mesh = bool(node.callDecoration("isNonPrintingMesh")) # Find a reason not to add the node @@ -210,7 +227,7 @@ class StartSliceJob(Job): Job.yieldThread() - #If the list doesn't have any model with suitable settings then clean the list + # If the list doesn't have any model with suitable settings then clean the list # otherwise CuraEngine will crash if not has_printing_mesh: temp_list.clear() @@ -261,10 +278,14 @@ class StartSliceJob(Job): for group in filtered_object_groups: group_message = self._slice_message.addRepeatedMessage("object_lists") - if group[0].getParent() is not None and group[0].getParent().callDecoration("isGroup"): - self._handlePerObjectSettings(group[0].getParent(), group_message) + parent = group[0].getParent() + if parent is not None and parent.callDecoration("isGroup"): + self._handlePerObjectSettings(cast(CuraSceneNode, parent), group_message) + for object in group: mesh_data = object.getMeshData() + if mesh_data is None: + continue rot_scale = object.getWorldTransformation().getTransposed().getData()[0:3, 0:3] translate = object.getWorldTransformation().getData()[:3, 3] @@ -288,7 +309,7 @@ class StartSliceJob(Job): obj.vertices = flat_verts - self._handlePerObjectSettings(object, obj) + self._handlePerObjectSettings(cast(CuraSceneNode, object), obj) Job.yieldThread() 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 11e58dac6d..d4e5d393b2 100644 --- a/plugins/CuraProfileReader/CuraProfileReader.py +++ b/plugins/CuraProfileReader/CuraProfileReader.py @@ -1,11 +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 configparser -from UM.PluginRegistry import PluginRegistry +import configparser +from typing import List, Optional, Tuple + 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.ContainerTree import ContainerTree from cura.ReaderWriters.ProfileReader import ProfileReader import zipfile @@ -17,39 +20,43 @@ import zipfile class CuraProfileReader(ProfileReader): ## Initialises the cura profile reader. # This does nothing since the only other function is basically stateless. - def __init__(self): + def __init__(self) -> None: super().__init__() ## Reads a cura profile from a file and returns it. # # \param file_name The file to read the cura profile from. - # \return The cura profile that was in the file, if any. If the file could - # not be read or didn't contain a valid profile, \code None \endcode is + # \return The cura profiles that were in the file, if any. If the file + # could not be read or didn't contain a valid profile, ``None`` is # returned. - def read(self, file_name): + def read(self, file_name: str) -> List[Optional[InstanceContainer]]: try: with zipfile.ZipFile(file_name, "r") as archive: - results = [] + results = [] # type: List[Optional[InstanceContainer]] for profile_id in archive.namelist(): with archive.open(profile_id) as f: serialized = f.read() - profile = self._loadProfile(serialized.decode("utf-8"), profile_id) - if profile is not None: - results.append(profile) + upgraded_profiles = self._upgradeProfile(serialized.decode("utf-8"), profile_id) #After upgrading it may split into multiple profiles. + for upgraded_profile in upgraded_profiles: + serialization, new_id = upgraded_profile + profile = self._loadProfile(serialization, new_id) + if profile is not None: + results.append(profile) return results except zipfile.BadZipFile: # It must be an older profile from Cura 2.1. with open(file_name, encoding = "utf-8") as fhandle: - serialized = fhandle.read() - return [self._loadProfile(serialized, profile_id) for serialized, profile_id in self._upgradeProfile(serialized, file_name)] + serialized_bytes = fhandle.read() + return [self._loadProfile(serialized, profile_id) for serialized, profile_id in self._upgradeProfile(serialized_bytes, file_name)] ## Convert a profile from an old Cura to this Cura if needed. # - # \param serialized \type{str} The profile data to convert in the serialized on-disk format. - # \param profile_id \type{str} The name of the profile. - # \return \type{List[Tuple[str,str]]} List of serialized profile strings and matching profile names. - def _upgradeProfile(self, serialized, profile_id): + # \param serialized The profile data to convert in the serialized on-disk + # format. + # \param profile_id The name of the profile. + # \return List of serialized profile strings and matching profile names. + def _upgradeProfile(self, serialized: str, profile_id: str) -> List[Tuple[str, str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) @@ -61,48 +68,67 @@ class CuraProfileReader(ProfileReader): return [] version = int(parser["general"]["version"]) + setting_version = int(parser["metadata"].get("setting_version", "0")) if InstanceContainer.Version != version: name = parser["general"]["name"] - return self._upgradeProfileVersion(serialized, name, version) + return self._upgradeProfileVersion(serialized, name, version, setting_version) else: return [(serialized, profile_id)] ## Load a profile from a serialized string. # - # \param serialized \type{str} The profile data to read. - # \param profile_id \type{str} The name of the profile. - # \return \type{InstanceContainer|None} - def _loadProfile(self, serialized, profile_id): + # \param serialized The profile data to read. + # \param profile_id The name of the profile. + # \return The profile that was stored in the string. + def _loadProfile(self, serialized: str, profile_id: str) -> Optional[InstanceContainer]: # Create an empty profile. profile = InstanceContainer(profile_id) profile.setMetaDataEntry("type", "quality_changes") try: - profile.deserialize(serialized) + profile.deserialize(serialized, file_name = profile_id) except ContainerFormatError as e: Logger.log("e", "Error in the format of a container: %s", str(e)) return None except Exception as e: Logger.log("e", "Error while trying to parse profile: %s", str(e)) return None + + global_stack = CuraApplication.getInstance().getGlobalContainerStack() + if global_stack is None: + return None + + 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 ## Upgrade a serialized profile to the current profile format. # - # \param serialized \type{str} The profile data to convert. - # \param profile_id \type{str} The name of the profile. - # \param source_version \type{int} The profile version of 'serialized'. - # \return \type{List[Tuple[str,str]]} List of serialized profile strings and matching profile names. - def _upgradeProfileVersion(self, serialized, profile_id, source_version): - converter_plugins = PluginRegistry.getInstance().getAllMetaData(filter={"version_upgrade": {} }, active_only=True) + # \param serialized The profile data to convert. + # \param profile_id The name of the profile. + # \param source_version The profile version of 'serialized'. + # \return List of serialized profile strings and matching profile names. + def _upgradeProfileVersion(self, serialized: str, profile_id: str, main_version: int, setting_version: int) -> List[Tuple[str, str]]: + source_version = main_version * 1000000 + setting_version - source_format = ("profile", source_version) - profile_convert_funcs = [plugin["version_upgrade"][source_format][2] for plugin in converter_plugins - if source_format in plugin["version_upgrade"] and plugin["version_upgrade"][source_format][1] == InstanceContainer.Version] - - if not profile_convert_funcs: + from UM.VersionUpgradeManager import VersionUpgradeManager + results = VersionUpgradeManager.getInstance().updateFilesData("quality_changes", source_version, [serialized], [profile_id]) + if results is None: return [] - filenames, outputs = profile_convert_funcs[0](serialized, profile_id) - if filenames is None and outputs is None: + serialized = results.files_data[0] + + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + if "general" not in parser: + Logger.log("w", "Missing required section 'general'.") return [] - return list(zip(outputs, filenames)) + + new_source_version = results.version + if int(new_source_version / 1000000) != InstanceContainer.Version or new_source_version % 1000000 != CuraApplication.SettingVersion: + Logger.log("e", "Failed to upgrade profile [%s]", profile_id) + + if int(parser["general"]["version"]) != InstanceContainer.Version: + Logger.log("e", "Failed to upgrade profile [%s]", profile_id) + return [] + return [(serialized, profile_id)] 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/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py index a1460cca3f..f286662bc4 100644 --- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py +++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py @@ -10,6 +10,9 @@ from UM.Version import Version import urllib.request from urllib.error import URLError from typing import Dict, Optional +import ssl + +import certifi from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup, getSettingsKeyForMachine from .FirmwareUpdateCheckerMessage import FirmwareUpdateCheckerMessage @@ -39,8 +42,12 @@ class FirmwareUpdateCheckerJob(Job): result = self.STRING_ZERO_VERSION try: + # CURA-6698 Create an SSL context and use certifi CA certificates for verification. + context = ssl.SSLContext(protocol = ssl.PROTOCOL_TLSv1_2) + context.load_verify_locations(cafile = certifi.where()) + request = urllib.request.Request(url, headers = self._headers) - response = urllib.request.urlopen(request) + response = urllib.request.urlopen(request, context = context) result = response.read().decode("utf-8") except URLError: Logger.log("w", "Could not reach '{0}', if this URL is old, consider removal.".format(url)) @@ -104,7 +111,7 @@ class FirmwareUpdateCheckerJob(Job): # because the new version of Cura will be release before the firmware and we don't want to # notify the user when no new firmware version is available. if (checked_version != "") and (checked_version != current_version): - Logger.log("i", "SHOWING FIRMWARE UPDATE MESSAGE") + Logger.log("i", "Showing firmware update message for new version: {version}".format(version = current_version)) message = FirmwareUpdateCheckerMessage(machine_id, self._machine_name, self._lookups.getRedirectUserUrl()) message.actionTriggered.connect(self._callback) @@ -113,7 +120,7 @@ class FirmwareUpdateCheckerJob(Job): Logger.log("i", "No machine with name {0} in list of firmware to check.".format(self._machine_name)) except Exception as e: - Logger.log("w", "Failed to check for new version: %s", e) + Logger.logException("w", "Failed to check for new version: %s", e) if not self.silent: Message(i18n_catalog.i18nc("@info", "Could not access update information.")).show() return 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/GCodeGzReader.py b/plugins/GCodeGzReader/GCodeGzReader.py index d075e4e3b0..a528b494e9 100644 --- a/plugins/GCodeGzReader/GCodeGzReader.py +++ b/plugins/GCodeGzReader/GCodeGzReader.py @@ -27,6 +27,6 @@ class GCodeGzReader(MeshReader): file_data = file.read() uncompressed_gcode = gzip.decompress(file_data).decode("utf-8") PluginRegistry.getInstance().getPluginObject("GCodeReader").preReadFromStream(uncompressed_gcode) - result = PluginRegistry.getInstance().getPluginObject("GCodeReader").readFromStream(uncompressed_gcode) + result = PluginRegistry.getInstance().getPluginObject("GCodeReader").readFromStream(uncompressed_gcode, file_name) return result 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/FlavorParser.py b/plugins/GCodeReader/FlavorParser.py index 12bed210d2..d05338ae4d 100644 --- a/plugins/GCodeReader/FlavorParser.py +++ b/plugins/GCodeReader/FlavorParser.py @@ -3,7 +3,7 @@ import math import re -from typing import Dict, List, NamedTuple, Optional, Union +from typing import Dict, List, NamedTuple, Optional, Union, Set import numpy @@ -38,6 +38,8 @@ class FlavorParser: self._message = None # type: Optional[Message] self._layer_number = 0 self._extruder_number = 0 + # All extruder numbers that have been seen + self._extruders_seen = {0} # type: Set[int] self._clearValues() self._scene_node = None # X, Y, Z position, F feedrate and E extruder values are stored @@ -66,7 +68,7 @@ class FlavorParser: if n < 0: return None n += len(code) - pattern = re.compile("[;\s]") + pattern = re.compile("[;\\s]") match = pattern.search(line, n) m = match.start() if match is not None else -1 try: @@ -292,7 +294,12 @@ class FlavorParser: extruder.getProperty("machine_nozzle_offset_y", "value")] return result - def processGCodeStream(self, stream: str) -> Optional[CuraSceneNode]: + # + # CURA-6643 + # This function needs the filename so it can be set to the SceneNode. Otherwise, if you load a GCode file and press + # F5, that gcode SceneNode will be removed because it doesn't have a file to be reloaded from. + # + def processGCodeStream(self, stream: str, filename: str) -> Optional["CuraSceneNode"]: Logger.log("d", "Preparing to load GCode") self._cancelled = False # We obtain the filament diameter from the selected extruder to calculate line widths @@ -418,6 +425,7 @@ class FlavorParser: if line.startswith("T"): T = self._getInt(line, "T") if T is not None: + self._extruders_seen.add(T) self._createPolygon(self._current_layer_thickness, current_path, self._extruder_offsets.get(self._extruder_number, [0, 0])) current_path.clear() @@ -453,6 +461,7 @@ class FlavorParser: scene_node.addDecorator(decorator) gcode_list_decorator = GCodeListDecorator() + gcode_list_decorator.setGcodeFileName(filename) gcode_list_decorator.setGCodeList(gcode_list) scene_node.addDecorator(gcode_list_decorator) @@ -467,10 +476,9 @@ class FlavorParser: if self._layer_number == 0: Logger.log("w", "File doesn't contain any valid layers") - settings = CuraApplication.getInstance().getGlobalContainerStack() - if settings is not None and not settings.getProperty("machine_center_is_zero", "value"): - machine_width = settings.getProperty("machine_width", "value") - machine_depth = settings.getProperty("machine_depth", "value") + if not global_stack.getProperty("machine_center_is_zero", "value"): + machine_width = global_stack.getProperty("machine_width", "value") + machine_depth = global_stack.getProperty("machine_depth", "value") scene_node.setPosition(Vector(-machine_width / 2, 0, machine_depth / 2)) Logger.log("d", "GCode loading finished") diff --git a/plugins/GCodeReader/GCodeReader.py b/plugins/GCodeReader/GCodeReader.py index b9e948dfea..21be026cc6 100755 --- a/plugins/GCodeReader/GCodeReader.py +++ b/plugins/GCodeReader/GCodeReader.py @@ -2,6 +2,8 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional, Union, List, TYPE_CHECKING + from UM.FileHandler.FileReader import FileReader from UM.Mesh.MeshReader import MeshReader from UM.i18n import i18nCatalog @@ -9,8 +11,14 @@ from UM.Application import Application from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType catalog = i18nCatalog("cura") + +from .FlavorParser import FlavorParser from . import MarlinFlavorParser, RepRapFlavorParser +if TYPE_CHECKING: + from UM.Scene.SceneNode import SceneNode + from cura.Scene.CuraSceneNode import CuraSceneNode + # Class for loading and parsing G-code files class GCodeReader(MeshReader): @@ -30,7 +38,7 @@ class GCodeReader(MeshReader): ) self._supported_extensions = [".gcode", ".g"] - self._flavor_reader = None + self._flavor_reader = None # type: Optional[FlavorParser] Application.getInstance().getPreferences().addPreference("gcodereader/show_caution", True) @@ -54,10 +62,16 @@ class GCodeReader(MeshReader): file_data = file.read() return self.preReadFromStream(file_data, args, kwargs) - def readFromStream(self, stream): - return self._flavor_reader.processGCodeStream(stream) + def readFromStream(self, stream: str, filename: str) -> Optional["CuraSceneNode"]: + if self._flavor_reader is None: + return None + return self._flavor_reader.processGCodeStream(stream, filename) - def _read(self, file_name): + def _read(self, file_name: str) -> Union["SceneNode", List["SceneNode"]]: with open(file_name, "r", encoding = "utf-8") as file: file_data = file.read() - return self.readFromStream(file_data) + result = [] # type: List[SceneNode] + node = self.readFromStream(file_data, file_name) + if node is not None: + result.append(node) + return result 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/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/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 480a61f301..05f49017a3 100644 --- a/plugins/LegacyProfileReader/tests/TestLegacyProfileReader.py +++ b/plugins/LegacyProfileReader/tests/TestLegacyProfileReader.py @@ -5,6 +5,9 @@ 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__)), "..")) import UM.Application # To mock the application out. import UM.PluginRegistry # To mock the plug-in registry out. @@ -12,11 +15,13 @@ import UM.Settings.ContainerRegistry # To mock the container registry out. import UM.Settings.InstanceContainer # To intercept the serialised data from the read() function. import LegacyProfileReader as LegacyProfileReaderModule # To get the directory of the module. -from LegacyProfileReader import LegacyProfileReader # The module we're testing. @pytest.fixture def legacy_profile_reader(): - return LegacyProfileReader() + try: + return LegacyProfileReaderModule.LegacyProfileReader() + except TypeError: + return LegacyProfileReaderModule.LegacyProfileReader.LegacyProfileReader() test_prepareDefaultsData = [ { diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index cddc4e5fe8..28535024a7 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -9,8 +9,11 @@ import UM.i18n from UM.FlameProfiler import pyqtSlot 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 @@ -40,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: @@ -50,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: @@ -92,16 +110,13 @@ class MachineSettingsAction(MachineAction): return definition = global_stack.getDefinition() - if definition.getProperty("machine_gcode_flavor", "value") != "UltiGCode" or definition.getMetaDataEntry("has_materials", False): + if definition.getProperty("machine_gcode_flavor", "value") != "UltiGCode" or parseBool(definition.getMetaDataEntry("has_materials", False)): # In other words: only continue for the UM2 (extended), but not for the UM2+ 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: @@ -110,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/MachineSettingsExtruderTab.qml b/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml index 9341f7f67e..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 @@ -107,6 +107,7 @@ Item labelWidth: base.labelWidth controlWidth: base.controlWidth unitText: catalog.i18nc("@label", "mm") + allowNegativeValue: true forceUpdateOnChangeFunction: forceUpdateFunction } @@ -121,6 +122,7 @@ Item labelWidth: base.labelWidth controlWidth: base.controlWidth unitText: catalog.i18nc("@label", "mm") + allowNegativeValue: true forceUpdateOnChangeFunction: forceUpdateFunction } diff --git a/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml b/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml index 4ba0d19390..21d2f978cb 100644 --- a/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml +++ b/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml @@ -3,6 +3,7 @@ import QtQuick 2.10 import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 import UM 1.3 as UM import Cura 1.1 as Cura @@ -16,40 +17,37 @@ Item id: base UM.I18nCatalog { id: catalog; name: "cura" } - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top - - property int labelWidth: 120 * screenScaleFactor - property int controlWidth: (UM.Theme.getSize("setting_control").width * 3 / 4) | 0 - property var labelFont: UM.Theme.getFont("default") - property int columnWidth: ((parent.width - 2 * UM.Theme.getSize("default_margin").width) / 2) | 0 property int columnSpacing: 3 * screenScaleFactor property int propertyStoreIndex: manager ? manager.storeContainerIndex : 1 // definition_changes - property string machineStackId: Cura.MachineManager.activeMachineId + property int labelWidth: (columnWidth * 2 / 3 - UM.Theme.getSize("default_margin").width * 2) | 0 + property int controlWidth: (columnWidth / 3) | 0 + property var labelFont: UM.Theme.getFont("default") + + property string machineStackId: Cura.MachineManager.activeMachine.id property var forceUpdateFunction: manager.forceUpdate - Item + RowLayout { id: upperBlock - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right - anchors.margins: UM.Theme.getSize("default_margin").width - - height: childrenRect.height - + anchors + { + top: parent.top + left: parent.left + right: parent.right + margins: UM.Theme.getSize("default_margin").width + } + spacing: UM.Theme.getSize("default_margin").width + // ======================================= // Left-side column for "Printer Settings" // ======================================= Column { - anchors.top: parent.top - anchors.left: parent.left - width: base.columnWidth + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop spacing: base.columnSpacing @@ -59,6 +57,8 @@ Item font: UM.Theme.getFont("medium_bold") color: UM.Theme.getColor("text") renderType: Text.NativeRendering + width: parent.width + elide: Text.ElideRight } Cura.NumericTextFieldWithUnit // "X (Width)" @@ -140,6 +140,18 @@ Item forceUpdateOnChangeFunction: forceUpdateFunction } + Cura.SimpleCheckBox // "Heated build volume" + { + id: heatedVolumeCheckBox + containerStackId: machineStackId + settingKey: "machine_heated_build_volume" + settingStoreIndex: propertyStoreIndex + labelText: catalog.i18nc("@label", "Heated build volume") + labelFont: base.labelFont + labelWidth: base.labelWidth + forceUpdateOnChangeFunction: forceUpdateFunction + } + Cura.ComboBoxWithOptions // "G-code flavor" { id: gcodeFlavorComboBox @@ -163,9 +175,8 @@ Item // ======================================= Column { - anchors.top: parent.top - anchors.right: parent.right - width: base.columnWidth + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop spacing: base.columnSpacing @@ -175,6 +186,8 @@ Item font: UM.Theme.getFont("medium_bold") color: UM.Theme.getColor("text") renderType: Text.NativeRendering + width: parent.width + elide: Text.ElideRight } Cura.PrintHeadMinMaxTextField // "X min" @@ -191,6 +204,8 @@ Item axisName: "x" axisMinOrMax: "min" + allowNegativeValue: true + allowPositiveValue: false forceUpdateOnChangeFunction: forceUpdateFunction } @@ -209,6 +224,8 @@ Item axisName: "y" axisMinOrMax: "min" + allowNegativeValue: true + allowPositiveValue: false forceUpdateOnChangeFunction: forceUpdateFunction } @@ -227,6 +244,8 @@ Item axisName: "x" axisMinOrMax: "max" + allowNegativeValue: false + allowPositiveValue: true forceUpdateOnChangeFunction: forceUpdateFunction } @@ -247,6 +266,8 @@ Item axisName: "y" axisMinOrMax: "max" + allowNegativeValue: false + allowPositiveValue: true forceUpdateOnChangeFunction: forceUpdateFunction } @@ -313,22 +334,23 @@ Item } } - Item // Start and End G-code + RowLayout // Start and End G-code { id: lowerBlock - anchors.top: upperBlock.bottom - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.margins: UM.Theme.getSize("default_margin").width + spacing: UM.Theme.getSize("default_margin").width + anchors + { + top: upperBlock.bottom + bottom: parent.bottom + left: parent.left + right: parent.right + margins: UM.Theme.getSize("default_margin").width + } Cura.GcodeTextArea // "Start G-code" { - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.bottomMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - width: base.columnWidth - UM.Theme.getSize("default_margin").width + Layout.fillWidth: true + Layout.fillHeight: true labelText: catalog.i18nc("@title:label", "Start G-code") containerStackId: machineStackId @@ -338,11 +360,8 @@ Item Cura.GcodeTextArea // "End G-code" { - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.bottomMargin: UM.Theme.getSize("default_margin").height - anchors.right: parent.right - width: base.columnWidth - UM.Theme.getSize("default_margin").width + Layout.fillWidth: true + Layout.fillHeight: true labelText: catalog.i18nc("@title:label", "End G-code") containerStackId: machineStackId 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/ModelChecker.py b/plugins/ModelChecker/ModelChecker.py index 0619c95d67..0afed28f19 100644 --- a/plugins/ModelChecker/ModelChecker.py +++ b/plugins/ModelChecker/ModelChecker.py @@ -76,7 +76,9 @@ class ModelChecker(QObject, Extension): # This function can be triggered in the middle of a machine change, so do not proceed if the machine change # has not done yet. - if str(node_extruder_position) not in global_container_stack.extruders: + try: + extruder = global_container_stack.extruderList[int(node_extruder_position)] + except IndexError: Application.getInstance().callLater(lambda: self.onChanged.emit()) return False @@ -131,9 +133,9 @@ class ModelChecker(QObject, Extension): material_shrinkage = {} # Get all shrinkage values of materials used - for extruder_position, extruder in global_container_stack.extruders.items(): + for extruder_position, extruder in enumerate(global_container_stack.extruderList): shrinkage = extruder.material.getProperty("material_shrinkage_percentage", "value") if shrinkage is None: shrinkage = 0 - material_shrinkage[extruder_position] = shrinkage + material_shrinkage[str(extruder_position)] = shrinkage return material_shrinkage 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 9e719ddb43..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++) @@ -97,7 +97,7 @@ Rectangle horizontalCenter: parent.horizontalCenter } visible: isNetworkConfigured && !isConnected - text: catalog.i18nc("@info", "Please make sure your printer has a connection:\n- Check if the printer is turned on.\n- Check if the printer is connected to the network.") + text: catalog.i18nc("@info", "Please make sure your printer has a connection:\n- Check if the printer is turned on.\n- Check if the printer is connected to the network.\n- Check if you are signed in to discover cloud-connected printers.") font: UM.Theme.getFont("medium") color: UM.Theme.getColor("monitor_text_primary") wrapMode: Text.WordWrap @@ -166,4 +166,4 @@ Rectangle } } } -} \ No newline at end of file +} diff --git a/plugins/MonitorStage/__init__.py b/plugins/MonitorStage/__init__.py index 0468e6319b..a755268c79 100644 --- a/plugins/MonitorStage/__init__.py +++ b/plugins/MonitorStage/__init__.py @@ -12,7 +12,7 @@ def getMetaData(): return { "stage": { "name": i18n_catalog.i18nc("@item:inmenu", "Monitor"), - "weight": 2 + "weight": 30 } } 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/PerObjectItem.qml b/plugins/PerObjectSettingsTool/PerObjectItem.qml index 559ad2bf81..7c6ece12db 100644 --- a/plugins/PerObjectSettingsTool/PerObjectItem.qml +++ b/plugins/PerObjectSettingsTool/PerObjectItem.qml @@ -29,6 +29,17 @@ UM.TooltipArea UM.ActiveTool.forceUpdate(); } } + + // When the user removes settings from the list addedSettingsModel, we need to recheck if the + // setting is visible or not to show a mark in the CheckBox. + Connections + { + target: addedSettingsModel + onVisibleCountChanged: + { + check.checked = addedSettingsModel.getVisible(model.key) + } + } } diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml index 035d2e5299..bb342d5045 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml @@ -4,22 +4,68 @@ import QtQuick 2.2 import QtQuick.Controls 1.2 import QtQuick.Controls.Styles 1.2 -import QtQuick.Window 2.2 import UM 1.2 as UM import Cura 1.0 as Cura import ".." -Item { - id: base; - UM.I18nCatalog { id: catalog; name: "cura"; } - - width: childrenRect.width; - height: childrenRect.height; - property var all_categories_except_support: [ "machine_settings", "resolution", "shell", "infill", "material", "speed", +Item +{ + id: base + width: childrenRect.width + height: childrenRect.height + property var allCategoriesExceptSupport: [ "machine_settings", "resolution", "shell", "infill", "material", "speed", "travel", "cooling", "platform_adhesion", "dual", "meshfix", "blackmagic", "experimental"] + readonly property string normalMeshType: "" + readonly property string supportMeshType: "support_mesh" + readonly property string cuttingMeshType: "cutting_mesh" + readonly property string infillMeshType: "infill_mesh" + readonly property string antiOverhangMeshType: "anti_overhang_mesh" + + property var currentMeshType: UM.ActiveTool.properties.getValue("MeshType") + + // Update the view every time the currentMeshType changes + onCurrentMeshTypeChanged: + { + var type = currentMeshType + + // set checked state of mesh type buttons + normalButton.checked = type === normalMeshType + supportMeshButton.checked = type === supportMeshType + overhangMeshButton.checked = type === infillMeshType || type === cuttingMeshType + antiOverhangMeshButton.checked = type === antiOverhangMeshType + + // update active type label + for (var button in meshTypeButtons.children) + { + if (meshTypeButtons.children[button].checked){ + meshTypeLabel.text = catalog.i18nc("@label", "Mesh Type") + ": " + meshTypeButtons.children[button].text + break + } + } + } + + function setOverhangsMeshType() + { + if (infillOnlyCheckbox.checked) + { + setMeshType(infillMeshType) + } + else + { + setMeshType(cuttingMeshType) + } + } + + function setMeshType(type) + { + UM.ActiveTool.setProperty("MeshType", type) + } + + UM.I18nCatalog { id: catalog; name: "uranium"} + Column { id: items @@ -28,123 +74,97 @@ Item { spacing: UM.Theme.getSize("default_margin").height - Row + Row // Mesh type buttons { + id: meshTypeButtons spacing: UM.Theme.getSize("default_margin").width - Label + Button { - text: catalog.i18nc("@label","Mesh Type") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - height: UM.Theme.getSize("setting").height - verticalAlignment: Text.AlignVCenter + id: normalButton + text: catalog.i18nc("@label", "Normal model") + iconSource: UM.Theme.getIcon("pos_normal"); + property bool needBorder: true + checkable: true + onClicked: setMeshType(normalMeshType); + style: UM.Theme.styles.tool_button; + z: 4 } - UM.SettingPropertyProvider + Button { - id: meshTypePropertyProvider - containerStack: Cura.MachineManager.activeMachine - watchedProperties: [ "enabled" ] + id: supportMeshButton + text: catalog.i18nc("@label", "Print as support") + iconSource: UM.Theme.getIcon("pos_print_as_support"); + property bool needBorder: true + checkable:true + onClicked: setMeshType(supportMeshType) + style: UM.Theme.styles.tool_button; + z: 3 } - ComboBox + Button { - id: meshTypeSelection - style: UM.Theme.styles.combobox - onActivated: { - UM.ActiveTool.setProperty("MeshType", model.get(index).type) - } - model: ListModel - { - id: meshTypeModel - Component.onCompleted: meshTypeSelection.populateModel() - } - - function populateModel() - { - meshTypeModel.append({ - type: "", - text: catalog.i18nc("@label", "Normal model") - }); - meshTypePropertyProvider.key = "support_mesh"; - if(meshTypePropertyProvider.properties.enabled == "True") - { - meshTypeModel.append({ - type: "support_mesh", - text: catalog.i18nc("@label", "Print as support") - }); - } - meshTypePropertyProvider.key = "anti_overhang_mesh"; - if(meshTypePropertyProvider.properties.enabled == "True") - { - meshTypeModel.append({ - type: "anti_overhang_mesh", - text: catalog.i18nc("@label", "Don't support overlap with other models") - }); - } - meshTypePropertyProvider.key = "cutting_mesh"; - if(meshTypePropertyProvider.properties.enabled == "True") - { - meshTypeModel.append({ - type: "cutting_mesh", - text: catalog.i18nc("@label", "Modify settings for overlap with other models") - }); - } - meshTypePropertyProvider.key = "infill_mesh"; - if(meshTypePropertyProvider.properties.enabled == "True") - { - meshTypeModel.append({ - type: "infill_mesh", - text: catalog.i18nc("@label", "Modify settings for infill of other models") - }); - } - - meshTypeSelection.updateCurrentIndex(); - } - - function updateCurrentIndex() - { - var mesh_type = UM.ActiveTool.properties.getValue("MeshType"); - meshTypeSelection.currentIndex = -1; - for(var index=0; index < meshTypeSelection.model.count; index++) - { - if(meshTypeSelection.model.get(index).type == mesh_type) - { - meshTypeSelection.currentIndex = index; - return; - } - } - meshTypeSelection.currentIndex = 0; - } + id: overhangMeshButton + text: catalog.i18nc("@label", "Modify settings for overlaps") + iconSource: UM.Theme.getIcon("pos_modify_overlaps"); + property bool needBorder: true + checkable:true + onClicked: setMeshType(infillMeshType) + style: UM.Theme.styles.tool_button; + z: 2 } - Connections + Button { - target: Cura.MachineManager - onGlobalContainerChanged: - { - meshTypeSelection.model.clear(); - meshTypeSelection.populateModel(); - } - } - - Connections - { - target: UM.Selection - onSelectionChanged: meshTypeSelection.updateCurrentIndex() + id: antiOverhangMeshButton + text: catalog.i18nc("@label", "Don't support overlaps") + iconSource: UM.Theme.getIcon("pos_modify_dont_support_overlap"); + property bool needBorder: true + checkable: true + onClicked: setMeshType(antiOverhangMeshType) + style: UM.Theme.styles.tool_button; + z: 1 } } - Column + Label + { + id: meshTypeLabel + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + height: UM.Theme.getSize("setting").height + verticalAlignment: Text.AlignVCenter + } + + CheckBox + { + id: infillOnlyCheckbox + + text: catalog.i18nc("@action:checkbox", "Infill only"); + + style: UM.Theme.styles.checkbox; + + visible: currentMeshType === infillMeshType || currentMeshType === cuttingMeshType + onClicked: setOverhangsMeshType() + + Binding + { + target: infillOnlyCheckbox + property: "checked" + value: currentMeshType === infillMeshType + } + } + + Column // Settings Dialog { // This is to ensure that the panel is first increasing in size up to 200 and then shows a scrollbar. // It kinda looks ugly otherwise (big panel, no content on it) id: currentSettings property int maximumHeight: 200 * screenScaleFactor height: Math.min(contents.count * (UM.Theme.getSize("section").height + UM.Theme.getSize("default_lining").height), maximumHeight) - visible: meshTypeSelection.model.get(meshTypeSelection.currentIndex).type != "anti_overhang_mesh" + visible: currentMeshType != "anti_overhang_mesh" ScrollView { @@ -159,26 +179,26 @@ Item { model: UM.SettingDefinitionsModel { - id: addedSettingsModel; + id: addedSettingsModel containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: "" expanded: [ "*" ] filter: { if (printSequencePropertyProvider.properties.value == "one_at_a_time") { - return {"settable_per_meshgroup": true}; + return {"settable_per_meshgroup": true} } - return {"settable_per_mesh": true}; + return {"settable_per_mesh": true} } exclude: { - var excluded_settings = [ "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ]; + var excluded_settings = [ "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ] - if(meshTypeSelection.model.get(meshTypeSelection.currentIndex).type == "support_mesh") + if (currentMeshType == "support_mesh") { - excluded_settings = excluded_settings.concat(base.all_categories_except_support); + excluded_settings = excluded_settings.concat(base.allCategoriesExceptSupport) } - return excluded_settings; + return excluded_settings } visibilityHandler: Cura.PerObjectSettingVisibilityHandler @@ -188,8 +208,9 @@ Item { // For some reason the model object is updated after removing him from the memory and // it happens only on Windows. For this reason, set the destroyed value manually. - Component.onDestruction: { - setDestroyed(true); + Component.onDestruction: + { + setDestroyed(true) } } @@ -213,7 +234,8 @@ Item { //causing nasty issues when selecting different options. So disable asynchronous loading of enum type completely. asynchronous: model.type != "enum" && model.type != "extruder" - onLoaded: { + onLoaded: + { settingLoader.item.showRevertButton = false settingLoader.item.showInheritButton = false settingLoader.item.showLinkedSettingIcon = false @@ -299,7 +321,7 @@ Item { target: inheritStackProvider onPropertiesChanged: { - provider.forcePropertiesChanged(); + provider.forcePropertiesChanged() } } @@ -312,22 +334,22 @@ Item { // so here we connect to the signal and update the those values. if (typeof UM.ActiveTool.properties.getValue("SelectedObjectId") !== "undefined") { - const selectedObjectId = UM.ActiveTool.properties.getValue("SelectedObjectId"); + const selectedObjectId = UM.ActiveTool.properties.getValue("SelectedObjectId") if (addedSettingsModel.visibilityHandler.selectedObjectId != selectedObjectId) { - addedSettingsModel.visibilityHandler.selectedObjectId = selectedObjectId; + addedSettingsModel.visibilityHandler.selectedObjectId = selectedObjectId } } if (typeof UM.ActiveTool.properties.getValue("ContainerID") !== "undefined") { - const containerId = UM.ActiveTool.properties.getValue("ContainerID"); + const containerId = UM.ActiveTool.properties.getValue("ContainerID") if (provider.containerStackId != containerId) { - provider.containerStackId = containerId; + provider.containerStackId = containerId } if (inheritStackProvider.containerStackId != containerId) { - inheritStackProvider.containerStackId = containerId; + inheritStackProvider.containerStackId = containerId } } } @@ -337,7 +359,7 @@ Item { } } - Button + Cura.SecondaryButton { id: customiseSettingsButton; height: UM.Theme.getSize("setting_control").height; @@ -345,33 +367,12 @@ Item { text: catalog.i18nc("@action:button", "Select settings"); - style: ButtonStyle - { - background: Rectangle - { - width: control.width; - height: control.height; - border.width: UM.Theme.getSize("default_lining").width; - border.color: control.pressed ? UM.Theme.getColor("action_button_active_border") : - control.hovered ? UM.Theme.getColor("action_button_hovered_border") : UM.Theme.getColor("action_button_border") - color: control.pressed ? UM.Theme.getColor("action_button_active") : - control.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") - } - label: Label - { - text: control.text; - color: UM.Theme.getColor("setting_control_text"); - font: UM.Theme.getFont("default") - anchors.centerIn: parent - } - } - onClicked: { settingPickDialog.visible = true; - if (meshTypeSelection.model.get(meshTypeSelection.currentIndex).type == "support_mesh") + if (currentMeshType == "support_mesh") { - settingPickDialog.additional_excluded_settings = base.all_categories_except_support; + settingPickDialog.additional_excluded_settings = base.allCategoriesExceptSupport; } else { @@ -379,138 +380,12 @@ Item { } } } + } - - UM.Dialog { + SettingPickDialog + { id: settingPickDialog - - title: catalog.i18nc("@title:window", "Select Settings to Customize for this model") - width: screenScaleFactor * 360 - - property var additional_excluded_settings - - onVisibilityChanged: - { - // force updating the model to sync it with addedSettingsModel - if(visible) - { - // Set skip setting, it will prevent from resetting selected mesh_type - contents.model.visibilityHandler.addSkipResetSetting(meshTypeSelection.model.get(meshTypeSelection.currentIndex).type) - listview.model.forceUpdate() - - updateFilter() - } - } - - function updateFilter() - { - var new_filter = {}; - new_filter["settable_per_mesh"] = true; - // Don't filter on "settable_per_meshgroup" any more when `printSequencePropertyProvider.properties.value` - // is set to "one_at_a_time", because the current backend architecture isn't ready for that. - - if(filterInput.text != "") - { - new_filter["i18n_label"] = "*" + filterInput.text; - } - - listview.model.filter = new_filter; - } - - TextField { - id: filterInput - - anchors { - top: parent.top - left: parent.left - right: toggleShowAll.left - rightMargin: UM.Theme.getSize("default_margin").width - } - - placeholderText: catalog.i18nc("@label:textbox", "Filter..."); - - onTextChanged: settingPickDialog.updateFilter() - } - - CheckBox - { - id: toggleShowAll - - anchors { - top: parent.top - right: parent.right - } - - text: catalog.i18nc("@label:checkbox", "Show all") - checked: listview.model.showAll - onClicked: - { - listview.model.showAll = checked; - } - } - - ScrollView - { - id: scrollView - - anchors - { - top: filterInput.bottom; - left: parent.left; - right: parent.right; - bottom: parent.bottom; - } - ListView - { - id:listview - model: UM.SettingDefinitionsModel - { - id: definitionsModel; - containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: "" - visibilityHandler: UM.SettingPreferenceVisibilityHandler {} - expanded: [ "*" ] - exclude: - { - var excluded_settings = [ "machine_settings", "command_line_settings", "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ]; - excluded_settings = excluded_settings.concat(settingPickDialog.additional_excluded_settings); - return excluded_settings; - } - } - delegate:Loader - { - id: loader - - width: parent.width - height: model.type != undefined ? UM.Theme.getSize("section").height : 0; - - property var definition: model - property var settingDefinitionsModel: definitionsModel - - asynchronous: true - source: - { - switch(model.type) - { - case "category": - return "PerObjectCategory.qml" - default: - return "PerObjectItem.qml" - } - } - } - Component.onCompleted: settingPickDialog.updateFilter() - } - } - - rightButtons: [ - Button { - text: catalog.i18nc("@action:button", "Close"); - onClicked: { - settingPickDialog.visible = false; - } - } - ] } UM.SettingPropertyProvider @@ -533,25 +408,25 @@ Item { storeIndex: 0 } - SystemPalette { id: palette; } + SystemPalette { id: palette } Component { - id: settingTextField; + id: settingTextField Cura.SettingTextField { } } Component { - id: settingComboBox; + id: settingComboBox Cura.SettingComboBox { } } Component { - id: settingExtruder; + id: settingExtruder Cura.SettingExtruder { } } @@ -565,22 +440,23 @@ Item { Component { - id: settingCheckBox; + id: settingCheckBox Cura.SettingCheckBox { } } Component { - id: settingCategory; + id: settingCategory Cura.SettingCategory { } } Component { - id: settingUnknown; + id: settingUnknown Cura.SettingUnknown { } } + } diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py b/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py index baa700165c..b2eb925a6d 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsTool.py @@ -1,6 +1,6 @@ # Copyright (c) 2016 Ultimaker B.V. # Uranium is released under the terms of the LGPLv3 or higher. - +from UM.Logger import Logger from UM.Tool import Tool from UM.Scene.Selection import Selection from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator @@ -20,15 +20,11 @@ class PerObjectSettingsTool(Tool): self.setExposedProperties("SelectedObjectId", "ContainerID", "SelectedActiveExtruder", "MeshType") - self._advanced_mode = False self._multi_extrusion = False self._single_model_selected = False Selection.selectionChanged.connect(self.propertyChanged) - Application.getInstance().getPreferences().preferenceChanged.connect(self._onPreferenceChanged) - self._onPreferenceChanged("cura/active_mode") - Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) self._onGlobalContainerChanged() Selection.selectionChanged.connect(self._updateEnabled) @@ -70,8 +66,16 @@ class PerObjectSettingsTool(Tool): selected_object.addDecorator(SettingOverrideDecorator()) selected_object.callDecoration("setActiveExtruder", extruder_stack_id) - def setMeshType(self, mesh_type): + ## Returns True when the mesh_type was changed, False when current mesh_type == mesh_type + def setMeshType(self, mesh_type: str) -> bool: + if self.getMeshType() == mesh_type: + return False + selected_object = Selection.getSelectedObject(0) + if selected_object is None: + Logger.log("w", "Tried setting the mesh type of the selected object, but no object was selected") + return False + stack = selected_object.callDecoration("getStack") #Don't try to get the active extruder since it may be None anyway. if not stack: selected_object.addDecorator(SettingOverrideDecorator()) @@ -90,6 +94,9 @@ class PerObjectSettingsTool(Tool): new_instance.resetState() # Ensure that the state is not seen as a user state. settings.addInstance(new_instance) + self.propertyChanged.emit() + return True + def getMeshType(self): selected_object = Selection.getSelectedObject(0) stack = selected_object.callDecoration("getStack") #Don't try to get the active extruder since it may be None anyway. @@ -103,11 +110,6 @@ class PerObjectSettingsTool(Tool): return "" - def _onPreferenceChanged(self, preference): - if preference == "cura/active_mode": - self._advanced_mode = Application.getInstance().getPreferences().getValue(preference) == 1 - self._updateEnabled() - def _onGlobalContainerChanged(self): global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack: @@ -140,4 +142,4 @@ class PerObjectSettingsTool(Tool): self._single_model_selected = False # Group is selected, so tool needs to be disabled else: self._single_model_selected = True - Application.getInstance().getController().toolEnabledChanged.emit(self._plugin_id, self._advanced_mode and self._single_model_selected) + Application.getInstance().getController().toolEnabledChanged.emit(self._plugin_id, self._single_model_selected) diff --git a/plugins/PerObjectSettingsTool/SettingPickDialog.qml b/plugins/PerObjectSettingsTool/SettingPickDialog.qml new file mode 100644 index 0000000000..92e22f26bc --- /dev/null +++ b/plugins/PerObjectSettingsTool/SettingPickDialog.qml @@ -0,0 +1,139 @@ +import QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Controls.Styles 1.2 + +import UM 1.2 as UM +import Cura 1.0 as Cura +import ".." + +UM.Dialog + { + id: settingPickDialog + + title: catalog.i18nc("@title:window", "Select Settings to Customize for this model") + width: screenScaleFactor * 360 + + property var additional_excluded_settings + + onVisibilityChanged: + { + // force updating the model to sync it with addedSettingsModel + if (visible) + { + // Set skip setting, it will prevent from resetting selected mesh_type + contents.model.visibilityHandler.addSkipResetSetting(currentMeshType) + listview.model.forceUpdate() + + updateFilter() + } + } + + function updateFilter() + { + var new_filter = {} + new_filter["settable_per_mesh"] = true + // Don't filter on "settable_per_meshgroup" any more when `printSequencePropertyProvider.properties.value` + // is set to "one_at_a_time", because the current backend architecture isn't ready for that. + + if (filterInput.text != "") + { + new_filter["i18n_label"] = "*" + filterInput.text + } + + listview.model.filter = new_filter + } + + TextField { + id: filterInput + + anchors { + top: parent.top + left: parent.left + right: toggleShowAll.left + rightMargin: UM.Theme.getSize("default_margin").width + } + + placeholderText: catalog.i18nc("@label:textbox", "Filter...") + + onTextChanged: settingPickDialog.updateFilter() + } + + CheckBox + { + id: toggleShowAll + + anchors { + top: parent.top + right: parent.right + } + + text: catalog.i18nc("@label:checkbox", "Show all") + checked: listview.model.showAll + onClicked: + { + listview.model.showAll = checked + } + } + + ScrollView + { + id: scrollView + + anchors + { + top: filterInput.bottom + left: parent.left + right: parent.right + bottom: parent.bottom + } + ListView + { + id:listview + model: UM.SettingDefinitionsModel + { + id: definitionsModel + containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: "" + visibilityHandler: UM.SettingPreferenceVisibilityHandler {} + expanded: [ "*" ] + exclude: + { + var excluded_settings = [ "machine_settings", "command_line_settings", "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ] + excluded_settings = excluded_settings.concat(settingPickDialog.additional_excluded_settings) + return excluded_settings + } + } + delegate:Loader + { + id: loader + + width: parent.width + height: model.type != undefined ? UM.Theme.getSize("section").height : 0 + + property var definition: model + property var settingDefinitionsModel: definitionsModel + + asynchronous: true + source: + { + switch(model.type) + { + case "category": + return "PerObjectCategory.qml" + default: + return "PerObjectItem.qml" + } + } + } + Component.onCompleted: settingPickDialog.updateFilter() + } + } + + rightButtons: [ + Button { + text: catalog.i18nc("@action:button", "Close") + onClicked: { + settingPickDialog.visible = false + } + } + ] + } \ No newline at end of file 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/PerObjectSettingsTool/tool_icon.svg b/plugins/PerObjectSettingsTool/tool_icon.svg index 4b15eb453f..41e49cae07 100644 --- a/plugins/PerObjectSettingsTool/tool_icon.svg +++ b/plugins/PerObjectSettingsTool/tool_icon.svg @@ -1,3 +1,22 @@ - - - + + + + per_model_settings + Created with Sketch. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.py b/plugins/PostProcessingPlugin/PostProcessingPlugin.py index 123733b863..376ab291c4 100644 --- a/plugins/PostProcessingPlugin/PostProcessingPlugin.py +++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.py @@ -219,6 +219,7 @@ class PostProcessingPlugin(QObject, Extension): self._script_list.clear() if not new_stack.getMetaDataEntry("post_processing_scripts"): # Missing or empty. self.scriptListChanged.emit() # Even emit this if it didn't change. We want it to write the empty list to the stack's metadata. + self.setSelectedScriptIndex(-1) return self._script_list.clear() 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/ChangeAtZ.py b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py index e152bdf627..cdbb4a79ef 100644 --- a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py +++ b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py @@ -330,7 +330,7 @@ class ChangeAtZ(Script): "extruderOne": self.getSettingValueByKey("i2_extruderOne"), "extruderTwo": self.getSettingValueByKey("i4_extruderTwo"), "fanSpeed": self.getSettingValueByKey("j2_fanSpeed")} - old = {"speed": -1, "flowrate": -1, "flowrateOne": -1, "flowrateTwo": -1, "platformTemp": -1, "extruderOne": -1, + old = {"speed": -1, "flowrate": 100, "flowrateOne": -1, "flowrateTwo": -1, "platformTemp": -1, "extruderOne": -1, "extruderTwo": -1, "bedTemp": -1, "fanSpeed": -1, "state": -1} twLayers = self.getSettingValueByKey("d_twLayers") if self.getSettingValueByKey("c_behavior") == "single_layer": @@ -367,6 +367,8 @@ class ChangeAtZ(Script): modified_gcode = "" lines = active_layer.split("\n") for line in lines: + if line.strip() == "": + continue if ";Generated with Cura_SteamEngine" in line: TWinstances += 1 modified_gcode += ";ChangeAtZ instances: %d\n" % TWinstances @@ -410,6 +412,8 @@ class ChangeAtZ(Script): tmp_extruder = self.getValue(line, "T", None) if tmp_extruder == None: #check if extruder is specified old["flowrate"] = self.getValue(line, "S", old["flowrate"]) + if old["flowrate"] == -1: + old["flowrate"] = 100.0 elif tmp_extruder == 0: #first extruder old["flowrateOne"] = self.getValue(line, "S", old["flowrateOne"]) elif tmp_extruder == 1: #second extruder @@ -481,9 +485,9 @@ class ChangeAtZ(Script): state = 2 done_layers = 0 if targetL_i > -100000: - modified_gcode += ";ChangeAtZ V%s: reset below Layer %d\n" % (self.version,targetL_i) + modified_gcode += ";ChangeAtZ V%s: reset below Layer %d\n" % (self.version, targetL_i) else: - modified_gcode += ";ChangeAtZ V%s: reset below %1.2f mm\n" % (self.version,targetZ) + modified_gcode += ";ChangeAtZ V%s: reset below %1.2f mm\n" % (self.version, targetZ) if IsUM2 and oldValueUnknown: #executes on UM2 with Ultigcode and machine setting modified_gcode += "M606 S%d;recalls saved settings\n" % (TWinstances-1) else: #executes on RepRap, UM2 with Ultigcode and Cura setting diff --git a/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py b/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py index 3ab20b8297..001beecd3b 100644 --- a/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py +++ b/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py @@ -1,10 +1,13 @@ # Cura PostProcessingPlugin # Author: Amanda de Castilho # Date: August 28, 2018 +# Modified: November 16, 2018 by Joshua Pope-Lewis -# Description: This plugin inserts a line at the start of each layer, -# M117 - displays the filename and layer height to the LCD -# Alternatively, user can override the filename to display alt text + layer height +# Description: This plugin shows custom messages about your print on the Status bar... +# Please look at the 3 options +# - Scolling (SCROLL_LONG_FILENAMES) if enabled in Marlin and you arent printing a small item select this option. +# - Name: By default it will use the name generated by Cura (EG: TT_Test_Cube) - Type a custom name in here +# - Max Layer: Enabling this will show how many layers are in the entire print (EG: Layer 1 of 265!) from ..Script import Script from UM.Application import Application @@ -15,35 +18,72 @@ class DisplayFilenameAndLayerOnLCD(Script): def getSettingDataString(self): return """{ - "name": "Display filename and layer on LCD", + "name": "Display Filename And Layer On LCD", "key": "DisplayFilenameAndLayerOnLCD", "metadata": {}, "version": 2, "settings": { + "scroll": + { + "label": "Scroll enabled/Small layers?", + "description": "If SCROLL_LONG_FILENAMES is enabled select this setting however, if the model is small disable this setting!", + "type": "bool", + "default_value": false + }, "name": { - "label": "text to display:", + "label": "Text to display:", "description": "By default the current filename will be displayed on the LCD. Enter text here to override the filename and display something else.", "type": "str", "default_value": "" + }, + "startNum": + { + "label": "Initial layer number:", + "description": "Choose which number you prefer for the initial layer, 0 or 1", + "type": "int", + "default_value": 0, + "minimum_value": 0, + "maximum_value": 1 + }, + "maxlayer": + { + "label": "Display max layer?:", + "description": "Display how many layers are in the entire print on status bar?", + "type": "bool", + "default_value": true } } }""" def execute(self, data): + max_layer = 0 if self.getSettingValueByKey("name") != "": name = self.getSettingValueByKey("name") else: - name = Application.getInstance().getPrintInformation().jobName - lcd_text = "M117 " + name + " layer " - i = 0 + name = Application.getInstance().getPrintInformation().jobName + if not self.getSettingValueByKey("scroll"): + if self.getSettingValueByKey("maxlayer"): + lcd_text = "M117 Layer " + else: + lcd_text = "M117 Printing Layer " + else: + lcd_text = "M117 Printing " + name + " - Layer " + i = self.getSettingValueByKey("startNum") for layer in data: - display_text = lcd_text + str(i) + display_text = lcd_text + str(i) + " " + name layer_index = data.index(layer) lines = layer.split("\n") for line in lines: + if line.startswith(";LAYER_COUNT:"): + max_layer = line + max_layer = max_layer.split(":")[1] if line.startswith(";LAYER:"): + if self.getSettingValueByKey("maxlayer"): + display_text = display_text + " of " + max_layer + else: + display_text = display_text + "!" line_index = lines.index(line) lines.insert(line_index + 1, display_text) i += 1 diff --git a/plugins/PostProcessingPlugin/scripts/DisplayRemainingTimeOnLCD.py b/plugins/PostProcessingPlugin/scripts/DisplayRemainingTimeOnLCD.py new file mode 100644 index 0000000000..9152ab65f9 --- /dev/null +++ b/plugins/PostProcessingPlugin/scripts/DisplayRemainingTimeOnLCD.py @@ -0,0 +1,94 @@ +# Cura PostProcessingPlugin +# Author: Mathias Lyngklip Kjeldgaard +# Date: July 31, 2019 +# Modified: --- + +# Description: This plugin displayes the remaining time on the LCD of the printer +# using the estimated print-time generated by Cura. + + + + +from ..Script import Script + +import re +import datetime + + +class DisplayRemainingTimeOnLCD(Script): + + def __init__(self): + super().__init__() + + + def getSettingDataString(self): + return """{ + "name":"Disaplay Remaining Time on LCD", + "key":"DisplayRemainingTimeOnLCD", + "metadata": {}, + "version": 2, + "settings": + { + "TurnOn": + { + "label": "Enable", + "description": "When enabled, It will write Time Left: HHMMSS on the display", + "type": "bool", + "default_value": false + } + } + }""" + + def execute(self, data): + if self.getSettingValueByKey("TurnOn"): + total_time = 0 + total_time_string = "" + for layer in data: + layer_index = data.index(layer) + lines = layer.split("\n") + for line in lines: + if line.startswith(";TIME:"): + # At this point, we have found a line in the GCODE with ";TIME:" + # which is the indication of total_time. Looks like: ";TIME:1337", where + # 1337 is the total print time in seconds. + line_index = lines.index(line) # We take a hold of that line + split_string = re.split(":", line) # Then we split it, so we can get the number + + string_with_numbers = "{}".format(split_string[1]) # Here we insert that number from the + # list into a string. + total_time = int(string_with_numbers) # Only to contert it to a int. + + m, s = divmod(total_time, 60) # Math to calculate + h, m = divmod(m, 60) # hours, minutes and seconds. + total_time_string = "{:d}h{:02d}m{:02d}s".format(h, m, s) # Now we put it into the string + lines[line_index] = "M117 Time Left {}".format(total_time_string) # And print that string instead of the original one + + + + + elif line.startswith(";TIME_ELAPSED:"): + + # As we didnt find the total time (";TIME:"), we have found a elapsed time mark + # This time represents the time the printer have printed. So with some math; + # totalTime - printTime = RemainingTime. + line_index = lines.index(line) # We get a hold of the line + list_split = re.split(":", line) # Again, we split at ":" so we can get the number + string_with_numbers = "{}".format(list_split[1]) # Then we put that number from the list, into a string + + current_time = float(string_with_numbers) # This time we convert to a float, as the line looks something like: + # ;TIME_ELAPSED:1234.6789 + # which is total time in seconds + + time_left = total_time - current_time # Here we calculate remaining time + m1, s1 = divmod(time_left, 60) # And some math to get the total time in seconds into + h1, m1 = divmod(m1, 60) # the right format. (HH,MM,SS) + current_time_string = "{:d}h{:2d}m{:2d}s".format(int(h1), int(m1), int(s1)) # Here we create the string holding our time + lines[line_index] = "M117 Time Left {}".format(current_time_string) # And now insert that into the GCODE + + + # Here we are OUT of the second for-loop + # Which means we have found and replaces all the occurences. + # Which also means we are ready to join the lines for that section of the GCODE file. + final_lines = "\n".join(lines) + data[layer_index] = final_lines + return data diff --git a/plugins/PostProcessingPlugin/scripts/FilamentChange.py b/plugins/PostProcessingPlugin/scripts/FilamentChange.py index 7bece3d7e0..943ca30f2e 100644 --- a/plugins/PostProcessingPlugin/scripts/FilamentChange.py +++ b/plugins/PostProcessingPlugin/scripts/FilamentChange.py @@ -92,8 +92,11 @@ class FilamentChange(Script): layer_targets = layer_nums.split(",") if len(layer_targets) > 0: for layer_num in layer_targets: - layer_num = int(layer_num.strip()) + 1 - if layer_num <= len(data): + try: + layer_num = int(layer_num.strip()) + 1 #Needs +1 because the 1st layer is reserved for start g-code. + except ValueError: #Layer number is not an integer. + continue + if 0 < layer_num < len(data): data[layer_num] = color_change + data[layer_num] return data \ No newline at end of file diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py index 8b50a88b7f..499214a0e9 100644 --- a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py +++ b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py @@ -1,15 +1,18 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from ..Script import Script from UM.Application import Application #To get the current printer's settings. +from UM.Logger import Logger + +from typing import List, Tuple class PauseAtHeight(Script): - def __init__(self): + def __init__(self) -> None: super().__init__() - def getSettingDataString(self): + def getSettingDataString(self) -> str: return """{ "name": "Pause at height", "key": "PauseAtHeight", @@ -105,19 +108,24 @@ class PauseAtHeight(Script): "standby_temperature": { "label": "Standby Temperature", - "description": "Change the temperature during the pause", + "description": "Change the temperature during the pause.", "unit": "°C", "type": "int", "default_value": 0 + }, + "display_text": + { + "label": "Display Text", + "description": "Text that should appear on the display while paused. If left empty, there will not be any message.", + "type": "str", + "default_value": "" } } }""" - def getNextXY(self, layer: str): - """ - Get the X and Y values for a layer (will be used to get X and Y of - the layer after the pause - """ + ## Get the X and Y values for a layer (will be used to get X and Y of the + # layer after the pause). + def getNextXY(self, layer: str) -> Tuple[float, float]: lines = layer.split("\n") for line in lines: if self.getValue(line, "X") is not None and self.getValue(line, "Y") is not None: @@ -126,8 +134,10 @@ class PauseAtHeight(Script): return x, y return 0, 0 - def execute(self, data: list): - """data is a list. Each index contains a layer""" + ## Inserts the pause commands. + # \param data: List of layers. + # \return New list of layers. + def execute(self, data: List[str]) -> List[str]: pause_at = self.getSettingValueByKey("pause_at") pause_height = self.getSettingValueByKey("pause_height") pause_layer = self.getSettingValueByKey("pause_layer") @@ -143,6 +153,7 @@ class PauseAtHeight(Script): firmware_retract = Application.getInstance().getGlobalContainerStack().getProperty("machine_firmware_retract", "value") control_temperatures = Application.getInstance().getGlobalContainerStack().getProperty("machine_nozzle_temp_enabled", "value") initial_layer_height = Application.getInstance().getGlobalContainerStack().getProperty("layer_height_0", "value") + display_text = self.getSettingValueByKey("display_text") is_griffin = False @@ -151,6 +162,9 @@ 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. target_temperature = {} #Tracks the current target temperature for each extruder. @@ -184,6 +198,10 @@ class PauseAtHeight(Script): if not layers_started: continue + # Look for the feed rate of an extrusion instruction + if self.getValue(line, "F") is not None and self.getValue(line, "E") is not None: + current_extrusion_f = self.getValue(line, "F") + # If a Z instruction is in the line, read the current Z if self.getValue(line, "Z") is not None: current_z = self.getValue(line, "Z") @@ -247,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 @@ -264,7 +282,7 @@ class PauseAtHeight(Script): if not is_griffin: # Retraction - prepend_gcode += self.putValue(M = 83) + "\n" + prepend_gcode += self.putValue(M = 83) + " ; switch to relative E values for any needed retraction\n" if retraction_amount != 0: if firmware_retract: #Can't set the distance directly to what the user wants. We have to choose ourselves. retraction_count = 1 if control_temperatures else 3 #Retract more if we don't control the temperature. @@ -274,25 +292,28 @@ class PauseAtHeight(Script): prepend_gcode += self.putValue(G = 1, E = -retraction_amount, F = retraction_speed * 60) + "\n" # Move the head away - prepend_gcode += self.putValue(G = 1, Z = current_z + 1, F = 300) + "\n" + prepend_gcode += self.putValue(G = 1, Z = current_z + 1, F = 300) + " ; move up a millimeter to get out of the way\n" # This line should be ok prepend_gcode += self.putValue(G = 1, X = park_x, Y = park_y, F = 9000) + "\n" if current_z < 15: - prepend_gcode += self.putValue(G = 1, Z = 15, F = 300) + "\n" + prepend_gcode += self.putValue(G = 1, Z = 15, F = 300) + " ; too close to bed--move to at least 15mm\n" if control_temperatures: # Set extruder standby temperature - prepend_gcode += self.putValue(M = 104, S = standby_temperature) + "; standby temperature\n" + prepend_gcode += self.putValue(M = 104, S = standby_temperature) + " ; standby temperature\n" + + if display_text: + prepend_gcode += "M117 " + display_text + "\n" # Wait till the user continues printing - prepend_gcode += self.putValue(M = 0) + ";Do the actual pause\n" + prepend_gcode += self.putValue(M = 0) + " ; Do the actual pause\n" if not is_griffin: if control_temperatures: # Set extruder resume temperature - prepend_gcode += self.putValue(M = 109, S = int(target_temperature.get(current_t, 0))) + "; resume temperature\n" + prepend_gcode += self.putValue(M = 109, S = int(target_temperature.get(current_t, 0))) + " ; resume temperature\n" # Push the filament back, if retraction_amount != 0: @@ -308,8 +329,10 @@ class PauseAtHeight(Script): prepend_gcode += self.putValue(G = 1, E = -retraction_amount, F = retraction_speed * 60) + "\n" # Move the head back - prepend_gcode += self.putValue(G = 1, Z = current_z + 1, F = 300) + "\n" + if current_z < 15: + prepend_gcode += self.putValue(G = 1, Z = current_z + 1, F = 300) + "\n" prepend_gcode += self.putValue(G = 1, X = x, Y = y, F = 9000) + "\n" + prepend_gcode += self.putValue(G = 1, Z = current_z, F = 300) + " ; move back down to resume height\n" if retraction_amount != 0: if firmware_retract: #Can't set the distance directly to what the user wants. We have to choose ourselves. retraction_count = 1 if control_temperatures else 3 #Retract more if we don't control the temperature. @@ -317,8 +340,13 @@ class PauseAtHeight(Script): prepend_gcode += self.putValue(G = 11) + "\n" else: prepend_gcode += self.putValue(G = 1, E = retraction_amount, F = retraction_speed * 60) + "\n" - prepend_gcode += self.putValue(G = 1, F = 9000) + "\n" - prepend_gcode += self.putValue(M = 82) + "\n" + + if current_extrusion_f != 0: + prepend_gcode += self.putValue(G = 1, F = current_extrusion_f) + " ; restore extrusion feedrate\n" + else: + Logger.log("w", "No previous feedrate found in gcode, feedrate for next layer(s) might be incorrect") + + prepend_gcode += self.putValue(M = 82) + " ; switch back to absolute E values\n" # reset extrude value to pre pause value prepend_gcode += self.putValue(G = 92, E = current_e) + "\n" diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeightforRepetier.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeightforRepetier.py index f6c93d9ae6..0353574289 100644 --- a/plugins/PostProcessingPlugin/scripts/PauseAtHeightforRepetier.py +++ b/plugins/PostProcessingPlugin/scripts/PauseAtHeightforRepetier.py @@ -1,3 +1,4 @@ +from UM.Logger import Logger from ..Script import Script class PauseAtHeightforRepetier(Script): def __init__(self): @@ -73,6 +74,7 @@ class PauseAtHeightforRepetier(Script): def execute(self, data): x = 0. y = 0. + current_extrusion_f = 0 current_z = 0. pause_z = self.getSettingValueByKey("pause_height") retraction_amount = self.getSettingValueByKey("retraction_amount") @@ -94,9 +96,11 @@ class PauseAtHeightforRepetier(Script): if self.getValue(line, 'G') == 1 or self.getValue(line, 'G') == 0: current_z = self.getValue(line, 'Z') + if self.getValue(line, 'F') is not None and self.getValue(line, 'E') is not None: + current_extrusion_f = self.getValue(line, 'F', current_extrusion_f) x = self.getValue(line, 'X', x) y = self.getValue(line, 'Y', y) - if current_z != None: + if current_z is not None: if current_z >= pause_z: index = data.index(layer) @@ -150,7 +154,12 @@ class PauseAtHeightforRepetier(Script): prepend_gcode +="G1 X%f Y%f F9000\n" % (x, y) if retraction_amount != 0: prepend_gcode +="G1 E%f F6000\n" % (retraction_amount) - prepend_gcode +="G1 F9000\n" + + if current_extrusion_f != 0: + prepend_gcode += self.putValue(G=1, F=current_extrusion_f) + " ; restore extrusion feedrate\n" + else: + Logger.log("w", "No previous feedrate found in gcode, feedrate for next layer(s) might be incorrect") + prepend_gcode +="M82\n" # reset extrude value to pre pause value diff --git a/plugins/PostProcessingPlugin/scripts/RetractContinue.py b/plugins/PostProcessingPlugin/scripts/RetractContinue.py new file mode 100644 index 0000000000..b0af9cd95e --- /dev/null +++ b/plugins/PostProcessingPlugin/scripts/RetractContinue.py @@ -0,0 +1,75 @@ +# Copyright (c) 2019 Ultimaker B.V. +# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher. + +import math + +from ..Script import Script + +## Continues retracting during all travel moves. +class RetractContinue(Script): + def getSettingDataString(self): + return """{ + "name": "Retract Continue", + "key": "RetractContinue", + "metadata": {}, + "version": 2, + "settings": + { + "extra_retraction_speed": + { + "label": "Extra Retraction Ratio", + "description": "How much does it retract during the travel move, by ratio of the travel length.", + "type": "float", + "default_value": 0.05 + } + } + }""" + + def execute(self, data): + current_e = 0 + current_x = 0 + current_y = 0 + extra_retraction_speed = self.getSettingValueByKey("extra_retraction_speed") + + for layer_number, layer in enumerate(data): + lines = layer.split("\n") + for line_number, line in enumerate(lines): + if self.getValue(line, "G") in {0, 1}: # Track X,Y location. + current_x = self.getValue(line, "X", current_x) + current_y = self.getValue(line, "Y", current_y) + if self.getValue(line, "G") == 1: + if self.getValue(line, "E"): + new_e = self.getValue(line, "E") + if new_e >= current_e: # Not a retraction. + continue + # A retracted travel move may consist of multiple commands, due to combing. + # This continues retracting over all of these moves and only unretracts at the end. + delta_line = 1 + dx = current_x # Track the difference in X for this move only to compute the length of the travel. + dy = current_y + while line_number + delta_line < len(lines) and self.getValue(lines[line_number + delta_line], "G") != 1: + travel_move = lines[line_number + delta_line] + if self.getValue(travel_move, "G") != 0: + delta_line += 1 + continue + travel_x = self.getValue(travel_move, "X", dx) + travel_y = self.getValue(travel_move, "Y", dy) + f = self.getValue(travel_move, "F", "no f") + length = math.sqrt((travel_x - dx) * (travel_x - dx) + (travel_y - dy) * (travel_y - dy)) # Length of the travel move. + new_e -= length * extra_retraction_speed # New retraction is by ratio of this travel move. + if f == "no f": + new_travel_move = "G1 X{travel_x} Y{travel_y} E{new_e}".format(travel_x = travel_x, travel_y = travel_y, new_e = new_e) + else: + new_travel_move = "G1 F{f} X{travel_x} Y{travel_y} E{new_e}".format(f = f, travel_x = travel_x, travel_y = travel_y, new_e = new_e) + lines[line_number + delta_line] = new_travel_move + + delta_line += 1 + dx = travel_x + dy = travel_y + + current_e = new_e + + new_layer = "\n".join(lines) + data[layer_number] = new_layer + + return data \ No newline at end of file diff --git a/plugins/PostProcessingPlugin/scripts/Stretch.py b/plugins/PostProcessingPlugin/scripts/Stretch.py index 9757296041..20eef60ef2 100644 --- a/plugins/PostProcessingPlugin/scripts/Stretch.py +++ b/plugins/PostProcessingPlugin/scripts/Stretch.py @@ -128,9 +128,26 @@ class Stretcher(): onestep = GCodeStep(0, in_relative_movement) onestep.copyPosFrom(current) elif _getValue(line, "G") == 1: + last_x = current.step_x + last_y = current.step_y + last_z = current.step_z + last_e = current.step_e current.readStep(line) - onestep = GCodeStep(1, in_relative_movement) - onestep.copyPosFrom(current) + if (current.step_x == last_x and current.step_y == last_y and + current.step_z == last_z and current.step_e != last_e + ): + # It's an extruder only move. Preserve it rather than process it as an + # extruded move. Otherwise, the stretched output might contain slight + # motion in X and Y in addition to E. This can cause problems with + # firmwares that implement pressure advance. + onestep = GCodeStep(-1, in_relative_movement) + onestep.copyPosFrom(current) + # Rather than copy the original line, write a new one with consistent + # extruder coordinates + onestep.comment = "G1 F{} E{}".format(onestep.step_f, onestep.step_e) + else: + onestep = GCodeStep(1, in_relative_movement) + onestep.copyPosFrom(current) # end of relative movement elif _getValue(line, "G") == 90: @@ -145,6 +162,7 @@ class Stretcher(): current.readStep(line) onestep = GCodeStep(-1, in_relative_movement) onestep.copyPosFrom(current) + onestep.comment = line else: onestep = GCodeStep(-1, in_relative_movement) onestep.copyPosFrom(current) diff --git a/plugins/PostProcessingPlugin/scripts/TimeLapse.py b/plugins/PostProcessingPlugin/scripts/TimeLapse.py index 36d0f6a058..53e55a9454 100644 --- a/plugins/PostProcessingPlugin/scripts/TimeLapse.py +++ b/plugins/PostProcessingPlugin/scripts/TimeLapse.py @@ -77,10 +77,10 @@ class TimeLapse(Script): gcode_to_append = ";TimeLapse Begin\n" if park_print_head: - gcode_to_append += self.putValue(G = 1, F = feed_rate, X = x_park, Y = y_park) + ";Park print head\n" - gcode_to_append += self.putValue(M = 400) + ";Wait for moves to finish\n" - gcode_to_append += trigger_command + ";Snap Photo\n" - gcode_to_append += self.putValue(G = 4, P = pause_length) + ";Wait for camera\n" + gcode_to_append += self.putValue(G = 1, F = feed_rate, X = x_park, Y = y_park) + " ;Park print head\n" + gcode_to_append += self.putValue(M = 400) + " ;Wait for moves to finish\n" + gcode_to_append += trigger_command + " ;Snap Photo\n" + gcode_to_append += self.putValue(G = 4, P = pause_length) + " ;Wait for camera\n" gcode_to_append += ";TimeLapse End\n" for layer in data: # Check that a layer is being printed diff --git a/plugins/PrepareStage/__init__.py b/plugins/PrepareStage/__init__.py index f085d788f9..8e86ff303d 100644 --- a/plugins/PrepareStage/__init__.py +++ b/plugins/PrepareStage/__init__.py @@ -10,7 +10,7 @@ def getMetaData(): return { "stage": { "name": i18n_catalog.i18nc("@item:inmenu", "Prepare"), - "weight": 0 + "weight": 10 } } 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..1b8387644d 100644 --- a/plugins/PreviewStage/PreviewMain.qml +++ b/plugins/PreviewStage/PreviewMain.qml @@ -11,12 +11,30 @@ import Cura 1.0 as Cura Item { + + // Subtract the actionPanel from the safe area. This way the view won't draw interface elements under/over it + Item { + id: safeArea + visible: false + anchors.left: parent.left + anchors.right: actionPanelWidget.left + anchors.top: parent.top + anchors.bottom: actionPanelWidget.top + } + Loader { id: previewMain anchors.fill: parent source: UM.Controller.activeView != null && UM.Controller.activeView.mainComponent != null ? UM.Controller.activeView.mainComponent : "" + + Binding + { + target: previewMain.item + property: "safeArea" + value:safeArea + } } Cura.ActionPanelWidget diff --git a/plugins/PreviewStage/__init__.py b/plugins/PreviewStage/__init__.py index 424f573e4a..cb32f583ee 100644 --- a/plugins/PreviewStage/__init__.py +++ b/plugins/PreviewStage/__init__.py @@ -11,7 +11,7 @@ def getMetaData(): return { "stage": { "name": i18n_catalog.i18nc("@item:inmenu", "Preview"), - "weight": 1 + "weight": 20 } } 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/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..15b0fdbe12 100644 --- a/plugins/SimulationView/LayerSlider.qml +++ b/plugins/SimulationView/LayerSlider.qml @@ -176,6 +176,11 @@ Item } } + onHeightChanged : { + // After a height change, the pixel-position of the lower handle is out of sync with the property value + setLowerValue(lowerValue) + } + // Upper handle Rectangle { @@ -333,7 +338,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) diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py index 3b2db2efac..3a7cb0d2fe 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 @@ -83,9 +83,13 @@ class SimulationView(CuraView): self._simulationview_composite_shader = None # type: Optional["ShaderProgram"] self._old_composite_shader = None # type: Optional["ShaderProgram"] + self._max_feedrate = sys.float_info.min + self._min_feedrate = sys.float_info.max + self._max_thickness = sys.float_info.min + self._min_thickness = sys.float_info.max + self._global_container_stack = None # type: Optional[ContainerStack] - self._proxy = SimulationViewProxy() - self._controller.getScene().getRoot().childrenChanged.connect(self._onSceneChanged) + self._proxy = None self._resetSettings() self._legend_items = None @@ -104,7 +108,6 @@ class SimulationView(CuraView): Application.getInstance().getPreferences().addPreference("layerview/show_skin", True) Application.getInstance().getPreferences().addPreference("layerview/show_infill", True) - Application.getInstance().getPreferences().preferenceChanged.connect(self._onPreferencesChanged) self._updateWithPreferences() self._solid_layers = int(Application.getInstance().getPreferences().getValue("view/top_layer_count")) @@ -180,8 +183,7 @@ class SimulationView(CuraView): def _onSceneChanged(self, node: "SceneNode") -> None: if node.getMeshData() is None: - self.resetLayerData() - + return self.setActivity(False) self.calculateMaxLayers() self.calculateMaxPathsOnLayer(self._current_layer_num) @@ -218,10 +220,10 @@ class SimulationView(CuraView): if theme is not None: self._ghost_shader.setUniformValue("u_color", Color(*theme.getColor("layerview_ghost").getRgb())) - for node in DepthFirstIterator(scene.getRoot()): # type: ignore + for node in DepthFirstIterator(scene.getRoot()): # We do not want to render ConvexHullNode as it conflicts with the bottom layers. # However, it is somewhat relevant when the node is selected, so do render it then. - if type(node) is ConvexHullNode and not Selection.isSelected(node.getWatchedNode()): + if type(node) is ConvexHullNode and not Selection.isSelected(cast(ConvexHullNode, node).getWatchedNode()): continue if not node.render(renderer): @@ -384,7 +386,7 @@ class SimulationView(CuraView): self._max_thickness = max(float(p.lineThicknesses.max()), self._max_thickness) try: self._min_thickness = min(float(p.lineThicknesses[numpy.nonzero(p.lineThicknesses)].min()), self._min_thickness) - except: + except ValueError: # Sometimes, when importing a GCode the line thicknesses are zero and so the minimum (avoiding # the zero) can't be calculated Logger.log("i", "Min thickness can't be calculated because all the values are zero") @@ -441,6 +443,8 @@ class SimulationView(CuraView): ## Hackish way to ensure the proxy is already created, which ensures that the layerview.qml is already created # as this caused some issues. def getProxy(self, engine, script_engine): + if self._proxy is None: + self._proxy = SimulationViewProxy(self) return self._proxy def endRendering(self) -> None: @@ -460,6 +464,13 @@ class SimulationView(CuraView): return True if event.type == Event.ViewActivateEvent: + # Start listening to changes. + Application.getInstance().getPreferences().preferenceChanged.connect(self._onPreferencesChanged) + self._controller.getScene().getRoot().childrenChanged.connect(self._onSceneChanged) + + self.calculateMaxLayers() + self.calculateMaxPathsOnLayer(self._current_layer_num) + # FIX: on Max OS X, somehow QOpenGLContext.currentContext() can become None during View switching. # This can happen when you do the following steps: # 1. Start Cura @@ -506,6 +517,8 @@ class SimulationView(CuraView): self._composite_pass.setCompositeShader(self._simulationview_composite_shader) elif event.type == Event.ViewDeactivateEvent: + self._controller.getScene().getRoot().childrenChanged.disconnect(self._onSceneChanged) + Application.getInstance().getPreferences().preferenceChanged.disconnect(self._onPreferencesChanged) self._wireprint_warning_message.hide() Application.getInstance().globalContainerStackChanged.disconnect(self._onGlobalStackChanged) if self._global_container_stack: @@ -572,14 +585,14 @@ class SimulationView(CuraView): self._current_layer_jumps = job.getResult().get("jumps") self._controller.getScene().sceneChanged.emit(self._controller.getScene().getRoot()) - self._top_layers_job = None # type: Optional["_CreateTopLayersJob"] + self._top_layers_job = None def _updateWithPreferences(self) -> None: self._solid_layers = int(Application.getInstance().getPreferences().getValue("view/top_layer_count")) self._only_show_top_layers = bool(Application.getInstance().getPreferences().getValue("view/only_show_top_layers")) self._compatibility_mode = self._evaluateCompatibilityMode() - self.setSimulationViewType(int(float(Application.getInstance().getPreferences().getValue("layerview/layer_view_type")))); + self.setSimulationViewType(int(float(Application.getInstance().getPreferences().getValue("layerview/layer_view_type")))) for extruder_nr, extruder_opacity in enumerate(Application.getInstance().getPreferences().getValue("layerview/extruder_opacities").split("|")): try: diff --git a/plugins/SimulationView/SimulationViewMainComponent.qml b/plugins/SimulationView/SimulationViewMainComponent.qml index 58901652d3..cd7d108370 100644 --- a/plugins/SimulationView/SimulationViewMainComponent.qml +++ b/plugins/SimulationView/SimulationViewMainComponent.qml @@ -11,9 +11,18 @@ 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 var layerSliderSafeYMax: safeArea.y + safeArea.height + visible: UM.SimulationView.layerActivity && CuraApplication.platformActivity + // A slider which lets users trace a single layer (XY movements) PathSlider { id: pathSlider @@ -58,7 +67,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 +97,7 @@ Item onClicked: { - if(is_simulation_playing) + if(isSimulationPlaying) { pauseSimulation() } @@ -102,7 +111,7 @@ Item { UM.SimulationView.setSimulationRunning(false) simulationTimer.stop() - is_simulation_playing = false + isSimulationPlaying = false layerSlider.manuallyChanged = true pathSlider.manuallyChanged = true } @@ -131,7 +140,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 +175,28 @@ 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 id: layerSlider width: UM.Theme.getSize("slider_handle").width - height: UM.Theme.getSize("slider_layerview_size").height + height: preferredHeight + heightMargin * 2 < layerSliderSafeYMax ? preferredHeight : layerSliderSafeYMax - heightMargin * 2 anchors { right: parent.right verticalCenter: parent.verticalCenter + verticalCenterOffset: -(parent.height - layerSliderSafeYMax) / 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/SimulationViewProxy.py b/plugins/SimulationView/SimulationViewProxy.py index a84b151983..58a004cc31 100644 --- a/plugins/SimulationView/SimulationViewProxy.py +++ b/plugins/SimulationView/SimulationViewProxy.py @@ -1,21 +1,24 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import TYPE_CHECKING from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty from UM.FlameProfiler import pyqtSlot from UM.Application import Application -import SimulationView +if TYPE_CHECKING: + from .SimulationView import SimulationView class SimulationViewProxy(QObject): - def __init__(self, parent=None): + def __init__(self, simulation_view: "SimulationView", parent=None): super().__init__(parent) + self._simulation_view = simulation_view self._current_layer = 0 self._controller = Application.getInstance().getController() self._controller.activeViewChanged.connect(self._onActiveViewChanged) - self._onActiveViewChanged() self.is_simulationView_selected = False + self._onActiveViewChanged() currentLayerChanged = pyqtSignal() currentPathChanged = pyqtSignal() @@ -28,182 +31,112 @@ class SimulationViewProxy(QObject): @pyqtProperty(bool, notify=activityChanged) def layerActivity(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.getActivity() - return False + return self._simulation_view.getActivity() @pyqtProperty(int, notify=maxLayersChanged) def numLayers(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.getMaxLayers() - return 0 + return self._simulation_view.getMaxLayers() @pyqtProperty(int, notify=currentLayerChanged) def currentLayer(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.getCurrentLayer() - return 0 + return self._simulation_view.getCurrentLayer() @pyqtProperty(int, notify=currentLayerChanged) def minimumLayer(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.getMinimumLayer() - return 0 + return self._simulation_view.getMinimumLayer() @pyqtProperty(int, notify=maxPathsChanged) def numPaths(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.getMaxPaths() - return 0 + return self._simulation_view.getMaxPaths() @pyqtProperty(int, notify=currentPathChanged) def currentPath(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.getCurrentPath() - return 0 + return self._simulation_view.getCurrentPath() @pyqtProperty(int, notify=currentPathChanged) def minimumPath(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.getMinimumPath() - return 0 + return self._simulation_view.getMinimumPath() @pyqtProperty(bool, notify=busyChanged) def busy(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.isBusy() - return False + return self._simulation_view.isBusy() @pyqtProperty(bool, notify=preferencesChanged) def compatibilityMode(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.getCompatibilityMode() - return False + return self._simulation_view.getCompatibilityMode() + + @pyqtProperty(int, notify=globalStackChanged) + def extruderCount(self): + return self._simulation_view.getExtruderCount() @pyqtSlot(int) def setCurrentLayer(self, layer_num): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - active_view.setLayer(layer_num) + self._simulation_view.setLayer(layer_num) @pyqtSlot(int) def setMinimumLayer(self, layer_num): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - active_view.setMinimumLayer(layer_num) + self._simulation_view.setMinimumLayer(layer_num) @pyqtSlot(int) def setCurrentPath(self, path_num): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - active_view.setPath(path_num) + self._simulation_view.setPath(path_num) @pyqtSlot(int) def setMinimumPath(self, path_num): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - active_view.setMinimumPath(path_num) + self._simulation_view.setMinimumPath(path_num) @pyqtSlot(int) def setSimulationViewType(self, layer_view_type): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - active_view.setSimulationViewType(layer_view_type) + self._simulation_view.setSimulationViewType(layer_view_type) @pyqtSlot(result=int) def getSimulationViewType(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.getSimulationViewType() - return 0 + return self._simulation_view.getSimulationViewType() @pyqtSlot(bool) def setSimulationRunning(self, running): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - active_view.setSimulationRunning(running) + self._simulation_view.setSimulationRunning(running) @pyqtSlot(result=bool) def getSimulationRunning(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.isSimulationRunning() - return False + return self._simulation_view.isSimulationRunning() @pyqtSlot(result=float) def getMinFeedrate(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.getMinFeedrate() - return 0 + return self._simulation_view.getMinFeedrate() @pyqtSlot(result=float) def getMaxFeedrate(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.getMaxFeedrate() - return 0 + return self._simulation_view.getMaxFeedrate() @pyqtSlot(result=float) def getMinThickness(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.getMinThickness() - return 0 + return self._simulation_view.getMinThickness() @pyqtSlot(result=float) def getMaxThickness(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.getMaxThickness() - return 0 + return self._simulation_view.getMaxThickness() # Opacity 0..1 @pyqtSlot(int, float) def setExtruderOpacity(self, extruder_nr, opacity): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - active_view.setExtruderOpacity(extruder_nr, opacity) + self._simulation_view.setExtruderOpacity(extruder_nr, opacity) @pyqtSlot(int) def setShowTravelMoves(self, show): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - active_view.setShowTravelMoves(show) + self._simulation_view.setShowTravelMoves(show) @pyqtSlot(int) def setShowHelpers(self, show): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - active_view.setShowHelpers(show) + self._simulation_view.setShowHelpers(show) @pyqtSlot(int) def setShowSkin(self, show): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - active_view.setShowSkin(show) + self._simulation_view.setShowSkin(show) @pyqtSlot(int) def setShowInfill(self, show): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - active_view.setShowInfill(show) - - @pyqtProperty(int, notify=globalStackChanged) - def extruderCount(self): - active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - return active_view.getExtruderCount() - return 0 + self._simulation_view.setShowInfill(show) def _layerActivityChanged(self): self.activityChanged.emit() @@ -236,24 +169,25 @@ class SimulationViewProxy(QObject): def _onActiveViewChanged(self): active_view = self._controller.getActiveView() - if isinstance(active_view, SimulationView.SimulationView.SimulationView): - # remove other connection if once the SimulationView was created. - if self.is_simulationView_selected: - active_view.currentLayerNumChanged.disconnect(self._onLayerChanged) - active_view.currentPathNumChanged.disconnect(self._onPathChanged) - active_view.maxLayersChanged.disconnect(self._onMaxLayersChanged) - active_view.maxPathsChanged.disconnect(self._onMaxPathsChanged) - active_view.busyChanged.disconnect(self._onBusyChanged) - active_view.activityChanged.disconnect(self._onActivityChanged) - active_view.globalStackChanged.disconnect(self._onGlobalStackChanged) - active_view.preferencesChanged.disconnect(self._onPreferencesChanged) - + if active_view == self._simulation_view: + self._simulation_view.currentLayerNumChanged.connect(self._onLayerChanged) + self._simulation_view.currentPathNumChanged.connect(self._onPathChanged) + self._simulation_view.maxLayersChanged.connect(self._onMaxLayersChanged) + self._simulation_view.maxPathsChanged.connect(self._onMaxPathsChanged) + self._simulation_view.busyChanged.connect(self._onBusyChanged) + self._simulation_view.activityChanged.connect(self._onActivityChanged) + self._simulation_view.globalStackChanged.connect(self._onGlobalStackChanged) + self._simulation_view.preferencesChanged.connect(self._onPreferencesChanged) self.is_simulationView_selected = True - active_view.currentLayerNumChanged.connect(self._onLayerChanged) - active_view.currentPathNumChanged.connect(self._onPathChanged) - active_view.maxLayersChanged.connect(self._onMaxLayersChanged) - active_view.maxPathsChanged.connect(self._onMaxPathsChanged) - active_view.busyChanged.connect(self._onBusyChanged) - active_view.activityChanged.connect(self._onActivityChanged) - active_view.globalStackChanged.connect(self._onGlobalStackChanged) - active_view.preferencesChanged.connect(self._onPreferencesChanged) + elif self.is_simulationView_selected: + # Disconnect all of em again. + self.is_simulationView_selected = False + self._simulation_view.currentLayerNumChanged.disconnect(self._onLayerChanged) + self._simulation_view.currentPathNumChanged.disconnect(self._onPathChanged) + self._simulation_view.maxLayersChanged.disconnect(self._onMaxLayersChanged) + self._simulation_view.maxPathsChanged.disconnect(self._onMaxPathsChanged) + self._simulation_view.busyChanged.disconnect(self._onBusyChanged) + self._simulation_view.activityChanged.disconnect(self._onActivityChanged) + self._simulation_view.globalStackChanged.disconnect(self._onGlobalStackChanged) + self._simulation_view.preferencesChanged.disconnect(self._onPreferencesChanged) + 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 7501429796..acab445fd6 100755 --- a/plugins/SliceInfoPlugin/SliceInfo.py +++ b/plugins/SliceInfoPlugin/SliceInfo.py @@ -126,6 +126,10 @@ class SliceInfo(QObject, Extension): else: data["active_mode"] = "custom" + data["camera_view"] = application.getPreferences().getValue("general/camera_perspective_mode") + if data["camera_view"] == "orthographic": + data["camera_view"] = "orthogonal" #The database still only recognises the old name "orthogonal". + definition_changes = global_stack.definitionChanges machine_settings_changed_by_user = False if definition_changes.getId() != "empty": @@ -170,6 +174,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/SliceInfoJob.py b/plugins/SliceInfoPlugin/SliceInfoJob.py index a5667c1c13..50d6b560f1 100644 --- a/plugins/SliceInfoPlugin/SliceInfoJob.py +++ b/plugins/SliceInfoPlugin/SliceInfoJob.py @@ -8,6 +8,8 @@ import ssl import urllib.request import urllib.error +import certifi + class SliceInfoJob(Job): def __init__(self, url, data): @@ -20,11 +22,14 @@ class SliceInfoJob(Job): Logger.log("e", "URL or DATA for sending slice info was not set!") return - # Submit data - kwoptions = {"data" : self._data, "timeout" : 5} + # CURA-6698 Create an SSL context and use certifi CA certificates for verification. + context = ssl.SSLContext(protocol = ssl.PROTOCOL_TLSv1_2) + context.load_verify_locations(cafile = certifi.where()) - if Platform.isOSX(): - kwoptions["context"] = ssl._create_unverified_context() + # Submit data + kwoptions = {"data": self._data, + "timeout": 5, + "context": context} Logger.log("i", "Sending anonymous slice info to [%s]...", self._url) @@ -35,4 +40,4 @@ class SliceInfoJob(Job): except urllib.error.HTTPError: Logger.logException("e", "An HTTP error occurred while trying to send slice information") except Exception: # We don't want any exception to cause problems - Logger.logException("e", "An exception occurred while trying to send slice information") \ No newline at end of file + Logger.logException("e", "An exception occurred while trying to send slice information") 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/SolidView.py b/plugins/SolidView/SolidView.py index 4ce8ae7bc4..61954f5bca 100644 --- a/plugins/SolidView/SolidView.py +++ b/plugins/SolidView/SolidView.py @@ -57,9 +57,12 @@ class SolidView(View): # As the rendering is called a *lot* we really, dont want to re-evaluate the property every time. So we store em! global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack: - support_extruder_nr = global_container_stack.getExtruderPositionValueWithDefault("support_extruder_nr") - support_angle_stack = global_container_stack.extruders.get(str(support_extruder_nr)) - if support_angle_stack: + support_extruder_nr = int(global_container_stack.getExtruderPositionValueWithDefault("support_extruder_nr")) + try: + support_angle_stack = global_container_stack.extruderList[support_extruder_nr] + except IndexError: + pass + else: self._support_angle = support_angle_stack.getProperty("support_angle", "value") def beginRendering(self): @@ -139,6 +142,10 @@ class SolidView(View): shade_factor * int(material_color[5:7], 16) / 255, 1.0 ] + + # Color the currently selected face-id. (Disable for now.) + #face = Selection.getHoverFace() + uniforms["hover_face"] = -1 #if not face or node != face[0] else face[1] except ValueError: pass 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/SupportEraser.py b/plugins/SupportEraser/SupportEraser.py index 0683c48635..35f597dcc5 100644 --- a/plugins/SupportEraser/SupportEraser.py +++ b/plugins/SupportEraser/SupportEraser.py @@ -98,8 +98,10 @@ class SupportEraser(Tool): node.setName("Eraser") node.setSelectable(True) + node.setCalculateBoundingBox(True) mesh = self._createCube(10) node.setMeshData(mesh.build()) + node.calculateBoundingBoxMesh() active_build_plate = CuraApplication.getInstance().getMultiBuildPlateModel().activeBuildPlate node.addDecorator(BuildPlateDecorator(active_build_plate)) 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/SupportEraser/tool_icon.svg b/plugins/SupportEraser/tool_icon.svg index a0f8a3e3c3..fee69e0715 100644 --- a/plugins/SupportEraser/tool_icon.svg +++ b/plugins/SupportEraser/tool_icon.svg @@ -1,11 +1,14 @@ - - + + + + support_blocker Created with Sketch. - - - - - + + + + + + - + \ No newline at end of file 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 d15d98eed7..f70dab03d8 100644 --- a/plugins/Toolbox/resources/qml/Toolbox.qml +++ b/plugins/Toolbox/resources/qml/Toolbox.qml @@ -48,32 +48,32 @@ Window ToolboxLoadingPage { id: viewLoading - visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "loading" + visible: toolbox.viewCategory !== "installed" && toolbox.viewPage === "loading" } ToolboxErrorPage { id: viewErrored - visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "errored" + visible: toolbox.viewCategory !== "installed" && toolbox.viewPage === "errored" } ToolboxDownloadsPage { id: viewDownloads - visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "overview" + visible: toolbox.viewCategory !== "installed" && toolbox.viewPage === "overview" } ToolboxDetailPage { id: viewDetail - visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "detail" + visible: toolbox.viewCategory !== "installed" && toolbox.viewPage === "detail" } ToolboxAuthorPage { id: viewAuthor - visible: toolbox.viewCategory != "installed" && toolbox.viewPage == "author" + visible: toolbox.viewCategory !== "installed" && toolbox.viewPage === "author" } ToolboxInstalledPage { id: installedPluginList - visible: toolbox.viewCategory == "installed" + visible: toolbox.viewCategory === "installed" } } diff --git a/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml b/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml index db4e8c628f..ae9241f0ab 100644 --- a/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml +++ b/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml @@ -1,9 +1,9 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2019 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. import QtQuick 2.10 import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 + import UM 1.1 as UM Item @@ -11,48 +11,17 @@ Item id: base property var packageData - property var technicalDataSheetUrl: - { - var link = undefined - if ("Technical Data Sheet" in packageData.links) - { - // HACK: This is the way the old API (used in 3.6-beta) used to do it. For safety it's still here, - // but it can be removed over time. - link = packageData.links["Technical Data Sheet"] - } - else if ("technicalDataSheet" in packageData.links) - { - link = packageData.links["technicalDataSheet"] - } - return link - } - property var safetyDataSheetUrl: - { - var sds_name = "safetyDataSheet" - return (sds_name in packageData.links) ? packageData.links[sds_name] : undefined - } - property var printingGuidelinesUrl: - { - var pg_name = "printingGuidelines" - return (pg_name in packageData.links) ? packageData.links[pg_name] : undefined - } + property var technicalDataSheetUrl: packageData.links.technicalDataSheet + property var safetyDataSheetUrl: packageData.links.safetyDataSheet + property var printingGuidelinesUrl: packageData.links.printingGuidelines + property var materialWebsiteUrl: packageData.links.website - property var materialWebsiteUrl: - { - var pg_name = "website" - return (pg_name in packageData.links) ? packageData.links[pg_name] : undefined - } - anchors.topMargin: UM.Theme.getSize("default_margin").height - height: visible ? childrenRect.height : 0 + height: childrenRect.height + onVisibleChanged: packageData.type === "material" && (compatibilityItem.visible || dataSheetLinks.visible) - visible: packageData.type == "material" && - (packageData.has_configs || technicalDataSheetUrl !== undefined || - safetyDataSheetUrl !== undefined || printingGuidelinesUrl !== undefined || - materialWebsiteUrl !== undefined) - - Item + Column { - id: combatibilityItem + id: compatibilityItem visible: packageData.has_configs width: parent.width // This is a bit of a hack, but the whole QML is pretty messy right now. This needs a big overhaul. @@ -61,7 +30,6 @@ Item Label { id: heading - anchors.topMargin: UM.Theme.getSize("default_margin").height width: parent.width text: catalog.i18nc("@label", "Compatibility") wrapMode: Text.WordWrap @@ -73,8 +41,6 @@ Item TableView { id: table - anchors.top: heading.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height width: parent.width frameVisible: false @@ -155,32 +121,32 @@ Item TableViewColumn { role: "machine" - title: "Machine" + title: catalog.i18nc("@label:table_header", "Machine") width: Math.floor(table.width * 0.25) delegate: columnTextDelegate } TableViewColumn { role: "print_core" - title: "Print Core" + title: "Print Core" //This term should not be translated. width: Math.floor(table.width * 0.2) } TableViewColumn { role: "build_plate" - title: "Build Plate" + title: catalog.i18nc("@label:table_header", "Build Plate") width: Math.floor(table.width * 0.225) } TableViewColumn { role: "support_material" - title: "Support" + title: catalog.i18nc("@label:table_header", "Support") width: Math.floor(table.width * 0.225) } TableViewColumn { role: "quality" - title: "Quality" + title: catalog.i18nc("@label:table_header", "Quality") width: Math.floor(table.width * 0.1) } } @@ -188,13 +154,14 @@ Item Label { - id: data_sheet_links - anchors.top: combatibilityItem.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height / 2 + id: dataSheetLinks + anchors.top: compatibilityItem.bottom + anchors.topMargin: UM.Theme.getSize("narrow_margin").height visible: base.technicalDataSheetUrl !== undefined || - base.safetyDataSheetUrl !== undefined || base.printingGuidelinesUrl !== undefined || - base.materialWebsiteUrl !== undefined - height: visible ? contentHeight : 0 + base.safetyDataSheetUrl !== undefined || + base.printingGuidelinesUrl !== undefined || + base.materialWebsiteUrl !== undefined + text: { var result = "" diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailList.qml b/plugins/Toolbox/resources/qml/ToolboxDetailList.qml index 4e44ea7d0b..22c6b6045f 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailList.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailList.qml @@ -1,9 +1,8 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2019 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 +import QtQuick 2.10 +import QtQuick.Controls 2.3 import UM 1.1 as UM Item @@ -11,10 +10,9 @@ Item id: detailList ScrollView { - frameVisible: false + clip: true anchors.fill: detailList - style: UM.Theme.styles.scrollview - flickableItem.flickableDirection: Flickable.VerticalFlick + Column { anchors diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml index fef2732af9..1773ef9053 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml @@ -89,6 +89,7 @@ Item Label { text: catalog.i18nc("@label", "Your rating") + ":" + visible: details.type == "plugin" font: UM.Theme.getFont("default") color: UM.Theme.getColor("text_medium") renderType: Text.NativeRendering diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml b/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml index c7bb1f60ac..5badc6b66d 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml @@ -1,30 +1,30 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2019 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. import QtQuick 2.10 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls 2.3 + import UM 1.1 as UM Item { id: tile width: detailList.width - UM.Theme.getSize("wide_margin").width - height: normalData.height + compatibilityChart.height + 4 * UM.Theme.getSize("default_margin").height - Item + height: normalData.height + 2 * UM.Theme.getSize("wide_margin").height + Column { id: normalData - height: childrenRect.height + anchors { + top: parent.top left: parent.left right: controls.left - rightMargin: UM.Theme.getSize("default_margin").width * 2 + UM.Theme.getSize("toolbox_loader").width - top: parent.top + rightMargin: UM.Theme.getSize("wide_margin").width } + Label { - id: packageName width: parent.width height: UM.Theme.getSize("toolbox_property_label").height text: model.name @@ -33,9 +33,9 @@ Item font: UM.Theme.getFont("medium_bold") renderType: Text.NativeRendering } + Label { - anchors.top: packageName.bottom width: parent.width text: model.description maximumLineCount: 25 @@ -45,6 +45,12 @@ Item font: UM.Theme.getFont("default") renderType: Text.NativeRendering } + + ToolboxCompatibilityChart + { + width: parent.width + packageData: model + } } ToolboxDetailTileActions @@ -57,20 +63,12 @@ Item packageData: model } - ToolboxCompatibilityChart - { - id: compatibilityChart - anchors.top: normalData.bottom - width: normalData.width - packageData: model - } - Rectangle { color: UM.Theme.getColor("lining") width: tile.width height: UM.Theme.getSize("default_lining").height - anchors.top: compatibilityChart.bottom + anchors.top: normalData.bottom anchors.topMargin: UM.Theme.getSize("default_margin").height + UM.Theme.getSize("wide_margin").height //Normal margin for spacing after chart, wide margin between items. } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml b/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml index 2b86aacefc..dfe91edbf6 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml @@ -35,7 +35,7 @@ Column // Don't allow installing while another download is running enabled: installed || (!(toolbox.isDownloading && toolbox.activePackage != model) && !loginRequired) opacity: enabled ? 1.0 : 0.5 - visible: !updateButton.visible && !installed// Don't show when the update button is visible + visible: !updateButton.visible && !installed // Don't show when the update button is visible } Cura.SecondaryButton diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml index a9fcb39b28..6682281a31 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml @@ -2,9 +2,7 @@ // Toolbox is released under the terms of the LGPLv3 or higher. import QtQuick 2.10 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 -import QtQuick.Layouts 1.3 +import QtQuick.Controls 2.3 import UM 1.1 as UM Column diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml index 3e0dda4f4a..57fb3a9279 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml @@ -1,25 +1,22 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2019 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 +import QtQuick 2.10 +import QtQuick.Controls 2.3 import UM 1.1 as UM ScrollView { - frameVisible: false + clip: true width: parent.width height: parent.height - style: UM.Theme.styles.scrollview - - flickableItem.flickableDirection: Flickable.VerticalFlick + contentHeight: mainColumn.height Column { + id: mainColumn width: base.width spacing: UM.Theme.getSize("default_margin").height - height: childrenRect.height ToolboxDownloadsShowcase { @@ -31,14 +28,14 @@ ScrollView { id: allPlugins width: parent.width - heading: toolbox.viewCategory == "material" ? catalog.i18nc("@label", "Community Contributions") : catalog.i18nc("@label", "Community Plugins") - model: toolbox.viewCategory == "material" ? toolbox.materialsAvailableModel : toolbox.pluginsAvailableModel + heading: toolbox.viewCategory === "material" ? catalog.i18nc("@label", "Community Contributions") : catalog.i18nc("@label", "Community Plugins") + model: toolbox.viewCategory === "material" ? toolbox.materialsAvailableModel : toolbox.pluginsAvailableModel } ToolboxDownloadsGrid { id: genericMaterials - visible: toolbox.viewCategory == "material" + visible: toolbox.viewCategory === "material" width: parent.width heading: catalog.i18nc("@label", "Generic Materials") model: toolbox.materialsGenericModel diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml b/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml index 0c43c67679..f4a9e634c4 100644 --- a/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml @@ -1,50 +1,50 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2019 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. import QtQuick 2.10 -import QtQuick.Dialogs 1.1 -import QtQuick.Window 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls 2.3 import UM 1.1 as UM ScrollView { id: page - frameVisible: false + clip: true width: parent.width height: parent.height - style: UM.Theme.styles.scrollview - flickableItem.flickableDirection: Flickable.VerticalFlick Column { + width: page.width spacing: UM.Theme.getSize("default_margin").height + padding: UM.Theme.getSize("wide_margin").width visible: toolbox.pluginsInstalledModel.items.length > 0 - height: childrenRect.height + 4 * UM.Theme.getSize("default_margin").height - - anchors - { - right: parent.right - left: parent.left - margins: UM.Theme.getSize("default_margin").width - top: parent.top - } + height: childrenRect.height + 2 * UM.Theme.getSize("wide_margin").height Label { - width: page.width + anchors + { + left: parent.left + right: parent.right + margins: parent.padding + } text: catalog.i18nc("@title:tab", "Plugins") color: UM.Theme.getColor("text_medium") font: UM.Theme.getFont("large") renderType: Text.NativeRendering } + Rectangle { + anchors + { + left: parent.left + right: parent.right + margins: parent.padding + } id: installedPlugins color: "transparent" - width: parent.width height: childrenRect.height + UM.Theme.getSize("default_margin").width border.color: UM.Theme.getColor("lining") border.width: UM.Theme.getSize("default_lining").width @@ -65,8 +65,15 @@ ScrollView } } } + Label { + anchors + { + left: parent.left + right: parent.right + margins: parent.padding + } text: catalog.i18nc("@title:tab", "Materials") color: UM.Theme.getColor("text_medium") font: UM.Theme.getFont("medium") @@ -75,9 +82,14 @@ ScrollView Rectangle { + anchors + { + left: parent.left + right: parent.right + margins: parent.padding + } id: installedMaterials color: "transparent" - width: parent.width height: childrenRect.height + UM.Theme.getSize("default_margin").width border.color: UM.Theme.getColor("lining") border.width: UM.Theme.getSize("default_lining").width diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml b/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml index e47cde1bf4..f85a1056b7 100644 --- a/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml @@ -41,7 +41,7 @@ Item Column { id: pluginInfo - topPadding: Math.floor(UM.Theme.getSize("default_margin").height / 2) + topPadding: UM.Theme.getSize("narrow_margin").height property var color: model.type === "plugin" && !isEnabled ? UM.Theme.getColor("lining") : UM.Theme.getColor("text") width: Math.floor(tileRow.width - (authorInfo.width + pluginActions.width + 2 * tileRow.spacing + ((disableButton.visible) ? disableButton.width + tileRow.spacing : 0))) Label diff --git a/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml b/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml index 40b22c268d..f7edde1fff 100644 --- a/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml +++ b/plugins/Toolbox/resources/qml/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/ToolboxProgressButton.qml b/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml index 4d4ae92e73..40d6c1af47 100644 --- a/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml +++ b/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml @@ -1,16 +1,16 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2019 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 +import QtQuick 2.10 +import QtQuick.Controls 2.3 + import UM 1.1 as UM import Cura 1.0 as Cura -Item +Cura.PrimaryButton { - id: base + id: button property var active: false property var complete: false @@ -25,43 +25,36 @@ Item width: UM.Theme.getSize("toolbox_action_button").width height: UM.Theme.getSize("toolbox_action_button").height - - Cura.PrimaryButton + fixedWidthMode: true + text: { - id: button - width: UM.Theme.getSize("toolbox_action_button").width - height: UM.Theme.getSize("toolbox_action_button").height - fixedWidthMode: true - text: + if (complete) { - if (complete) - { - return completeLabel - } - else if (active) - { - return activeLabel - } - else - { - return readyLabel - } + return completeLabel } - onClicked: + else if (active) { - if (complete) - { - completeAction() - } - else if (active) - { - activeAction() - } - else - { - readyAction() - } + return activeLabel + } + else + { + return readyLabel } - busy: active } + onClicked: + { + if (complete) + { + completeAction() + } + else if (active) + { + activeAction() + } + else + { + readyAction() + } + } + busy: active } diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 698fdbd795..08b6c80b1d 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 @@ -359,15 +360,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: @@ -655,8 +663,12 @@ class Toolbox(QObject, Extension): # Check if the download was sucessfull if self._download_reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: - Logger.log("w", "Failed to download package. The following error was returned: %s", json.loads(bytes(self._download_reply.readAll()).decode("utf-8"))) - return + try: + Logger.log("w", "Failed to download package. The following error was returned: %s", json.loads(bytes(self._download_reply.readAll()).decode("utf-8"))) + except json.decoder.JSONDecodeError: + Logger.logException("w", "Failed to download package and failed to parse a response from it") + finally: + return # Must not delete the temporary file on Windows self._temp_plugin_file = tempfile.NamedTemporaryFile(mode = "w+b", suffix = ".curapackage", delete = False) file_path = self._temp_plugin_file.name diff --git a/plugins/TrimeshReader/TrimeshReader.py b/plugins/TrimeshReader/TrimeshReader.py new file mode 100644 index 0000000000..91f8423579 --- /dev/null +++ b/plugins/TrimeshReader/TrimeshReader.py @@ -0,0 +1,161 @@ +# Copyright (c) 2019 Ultimaker B.V., fieldOfView +# Cura is released under the terms of the LGPLv3 or higher. + +# The _toMeshData function is taken from the AMFReader class which was built by fieldOfView. + +from typing import Any, List, Union, TYPE_CHECKING +import numpy # To create the mesh data. +import os.path # To create the mesh name for the resulting mesh. +import trimesh # To load the files into a Trimesh. + +from UM.Mesh.MeshData import MeshData, calculateNormalsFromIndexedVertices # To construct meshes from the Trimesh data. +from UM.Mesh.MeshReader import MeshReader # The plug-in type we're extending. +from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType # To add file types that we can open. +from UM.Scene.GroupDecorator import GroupDecorator # Added to the parent node if we load multiple nodes at once. + +from cura.CuraApplication import CuraApplication +from cura.Scene.BuildPlateDecorator import BuildPlateDecorator # Added to the resulting scene node. +from cura.Scene.ConvexHullDecorator import ConvexHullDecorator # Added to group nodes if we load multiple nodes at once. +from cura.Scene.CuraSceneNode import CuraSceneNode # To create a node in the scene after reading the file. +from cura.Scene.SliceableObjectDecorator import SliceableObjectDecorator # Added to the resulting scene node. + +if TYPE_CHECKING: + from UM.Scene.SceneNode import SceneNode + +## Class that leverages Trimesh to import files. +class TrimeshReader(MeshReader): + def __init__(self) -> None: + super().__init__() + + self._supported_extensions = [".ctm", ".dae", ".gltf", ".glb", ".ply", ".zae"] + MimeTypeDatabase.addMimeType( + MimeType( + name = "application/x-ctm", + comment = "Open Compressed Triangle Mesh", + suffixes = ["ctm"] + ) + ) + MimeTypeDatabase.addMimeType( + MimeType( + name = "model/vnd.collada+xml", + comment = "COLLADA Digital Asset Exchange", + suffixes = ["dae"] + ) + ) + MimeTypeDatabase.addMimeType( + MimeType( + name = "model/gltf-binary", + comment = "glTF Binary", + suffixes = ["glb"] + ) + ) + MimeTypeDatabase.addMimeType( + MimeType( + name = "model/gltf+json", + comment = "glTF Embedded JSON", + suffixes = ["gltf"] + ) + ) + # Trimesh seems to have a bug when reading .off files. + #MimeTypeDatabase.addMimeType( + # MimeType( + # name = "application/x-off", + # comment = "Geomview Object File Format", + # suffixes = ["off"] + # ) + #) + MimeTypeDatabase.addMimeType( + MimeType( + name = "application/x-ply", # Wikipedia lists the MIME type as "text/plain" but that won't do as it's not unique to PLY files. + comment = "Stanford Triangle Format", + suffixes = ["ply"] + ) + ) + MimeTypeDatabase.addMimeType( + MimeType( + name = "model/vnd.collada+xml+zip", + comment = "Compressed COLLADA Digital Asset Exchange", + suffixes = ["zae"] + ) + ) + + ## Reads a file using Trimesh. + # \param file_name The file path. This is assumed to be one of the file + # types that Trimesh can read. It will not be checked again. + # \return A scene node that contains the file's contents. + def _read(self, file_name: str) -> Union["SceneNode", List["SceneNode"]]: + # CURA-6739 + # GLTF files are essentially JSON files. If you directly give a file name to trimesh.load(), it will + # try to figure out the format, but for GLTF, it loads it as a binary file with flags "rb", and the json.load() + # doesn't like it. For some reason, this seems to happen with 3.5.7, but not 3.7.1. Below is a workaround to + # pass a file object that has been opened with "r" instead "rb" to load a GLTF file. + if file_name.lower().endswith(".gltf"): + mesh_or_scene = trimesh.load(open(file_name, "r", encoding = "utf-8"), file_type = "gltf") + else: + mesh_or_scene = trimesh.load(file_name) + + meshes = [] # type: List[Union[trimesh.Trimesh, trimesh.Scene, Any]] + if isinstance(mesh_or_scene, trimesh.Trimesh): + meshes = [mesh_or_scene] + elif isinstance(mesh_or_scene, trimesh.Scene): + meshes = [mesh for mesh in mesh_or_scene.geometry.values()] + + active_build_plate = CuraApplication.getInstance().getMultiBuildPlateModel().activeBuildPlate + nodes = [] # type: List[SceneNode] + for mesh in meshes: + if not isinstance(mesh, trimesh.Trimesh): # Trimesh can also receive point clouds, 2D paths, 3D paths or metadata. Skip those. + continue + mesh.merge_vertices() + mesh.remove_unreferenced_vertices() + mesh.fix_normals() + mesh_data = self._toMeshData(mesh) + + file_base_name = os.path.basename(file_name) + new_node = CuraSceneNode() + new_node.setMeshData(mesh_data) + new_node.setSelectable(True) + new_node.setName(file_base_name if len(meshes) == 1 else "{file_base_name} {counter}".format(file_base_name = file_base_name, counter = str(len(nodes) + 1))) + new_node.addDecorator(BuildPlateDecorator(active_build_plate)) + new_node.addDecorator(SliceableObjectDecorator()) + nodes.append(new_node) + + if len(nodes) == 1: + return nodes[0] + # Add all nodes to a group so they stay together. + group_node = CuraSceneNode() + group_node.addDecorator(GroupDecorator()) + group_node.addDecorator(ConvexHullDecorator()) + group_node.addDecorator(BuildPlateDecorator(active_build_plate)) + for node in nodes: + node.setParent(group_node) + return group_node + + ## Converts a Trimesh to Uranium's MeshData. + # \param tri_node A Trimesh containing the contents of a file that was + # just read. + # \return Mesh data from the Trimesh in a way that Uranium can understand + # it. + def _toMeshData(self, tri_node: trimesh.base.Trimesh) -> MeshData: + tri_faces = tri_node.faces + tri_vertices = tri_node.vertices + + indices = [] + vertices = [] + + index_count = 0 + face_count = 0 + for tri_face in tri_faces: + face = [] + for tri_index in tri_face: + vertices.append(tri_vertices[tri_index]) + face.append(index_count) + index_count += 1 + indices.append(face) + face_count += 1 + + 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) + return mesh_data \ No newline at end of file diff --git a/plugins/TrimeshReader/__init__.py b/plugins/TrimeshReader/__init__.py new file mode 100644 index 0000000000..8a267a7bc0 --- /dev/null +++ b/plugins/TrimeshReader/__init__.py @@ -0,0 +1,46 @@ +# Copyright (c) 2019 Ultimaker +# Cura is released under the terms of the LGPLv3 or higher. + +from . import TrimeshReader + +from UM.i18n import i18nCatalog +i18n_catalog = i18nCatalog("uranium") + + +def getMetaData(): + return { + "mesh_reader": [ + { + "extension": "ctm", + "description": i18n_catalog.i18nc("@item:inlistbox 'Open' is part of the name of this file format.", "Open Compressed Triangle Mesh") + }, + { + "extension": "dae", + "description": i18n_catalog.i18nc("@item:inlistbox", "COLLADA Digital Asset Exchange") + }, + { + "extension": "glb", + "description": i18n_catalog.i18nc("@item:inlistbox", "glTF Binary") + }, + { + "extension": "gltf", + "description": i18n_catalog.i18nc("@item:inlistbox", "glTF Embedded JSON") + }, + # Trimesh seems to have a bug when reading OFF files. + #{ + # "extension": "off", + # "description": i18n_catalog.i18nc("@item:inlistbox", "Geomview Object File Format") + #}, + { + "extension": "ply", + "description": i18n_catalog.i18nc("@item:inlistbox", "Stanford Triangle Format") + }, + { + "extension": "zae", + "description": i18n_catalog.i18nc("@item:inlistbox", "Compressed COLLADA Digital Asset Exchange") + } + ] + } + +def register(app): + return {"mesh_reader": TrimeshReader.TrimeshReader()} diff --git a/plugins/TrimeshReader/plugin.json b/plugins/TrimeshReader/plugin.json new file mode 100644 index 0000000000..dbe937b01d --- /dev/null +++ b/plugins/TrimeshReader/plugin.json @@ -0,0 +1,7 @@ +{ + "name": "Trimesh Reader", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Provides support for reading model files.", + "api": "7.0.0" +} diff --git a/plugins/UFPReader/UFPReader.py b/plugins/UFPReader/UFPReader.py index 18527e6450..71061f938b 100644 --- a/plugins/UFPReader/UFPReader.py +++ b/plugins/UFPReader/UFPReader.py @@ -39,4 +39,4 @@ class UFPReader(MeshReader): # Open the GCodeReader to parse the data gcode_reader = PluginRegistry.getInstance().getPluginObject("GCodeReader") # type: ignore gcode_reader.preReadFromStream(gcode_stream) # type: ignore - return gcode_reader.readFromStream(gcode_stream) # type: ignore + return gcode_reader.readFromStream(gcode_stream, file_name) # type: ignore 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 2aece1092a..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 @@ -38,7 +38,11 @@ class UFPWriter(MeshWriter): def _createSnapshot(self, *args): # must be called from the main thread because of OpenGL Logger.log("d", "Creating thumbnail image...") - self._snapshot = Snapshot.snapshot(width = 300, height = 300) + try: + self._snapshot = Snapshot.snapshot(width = 300, height = 300) + except Exception: + Logger.logException("w", "Failed to create snapshot image") + self._snapshot = None # Failing to create thumbnail should not fail creation of UFP # This needs to be called on the main thread (Qt thread) because the serialization of material containers can # trigger loading other containers. Because those loaded containers are QtObjects, they must be created on the @@ -79,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" @@ -107,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/__init__.py b/plugins/UM3NetworkPrinting/__init__.py index 3da7795589..ea0f69639d 100644 --- a/plugins/UM3NetworkPrinting/__init__.py +++ b/plugins/UM3NetworkPrinting/__init__.py @@ -1,7 +1,7 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from .src import DiscoverUM3Action from .src import UM3OutputDevicePlugin +from .src import UltimakerNetworkedPrinterAction def getMetaData(): @@ -11,5 +11,5 @@ def getMetaData(): def register(app): return { "output_device": UM3OutputDevicePlugin.UM3OutputDevicePlugin(), - "machine_action": DiscoverUM3Action.DiscoverUM3Action() + "machine_action": UltimakerNetworkedPrinterAction.UltimakerNetworkedPrinterAction() } diff --git a/plugins/UM3NetworkPrinting/plugin.json b/plugins/UM3NetworkPrinting/plugin.json index 088b4dae6a..193ba63d83 100644 --- a/plugins/UM3NetworkPrinting/plugin.json +++ b/plugins/UM3NetworkPrinting/plugin.json @@ -1,8 +1,8 @@ { - "name": "UM3 Network Connection", + "name": "Ultimaker Network Connection", "author": "Ultimaker B.V.", - "description": "Manages network connections to Ultimaker 3 printers.", - "version": "1.0.1", - "api": "6.0", + "description": "Manages network connections to Ultimaker networked printers.", + "version": "2.0.0", + "api": "7.0", "i18n-catalog": "cura" } diff --git a/plugins/UM3NetworkPrinting/resources/png/Ultimaker S3.png b/plugins/UM3NetworkPrinting/resources/png/Ultimaker S3.png new file mode 100644 index 0000000000..b6ce6e1273 Binary files /dev/null and b/plugins/UM3NetworkPrinting/resources/png/Ultimaker S3.png differ diff --git a/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml b/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml index c0369cac0b..2e3d17ceb0 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml @@ -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 QtQuick 2.3 @@ -53,4 +53,4 @@ Rectangle } } } -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml b/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml index f65f2526dd..59a0148550 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml @@ -23,38 +23,13 @@ Cura.MachineAction function connectToPrinter() { - if(base.selectedDevice && base.completeProperties) + if (base.selectedDevice && base.completeProperties) { - var printerKey = base.selectedDevice.key - var printerName = base.selectedDevice.name // TODO To change when the groups have a name - if (Cura.API.machines.getCurrentMachine().um_network_key != printerKey) // TODO: change to hostname - { - // Check if there is another instance with the same key - if (!manager.existsKey(printerKey)) - { - Cura.API.machines.addOutputDeviceToCurrentMachine(base.selectedDevice) - Cura.API.machines.setCurrentMachineGroupName(printerName) // TODO To change when the groups have a name - manager.refreshConnections() - completed() - } - else - { - existingConnectionDialog.open() - } - } + manager.associateActiveMachineWithPrinterDevice(base.selectedDevice) + completed() } } - MessageDialog - { - id: existingConnectionDialog - title: catalog.i18nc("@window:title", "Existing Connection") - icon: StandardIcon.Information - text: catalog.i18nc("@message:text", "This printer/group is already added to Cura. Please select another printer/group.") - standardButtons: StandardButton.Ok - modality: Qt.ApplicationModal - } - Column { anchors.fill: parent; @@ -79,7 +54,7 @@ Cura.MachineAction width: parent.width wrapMode: Text.WordWrap renderType: Text.NativeRendering - text: catalog.i18nc("@label", "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n\nSelect your printer from the list below:") + text: catalog.i18nc("@label", "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.") + "\n\n" + catalog.i18nc("@label", "Select your printer from the list below:") } Row @@ -152,21 +127,6 @@ Cura.MachineAction { id: listview model: manager.foundDevices - onModelChanged: - { - var selectedKey = manager.getLastManualEntryKey() - // If there is no last manual entry key, then we select the stored key (if any) - if (selectedKey == "") - selectedKey = Cura.API.machines.getCurrentMachine().um_network_key // TODO: change to host name - for(var i = 0; i < model.length; i++) { - if(model[i].key == selectedKey) - { - currentIndex = i; - return - } - } - currentIndex = -1; - } width: parent.width currentIndex: -1 onCurrentIndexChanged: @@ -251,29 +211,10 @@ Cura.MachineAction renderType: Text.NativeRendering text: { - if(base.selectedDevice) - { - if (base.selectedDevice.printerType == "ultimaker3") - { - return "Ultimaker 3"; - } - else if (base.selectedDevice.printerType == "ultimaker3_extended") - { - return "Ultimaker 3 Extended"; - } - else if (base.selectedDevice.printerType == "ultimaker_s5") - { - return "Ultimaker S5"; - } - else - { - return catalog.i18nc("@label", "Unknown") // We have no idea what type it is. Should not happen 'in the field' - } - } - else - { - return "" + if (base.selectedDevice) { + return base.selectedDevice.printerTypeName } + return "" } } Label @@ -350,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 @@ -387,7 +328,7 @@ Cura.MachineAction Label { - text: catalog.i18nc("@label", "Enter the IP address or hostname of your printer on the network.") + text: catalog.i18nc("@label", "Enter the IP address of your printer on the network.") width: parent.width wrapMode: Text.WordWrap renderType: Text.NativeRendering diff --git a/plugins/UM3NetworkPrinting/resources/qml/ExpandableCard.qml b/plugins/UM3NetworkPrinting/resources/qml/ExpandableCard.qml index fae8280488..5257361367 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/ExpandableCard.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/ExpandableCard.qml @@ -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 QtQuick 2.2 @@ -87,4 +87,4 @@ Item } } } -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/GenericPopUp.qml b/plugins/UM3NetworkPrinting/resources/qml/GenericPopUp.qml index 74d9377f3e..61981dab2c 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/GenericPopUp.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/GenericPopUp.qml @@ -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 QtQuick 2.2 diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml index 619658a7eb..5d08422877 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml @@ -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 QtQuick 2.2 @@ -35,7 +35,7 @@ Item { height: parent.height width: 32 * screenScaleFactor // Ensure the icon is centered under the extruder icon (same width) - + Rectangle { anchors.centerIn: parent @@ -56,7 +56,7 @@ Item visible: buildplate } } - + Label { id: buildplateLabel @@ -72,4 +72,4 @@ Item renderType: Text.NativeRendering } } -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorCarousel.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorCarousel.qml index 0d7a177dd3..08743ed777 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorCarousel.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorCarousel.qml @@ -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 QtQuick 2.3 @@ -23,7 +23,7 @@ Item height: centerSection.height width: maximumWidth - + // Enable keyboard navigation Keys.onLeftPressed: navigateTo(currentIndex - 1) Keys.onRightPressed: navigateTo(currentIndex + 1) @@ -131,7 +131,7 @@ Item } } spacing: 60 * screenScaleFactor // TODO: Theme! - + Repeater { model: printers @@ -255,4 +255,4 @@ Item currentIndex = i } } -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml index 1c61504103..1fe766d9f7 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml @@ -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 QtQuick 2.3 @@ -32,18 +32,23 @@ UM.Dialog } visible: { + // Don't show the button if we're missing a printer or print job if (!printer || !printer.activePrintJob) { - return true + return false } - var canOverride = false + // Check each required change... for (var i = 0; i < printer.activePrintJob.configurationChanges.length; i++) { var change = printer.activePrintJob.configurationChanges[i] - canOverride = canOverride || change.typeOfChange === "material_change"; + // If that type of change is in the list of blocking changes, hide the button + if (!change.canOverride) + { + return false + } } - return canOverride + return true } }, Button @@ -155,4 +160,4 @@ UM.Dialog } return translationText } -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenu.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenu.qml index 771bd4b8cf..34ca3c6df2 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenu.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenu.qml @@ -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 QtQuick 2.3 @@ -81,7 +81,7 @@ Item enabled: visible && !(printJob.state == "pausing" || printJob.state == "resuming"); onClicked: { if (printJob.state == "paused") { - printJob.setState("print"); + printJob.setState("resume"); popUp.close(); return; } diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenuButton.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenuButton.qml index e91e8b04d2..aa5d6de89b 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenuButton.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenuButton.qml @@ -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 QtQuick 2.3 @@ -29,4 +29,4 @@ Button hoverEnabled: enabled text: "\u22EE" //Unicode Three stacked points. width: 36 * screenScaleFactor // TODO: Theme! -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml index deed3ac5e6..63caaab433 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml @@ -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 QtQuick 2.2 @@ -56,7 +56,7 @@ Item Label { id: materialLabel - + color: UM.Theme.getColor("monitor_text_primary") elide: Text.ElideRight font: UM.Theme.getFont("default") // 12pt, regular @@ -86,7 +86,7 @@ Item Label { id: printCoreLabel - + color: UM.Theme.getColor("monitor_text_primary") elide: Text.ElideRight font: UM.Theme.getFont("default_bold") // 12pt, bold @@ -99,4 +99,4 @@ Item renderType: Text.NativeRendering } } -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml index f6b84d69b2..876215d65d 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml @@ -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 QtQuick 2.2 @@ -50,4 +50,4 @@ Item visible: position >= 0 renderType: Text.NativeRendering } -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorInfoBlurb.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorInfoBlurb.qml index 0d2c7f8beb..32e19c1cdb 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorInfoBlurb.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorInfoBlurb.qml @@ -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 QtQuick 2.3 diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml index 41b3a93a7b..1ac72b8f8e 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml @@ -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 QtQuick 2.2 @@ -42,4 +42,4 @@ Component { z: 1; } } -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml index d80f2e5b9f..c01f778bba 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml @@ -1,6 +1,5 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2019 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. - import QtQuick 2.2 import QtQuick.Controls 2.0 import UM 1.3 as UM @@ -22,10 +21,6 @@ Item // The print job which all other data is derived from property var printJob: null - // If the printer is a cloud printer or not. Other items base their enabled state off of this boolean. In the future - // they might not need to though. - property bool cloudConnection: Cura.MachineManager.activeMachineIsUsingCloudConnection - width: parent.width height: childrenRect.height @@ -51,7 +46,7 @@ Item { anchors.verticalCenter: parent.verticalCenter height: 18 * screenScaleFactor // TODO: Theme! - width: 216 * screenScaleFactor // TODO: Theme! (Should match column size) + width: UM.Theme.getSize("monitor_column").width Rectangle { color: UM.Theme.getColor("monitor_skeleton_loading") @@ -69,6 +64,7 @@ Item visible: printJob // FIXED-LINE-HEIGHT: + width: parent.width height: parent.height verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering @@ -79,7 +75,8 @@ Item { anchors.verticalCenter: parent.verticalCenter height: 18 * screenScaleFactor // TODO: Theme! - width: 216 * screenScaleFactor // TODO: Theme! (Should match column size) + width: UM.Theme.getSize("monitor_column").width + Rectangle { color: UM.Theme.getColor("monitor_skeleton_loading") @@ -88,6 +85,7 @@ Item visible: !printJob radius: 2 * screenScaleFactor // TODO: Theme! } + Label { text: printJob ? OutputDevice.formatDuration(printJob.timeTotal) : "" @@ -183,13 +181,10 @@ Item id: printerConfiguration anchors.verticalCenter: parent.verticalCenter buildplate: catalog.i18nc("@label", "Glass") - configurations: - [ - base.printJob.configuration.extruderConfigurations[0], - base.printJob.configuration.extruderConfigurations[1] - ] + configurations: base.printJob.configuration.extruderConfigurations height: 72 * screenScaleFactor // TODO: Theme! } + Label { text: printJob && printJob.owner ? printJob.owner : "" color: UM.Theme.getColor("monitor_text_primary") @@ -217,7 +212,7 @@ Item } width: 32 * screenScaleFactor // TODO: Theme! height: 32 * screenScaleFactor // TODO: Theme! - enabled: !cloudConnection + enabled: OutputDevice.supportsPrintJobActions onClicked: enabled ? contextMenu.switchPopupState() : {} visible: { @@ -247,10 +242,10 @@ Item enabled: !contextMenuButton.enabled } - MonitorInfoBlurb - { - id: contextMenuDisabledInfo - text: catalog.i18nc("@info", "These options are not available because you are monitoring a cloud printer.") - target: contextMenuButton - } -} \ No newline at end of file + MonitorInfoBlurb + { + id: contextMenuDisabledInfo + text: catalog.i18nc("@info", "Please update your printer's firmware to manage the queue remotely.") + target: contextMenuButton + } +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobPreview.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobPreview.qml index a392571757..7492b4e8e4 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobPreview.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobPreview.qml @@ -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 QtQuick 2.2 @@ -41,7 +41,7 @@ Item UM.RecolorImage { id: ultiBotImage - + anchors.centerIn: printJobPreview color: UM.Theme.getColor("monitor_placeholder_image") height: printJobPreview.height @@ -98,4 +98,4 @@ Item visible: source != "" width: 0.5 * printJobPreview.width } -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml index bcc7f9a358..0a478c8543 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml @@ -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 QtQuick 2.3 @@ -20,7 +20,7 @@ Item property var printJob: null width: childrenRect.width - height: 18 * screenScaleFactor // TODO: Theme! + height: UM.Theme.getSize("monitor_text_line").height UM.ProgressBar { @@ -28,24 +28,28 @@ Item anchors { verticalCenter: parent.verticalCenter + left: parent.left } value: printJob ? printJob.progress : 0 + width: UM.Theme.getSize("monitor_progress_bar").width } + Label { id: percentLabel anchors { left: progressBar.right - leftMargin: 18 * screenScaleFactor // TODO: Theme! + leftMargin: UM.Theme.getSize("monitor_margin").width + verticalCenter: parent.verticalCenter } text: printJob ? Math.round(printJob.progress * 100) + "%" : "0%" color: printJob && printJob.isActive ? UM.Theme.getColor("monitor_text_primary") : UM.Theme.getColor("monitor_text_disabled") width: contentWidth - font: UM.Theme.getFont("medium") // 14pt, regular + font: UM.Theme.getFont("default") // 12pt, regular // FIXED-LINE-HEIGHT: - height: 18 * screenScaleFactor // TODO: Theme! + height: UM.Theme.getSize("monitor_text_line").height verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering } @@ -55,51 +59,52 @@ Item anchors { left: percentLabel.right - leftMargin: 18 * screenScaleFactor // TODO: Theme! + leftMargin: UM.Theme.getSize("monitor_margin").width + verticalCenter: parent.verticalCenter } color: UM.Theme.getColor("monitor_text_primary") - font: UM.Theme.getFont("medium") // 14pt, 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 // FIXED-LINE-HEIGHT: - height: 18 * screenScaleFactor // TODO: Theme! + height: UM.Theme.getSize("monitor_text_line").height verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering } -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml index f4295ee18d..9242abacdd 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml @@ -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 QtQuick 2.3 @@ -81,7 +81,7 @@ Item mipmap: true } } - + Item { @@ -90,7 +90,7 @@ Item verticalCenter: parent.verticalCenter } width: 180 * screenScaleFactor // TODO: Theme! - height: printerNameLabel.height + printerFamilyPill.height + 6 * screenScaleFactor // TODO: Theme! + height: childrenRect.height Rectangle { @@ -99,7 +99,7 @@ Item height: 18 * screenScaleFactor // TODO: Theme! width: parent.width radius: 2 * screenScaleFactor // TODO: Theme! - + Label { text: printer && printer.name ? printer.name : "" @@ -135,6 +135,54 @@ Item } text: printer ? printer.type : "" } + Item + { + id: managePrinterLink + anchors { + top: printerFamilyPill.bottom + topMargin: 6 * screenScaleFactor + } + height: 18 * screenScaleFactor // TODO: Theme! + width: childrenRect.width + + Label + { + id: managePrinterText + anchors.verticalCenter: managePrinterLink.verticalCenter + color: UM.Theme.getColor("monitor_text_link") + font: UM.Theme.getFont("default") + linkColor: UM.Theme.getColor("monitor_text_link") + text: catalog.i18nc("@label link to Connect and Cloud interfaces", "Manage printer") + renderType: Text.NativeRendering + } + UM.RecolorImage + { + id: externalLinkIcon + anchors + { + left: managePrinterText.right + leftMargin: 6 * screenScaleFactor + verticalCenter: managePrinterText.verticalCenter + } + color: UM.Theme.getColor("monitor_text_link") + source: UM.Theme.getIcon("external_link") + width: 12 * screenScaleFactor + height: 12 * screenScaleFactor + } + } + MouseArea + { + anchors.fill: managePrinterLink + onClicked: OutputDevice.openPrintJobControlPanel() + onEntered: + { + manageQueueText.font.underline = true + } + onExited: + { + manageQueueText.font.underline = false + } + } } MonitorPrinterConfiguration @@ -172,8 +220,7 @@ Item } width: 36 * screenScaleFactor // TODO: Theme! height: 36 * screenScaleFactor // TODO: Theme! - enabled: !cloudConnection - + enabled: OutputDevice.supportsPrintJobActions onClicked: enabled ? contextMenu.switchPopupState() : {} visible: { @@ -206,7 +253,7 @@ Item MonitorInfoBlurb { id: contextMenuDisabledInfo - text: catalog.i18nc("@info", "These options are not available because you are monitoring a cloud printer.") + text: catalog.i18nc("@info", "Please update your printer's firmware to manage the queue remotely.") target: contextMenuButton } @@ -244,7 +291,6 @@ Item } } - // Divider Rectangle { @@ -448,6 +494,25 @@ Item implicitWidth: 96 * screenScaleFactor // TODO: Theme! visible: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length > 0 && !printerStatus.visible onClicked: base.enabled ? overrideConfirmationDialog.open() : {} + enabled: OutputDevice.supportsPrintJobActions + } + + // For cloud printing, add this mouse area over the disabled details button to indicate that it's not available + MouseArea + { + id: detailsButtonDisabledButtonArea + anchors.fill: detailsButton + hoverEnabled: detailsButton.visible && !detailsButton.enabled + onEntered: overrideButtonDisabledInfo.open() + onExited: overrideButtonDisabledInfo.close() + enabled: !detailsButton.enabled + } + + MonitorInfoBlurb + { + id: overrideButtonDisabledInfo + text: catalog.i18nc("@info", "Please update your printer's firmware to manage the queue remotely.") + target: detailsButton } } @@ -456,4 +521,4 @@ Item id: overrideConfirmationDialog printer: base.printer } -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterConfiguration.qml index dbe085e18e..21d08a310c 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterConfiguration.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterConfiguration.qml @@ -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 QtQuick 2.2 @@ -55,4 +55,4 @@ Item anchors.bottom: parent.bottom buildplate: null } -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterPill.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterPill.qml index 584e336a80..44aa1a1f8d 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterPill.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterPill.qml @@ -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 QtQuick 2.2 @@ -11,20 +11,8 @@ import UM 1.2 as UM */ Item { - // The printer name + id: monitorPrinterPill property var text: "" - property var tagText: { - switch(text) { - case "Ultimaker 3": - return "UM 3" - case "Ultimaker 3 Extended": - return "UM 3 EXT" - case "Ultimaker S5": - return "UM S5" - default: - return text - } - } implicitHeight: 18 * screenScaleFactor // TODO: Theme! implicitWidth: Math.max(printerNameLabel.contentWidth + 12 * screenScaleFactor, 36 * screenScaleFactor) // TODO: Theme! @@ -40,9 +28,9 @@ Item id: printerNameLabel anchors.centerIn: parent color: UM.Theme.getColor("monitor_text_primary") - text: tagText + text: monitorPrinterPill.text font.pointSize: 10 // TODO: Theme! - visible: text !== "" + visible: monitorPrinterPill.text !== "" renderType: Text.NativeRendering } -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml index 6025d7acfe..ce692168c3 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml @@ -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 QtQuick 2.2 @@ -42,7 +42,6 @@ Item } height: 18 * screenScaleFactor // TODO: Theme! width: childrenRect.width - visible: !cloudConnection UM.RecolorImage { @@ -65,7 +64,7 @@ Item color: UM.Theme.getColor("monitor_text_link") font: UM.Theme.getFont("medium") // 14pt, regular linkColor: UM.Theme.getColor("monitor_text_link") - text: catalog.i18nc("@label link to connect manager", "Go to Cura Connect") + text: catalog.i18nc("@label link to connect manager", "Manage in browser") renderType: Text.NativeRendering } } @@ -73,9 +72,7 @@ Item MouseArea { anchors.fill: manageQueueLabel - enabled: !cloudConnection - hoverEnabled: !cloudConnection - onClicked: Cura.MachineManager.printerOutputDevices[0].openPrintJobControlPanel() + onClicked: OutputDevice.openPrintJobControlPanel() onEntered: { manageQueueText.font.underline = true @@ -98,6 +95,21 @@ Item } spacing: 18 * screenScaleFactor // TODO: Theme! + Label + { + text: catalog.i18nc("@label", "There are no print jobs in the queue. Slice and send a job to add one.") + color: UM.Theme.getColor("monitor_text_primary") + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + anchors.verticalCenter: parent.verticalCenter + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + renderType: Text.NativeRendering + visible: printJobList.count === 0 + } + Label { text: catalog.i18nc("@label", "Print jobs") @@ -111,6 +123,7 @@ Item height: 18 * screenScaleFactor // TODO: Theme! verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering + visible: printJobList.count > 0 } Label @@ -120,12 +133,13 @@ Item elide: Text.ElideRight font: UM.Theme.getFont("medium") // 14pt, regular anchors.verticalCenter: parent.verticalCenter - width: 216 * screenScaleFactor // TODO: Theme! (Should match column size) + width: UM.Theme.getSize("monitor_column").width // FIXED-LINE-HEIGHT: height: 18 * screenScaleFactor // TODO: Theme! verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering + visible: printJobList.count > 0 } Label @@ -135,12 +149,13 @@ Item elide: Text.ElideRight font: UM.Theme.getFont("medium") // 14pt, regular anchors.verticalCenter: parent.verticalCenter - width: 216 * screenScaleFactor // TODO: Theme! (Should match column size) + width: UM.Theme.getSize("monitor_column").width // FIXED-LINE-HEIGHT: height: 18 * screenScaleFactor // TODO: Theme! verticalAlignment: Text.AlignVCenter renderType: Text.NativeRendering + visible: printJobList.count > 0 } } @@ -172,10 +187,7 @@ Item } model: { - // When printing over the cloud we don't recieve print jobs until there is one, so - // unless there's at least one print job we'll be stuck with skeleton loading - // indefinitely. - if (Cura.MachineManager.activeMachineIsUsingCloudConnection || OutputDevice.receivedPrintJobs) + if (OutputDevice.receivedData) { return OutputDevice.queuedPrintJobs } @@ -184,89 +196,4 @@ Item spacing: 6 // TODO: Theme! } } - - Rectangle - { - anchors - { - horizontalCenter: parent.horizontalCenter - top: printJobQueueHeadings.bottom - topMargin: 12 * screenScaleFactor // TODO: Theme! - } - height: 48 * screenScaleFactor // TODO: Theme! - width: parent.width - color: UM.Theme.getColor("monitor_card_background") - border.color: UM.Theme.getColor("monitor_card_border") - radius: 2 * screenScaleFactor // TODO: Theme! - - visible: printJobList.model.length == 0 - - Row - { - anchors - { - left: parent.left - leftMargin: 18 * screenScaleFactor // TODO: Theme! - verticalCenter: parent.verticalCenter - } - spacing: 18 * screenScaleFactor // TODO: Theme! - height: 18 * screenScaleFactor // TODO: Theme! - - Label - { - text: i18n.i18nc("@info", "All jobs are printed.") - color: UM.Theme.getColor("monitor_text_primary") - font: UM.Theme.getFont("medium") // 14pt, regular - renderType: Text.NativeRendering - } - - Item - { - id: viewPrintHistoryLabel - - height: 18 * screenScaleFactor // TODO: Theme! - width: childrenRect.width - visible: !cloudConnection - - UM.RecolorImage - { - id: printHistoryIcon - anchors.verticalCenter: parent.verticalCenter - color: UM.Theme.getColor("monitor_text_link") - source: UM.Theme.getIcon("external_link") - width: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!) - height: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!) - } - Label - { - id: viewPrintHistoryText - anchors - { - left: printHistoryIcon.right - leftMargin: 6 * screenScaleFactor // TODO: Theme! - verticalCenter: printHistoryIcon.verticalCenter - } - color: UM.Theme.getColor("monitor_text_link") - font: UM.Theme.getFont("medium") // 14pt, regular - linkColor: UM.Theme.getColor("monitor_text_link") - text: catalog.i18nc("@label link to connect manager", "View print history") - renderType: Text.NativeRendering - } - MouseArea - { - anchors.fill: parent - hoverEnabled: true - onClicked: Cura.MachineManager.printerOutputDevices[0].openPrintJobControlPanel() - onEntered: - { - viewPrintHistoryText.font.underline = true - } - onExited: - { - viewPrintHistoryText.font.underline = false - } - } - } - } - } } diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorStage.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorStage.qml index e68418c21a..47c45f8b11 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/MonitorStage.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorStage.qml @@ -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 QtQuick 2.2 @@ -25,7 +25,7 @@ Component } width: maximumWidth color: UM.Theme.getColor("monitor_stage_background") - + // Enable keyboard navigation. NOTE: This is done here so that we can also potentially // forward to the queue items in the future. (Deleting selected print job, etc.) Keys.forwardTo: carousel @@ -52,10 +52,7 @@ Component id: carousel printers: { - // When printing over the cloud we don't recieve print jobs until there is one, so - // unless there's at least one print job we'll be stuck with skeleton loading - // indefinitely. - if (Cura.MachineManager.activeMachineIsUsingCloudConnection || OutputDevice.receivedPrintJobs) + if (OutputDevice.receivedData) { return OutputDevice.printers } diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml index ff5635e45d..78b94ce259 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml @@ -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 QtQuick 2.2 @@ -21,4 +21,4 @@ Button { height: visible ? 39 * screenScaleFactor : 0; // TODO: Theme! hoverEnabled: true; width: parent.width; -} \ No newline at end of file +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml index 548e5ce1ea..bcba60352c 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml @@ -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 QtQuick 2.2 diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml index 77b481f6d8..cfbb30fdfb 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml @@ -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 QtQuick 2.2 diff --git a/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml b/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml deleted file mode 100644 index c99ed1688e..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Layouts 1.1 -import QtQuick.Window 2.1 -import UM 1.2 as UM -import Cura 1.0 as Cura - -Item { - id: base; - property string activeQualityDefinitionId: Cura.MachineManager.activeQualityDefinitionId; - property bool isUM3: activeQualityDefinitionId == "ultimaker3" || activeQualityDefinitionId.match("ultimaker_") != null; - property bool printerConnected: Cura.MachineManager.printerConnected; - property bool printerAcceptsCommands: - { - if (printerConnected && Cura.MachineManager.printerOutputDevices[0]) - { - return Cura.MachineManager.printerOutputDevices[0].acceptsCommands - } - return false - } - property bool authenticationRequested: - { - if (printerConnected && Cura.MachineManager.printerOutputDevices[0]) - { - var device = Cura.MachineManager.printerOutputDevices[0] - // AuthState.AuthenticationRequested or AuthState.AuthenticationReceived - return device.authenticationState == 2 || device.authenticationState == 5 - } - return false - } - property var materialNames: - { - if (printerConnected && Cura.MachineManager.printerOutputDevices[0]) - { - return Cura.MachineManager.printerOutputDevices[0].materialNames - } - return null - } - property var hotendIds: - { - if (printerConnected && Cura.MachineManager.printerOutputDevices[0]) - { - return Cura.MachineManager.printerOutputDevices[0].hotendIds - } - return null - } - - UM.I18nCatalog { - id: catalog; - name: "cura"; - } - - Row { - objectName: "networkPrinterConnectButton"; - spacing: UM.Theme.getSize("default_margin").width; - visible: isUM3; - - Button { - height: UM.Theme.getSize("save_button_save_to_button").height; - onClicked: Cura.MachineManager.printerOutputDevices[0].requestAuthentication(); - style: UM.Theme.styles.print_setup_action_button; - text: catalog.i18nc("@action:button", "Request Access"); - tooltip: catalog.i18nc("@info:tooltip", "Send access request to the printer"); - visible: printerConnected && !printerAcceptsCommands && !authenticationRequested; - } - - Button { - height: UM.Theme.getSize("save_button_save_to_button").height; - onClicked: connectActionDialog.show(); - style: UM.Theme.styles.print_setup_action_button; - text: catalog.i18nc("@action:button", "Connect"); - tooltip: catalog.i18nc("@info:tooltip", "Connect to a printer"); - visible: !printerConnected; - } - } - - UM.Dialog { - id: connectActionDialog; - rightButtons: Button { - iconName: "dialog-close"; - onClicked: connectActionDialog.reject(); - text: catalog.i18nc("@action:button", "Close"); - } - - Loader { - anchors.fill: parent; - source: "DiscoverUM3Action.qml"; - } - } -} diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py index adff94bbbc..ed8d22a478 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.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 json from json import JSONDecodeError @@ -11,18 +11,19 @@ from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManage from UM.Logger import Logger from cura import UltimakerCloudAuthentication from cura.API import Account + from .ToolPathUploader import ToolPathUploader -from ..Models import BaseModel -from .Models.CloudClusterResponse import CloudClusterResponse -from .Models.CloudError import CloudError -from .Models.CloudClusterStatus import CloudClusterStatus -from .Models.CloudPrintJobUploadRequest import CloudPrintJobUploadRequest -from .Models.CloudPrintResponse import CloudPrintResponse -from .Models.CloudPrintJobResponse import CloudPrintJobResponse +from ..Models.BaseModel import BaseModel +from ..Models.Http.CloudClusterResponse import CloudClusterResponse +from ..Models.Http.CloudError import CloudError +from ..Models.Http.CloudClusterStatus import CloudClusterStatus +from ..Models.Http.CloudPrintJobUploadRequest import CloudPrintJobUploadRequest +from ..Models.Http.CloudPrintResponse import CloudPrintResponse +from ..Models.Http.CloudPrintJobResponse import CloudPrintJobResponse ## The generic type variable used to document the methods below. -CloudApiClientModel = TypeVar("CloudApiClientModel", bound = BaseModel) +CloudApiClientModel = TypeVar("CloudApiClientModel", bound=BaseModel) ## The cloud API client is responsible for handling the requests and responses from the cloud. @@ -34,6 +35,9 @@ class CloudApiClient: CLUSTER_API_ROOT = "{}/connect/v1".format(ROOT_PATH) CURA_API_ROOT = "{}/cura/v1".format(ROOT_PATH) + # In order to avoid garbage collection we keep the callbacks in this list. + _anti_gc_callbacks = [] # type: List[Callable[[], None]] + ## Initializes a new cloud API client. # \param account: The user's account object # \param on_error: The callback to be called whenever we receive errors from the server. @@ -43,8 +47,6 @@ class CloudApiClient: self._account = account self._on_error = on_error self._upload = None # type: Optional[ToolPathUploader] - # In order to avoid garbage collection we keep the callbacks in this list. - self._anti_gc_callbacks = [] # type: List[Callable[[], None]] ## Gets the account used for the API. @property @@ -54,7 +56,7 @@ class CloudApiClient: ## Retrieves all the clusters for the user that is currently logged in. # \param on_finished: The function to be called after the result is parsed. def getClusters(self, on_finished: Callable[[List[CloudClusterResponse]], Any]) -> None: - url = "{}/clusters".format(self.CLUSTER_API_ROOT) + url = "{}/clusters?status=active".format(self.CLUSTER_API_ROOT) reply = self._manager.get(self._createEmptyRequest(url)) self._addCallback(reply, on_finished, CloudClusterResponse) @@ -69,8 +71,8 @@ class CloudApiClient: ## Requests the cloud to register the upload of a print job mesh. # \param request: The request object. # \param on_finished: The function to be called after the result is parsed. - def requestUpload(self, request: CloudPrintJobUploadRequest, on_finished: Callable[[CloudPrintJobResponse], Any] - ) -> None: + def requestUpload(self, request: CloudPrintJobUploadRequest, + on_finished: Callable[[CloudPrintJobResponse], Any]) -> None: url = "{}/jobs/upload".format(self.CURA_API_ROOT) body = json.dumps({"data": request.toDict()}) reply = self._manager.put(self._createEmptyRequest(url), body.encode()) @@ -96,6 +98,16 @@ class CloudApiClient: reply = self._manager.post(self._createEmptyRequest(url), b"") self._addCallback(reply, on_finished, CloudPrintResponse) + ## Send a print job action to the cluster for the given print job. + # \param cluster_id: The ID of the cluster. + # \param cluster_job_id: The ID of the print job within the cluster. + # \param action: The name of the action to execute. + def doPrintJobAction(self, cluster_id: str, cluster_job_id: str, action: str, + data: Optional[Dict[str, Any]] = None) -> None: + body = json.dumps({"data": data}).encode() if data else b"" + url = "{}/clusters/{}/print_jobs/{}/action/{}".format(self.CLUSTER_API_ROOT, cluster_id, cluster_job_id, action) + self._manager.post(self._createEmptyRequest(url), body) + ## We override _createEmptyRequest in order to add the user credentials. # \param url: The URL to request # \param content_type: The type of the body contents. @@ -156,12 +168,16 @@ class CloudApiClient: reply: QNetworkReply, on_finished: Union[Callable[[CloudApiClientModel], Any], Callable[[List[CloudApiClientModel]], Any]], - model: Type[CloudApiClientModel], - ) -> None: + model: Type[CloudApiClientModel]) -> None: def parse() -> None: - status_code, response = self._parseReply(reply) self._anti_gc_callbacks.remove(parse) - return self._parseModels(response, on_finished, model) + + # Don't try to parse the reply if we didn't get one + if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) is None: + return + + status_code, response = self._parseReply(reply) + self._parseModels(response, on_finished, model) self._anti_gc_callbacks.append(parse) reply.finished.connect(parse) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputController.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputController.py deleted file mode 100644 index bd56ef3185..0000000000 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputController.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. -from cura.PrinterOutput.PrinterOutputController import PrinterOutputController - -from typing import TYPE_CHECKING -if TYPE_CHECKING: - from .CloudOutputDevice import CloudOutputDevice - - -class CloudOutputController(PrinterOutputController): - def __init__(self, output_device: "CloudOutputDevice") -> None: - super().__init__(output_device) - - # The cloud connection only supports fetching the printer and queue status and adding a job to the queue. - # To let the UI know this we mark all features below as False. - self.can_pause = False - self.can_abort = False - self.can_pre_heat_bed = False - self.can_pre_heat_hotends = False - self.can_send_raw_gcode = False - self.can_control_manually = False - self.can_update_firmware = False diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py index df513f4174..b544490cfb 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py @@ -1,39 +1,34 @@ -# 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 - from time import time -from typing import Dict, List, Optional, Set, cast +from typing import List, Optional, cast from PyQt5.QtCore import QObject, QUrl, pyqtProperty, pyqtSignal, pyqtSlot +from PyQt5.QtGui import QDesktopServices from UM import i18nCatalog from UM.Backend.Backend import BackendState from UM.FileHandler.FileHandler import FileHandler from UM.Logger import Logger -from UM.Message import Message -from UM.PluginRegistry import PluginRegistry -from UM.Qt.Duration import Duration, DurationFormat from UM.Scene.SceneNode import SceneNode - +from UM.Version import Version from cura.CuraApplication import CuraApplication -from cura.PrinterOutput.NetworkedPrinterOutputDevice import AuthState, NetworkedPrinterOutputDevice -from cura.PrinterOutput.Models.PrinterOutputModel import PrinterOutputModel +from cura.PrinterOutput.NetworkedPrinterOutputDevice import AuthState from cura.PrinterOutput.PrinterOutputDevice import ConnectionType -from .CloudOutputController import CloudOutputController -from ..MeshFormatHandler import MeshFormatHandler -from ..UM3PrintJobOutputModel import UM3PrintJobOutputModel -from .CloudProgressMessage import CloudProgressMessage from .CloudApiClient import CloudApiClient -from .Models.CloudClusterResponse import CloudClusterResponse -from .Models.CloudClusterStatus import CloudClusterStatus -from .Models.CloudPrintJobUploadRequest import CloudPrintJobUploadRequest -from .Models.CloudPrintResponse import CloudPrintResponse -from .Models.CloudPrintJobResponse import CloudPrintJobResponse -from .Models.CloudClusterPrinterStatus import CloudClusterPrinterStatus -from .Models.CloudClusterPrintJobStatus import CloudClusterPrintJobStatus -from .Utils import findChanges, formatDateCompleted, formatTimeCompleted +from ..ExportFileJob import ExportFileJob +from ..UltimakerNetworkedPrinterOutputDevice import UltimakerNetworkedPrinterOutputDevice +from ..Messages.PrintJobUploadBlockedMessage import PrintJobUploadBlockedMessage +from ..Messages.PrintJobUploadErrorMessage import PrintJobUploadErrorMessage +from ..Messages.PrintJobUploadSuccessMessage import PrintJobUploadSuccessMessage +from ..Models.Http.CloudClusterResponse import CloudClusterResponse +from ..Models.Http.CloudClusterStatus import CloudClusterStatus +from ..Models.Http.CloudPrintJobUploadRequest import CloudPrintJobUploadRequest +from ..Models.Http.CloudPrintResponse import CloudPrintResponse +from ..Models.Http.CloudPrintJobResponse import CloudPrintJobResponse +from ..Models.Http.ClusterPrinterStatus import ClusterPrinterStatus +from ..Models.Http.ClusterPrintJobStatus import ClusterPrintJobStatus I18N_CATALOG = i18nCatalog("cura") @@ -43,20 +38,22 @@ I18N_CATALOG = i18nCatalog("cura") # Currently it only supports viewing the printer and print job status and adding a new job to the queue. # As such, those methods have been implemented here. # Note that this device represents a single remote cluster, not a list of multiple clusters. -class CloudOutputDevice(NetworkedPrinterOutputDevice): +class CloudOutputDevice(UltimakerNetworkedPrinterOutputDevice): - # The interval with which the remote clusters are checked + # The interval with which the remote cluster is checked. + # We can do this relatively often as this API call is quite fast. CHECK_CLUSTER_INTERVAL = 10.0 # seconds - # Signal triggered when the print jobs in the queue were changed. - printJobsChanged = pyqtSignal() + # Override the network response timeout in seconds after which we consider the device offline. + # For cloud this needs to be higher because the interval at which we check the status is higher as well. + NETWORK_RESPONSE_CONSIDER_OFFLINE = 15.0 # seconds - # Signal triggered when the selected printer in the UI should be changed. - activePrinterChanged = pyqtSignal() + # The minimum version of firmware that support print job actions over cloud. + PRINT_JOB_ACTIONS_MIN_VERSION = Version("5.3.0") # Notify can only use signals that are defined by the class that they are in, not inherited ones. # Therefore we create a private signal used to trigger the printersChanged signal. - _clusterPrintersChanged = pyqtSignal() + _cloudClusterPrintersChanged = pyqtSignal() ## Creates a new cloud output device # \param api_client: The client that will run the API calls @@ -75,44 +72,29 @@ class CloudOutputDevice(NetworkedPrinterOutputDevice): b"cluster_size": b"1" # cloud devices are always clusters of at least one } - super().__init__(device_id = cluster.cluster_id, address = "", - connection_type = ConnectionType.CloudConnection, properties = properties, parent = parent) - self._api = api_client - self._cluster = cluster + super().__init__( + device_id=cluster.cluster_id, + address="", + connection_type=ConnectionType.CloudConnection, + properties=properties, + parent=parent + ) + self._api = api_client + self._account = api_client.account + self._cluster = cluster + self.setAuthenticationState(AuthState.NotAuthenticated) self._setInterfaceElements() - self._account = api_client.account - - # We use the Cura Connect monitor tab to get most functionality right away. - if PluginRegistry.getInstance() is not None: - plugin_path = PluginRegistry.getInstance().getPluginPath("UM3NetworkPrinting") - if plugin_path is None: - Logger.log("e", "Cloud not find plugin path for plugin UM3NetworkPrnting") - raise RuntimeError("Cloud not find plugin path for plugin UM3NetworkPrnting") - self._monitor_view_qml_path = os.path.join(plugin_path, "resources", "qml", "MonitorStage.qml") - # Trigger the printersChanged signal when the private signal is triggered. - self.printersChanged.connect(self._clusterPrintersChanged) - - # We keep track of which printer is visible in the monitor page. - self._active_printer = None # type: Optional[PrinterOutputModel] - - # Properties to populate later on with received cloud data. - self._print_jobs = [] # type: List[UM3PrintJobOutputModel] - self._number_of_extruders = 2 # All networked printers are dual-extrusion Ultimaker machines. - - # We only allow a single upload at a time. - self._progress = CloudProgressMessage() + self.printersChanged.connect(self._cloudClusterPrintersChanged) # Keep server string of the last generated time to avoid updating models more than once for the same response - self._received_printers = None # type: Optional[List[CloudClusterPrinterStatus]] - self._received_print_jobs = None # type: Optional[List[CloudClusterPrintJobStatus]] - - # A set of the user's job IDs that have finished - self._finished_jobs = set() # type: Set[str] + self._received_printers = None # type: Optional[List[ClusterPrinterStatus]] + self._received_print_jobs = None # type: Optional[List[ClusterPrintJobStatus]] # Reference to the uploaded print job / mesh + # We do this to prevent re-uploading the same file multiple times. self._tool_path = None # type: Optional[bytes] self._uploaded_print_job = None # type: Optional[CloudPrintJobResponse] @@ -123,9 +105,12 @@ class CloudOutputDevice(NetworkedPrinterOutputDevice): super().connect() Logger.log("i", "Connected to cluster %s", self.key) CuraApplication.getInstance().getBackend().backendStateChange.connect(self._onBackendStateChange) + self._update() ## Disconnects the device def disconnect(self) -> None: + if not self.isConnected(): + return super().disconnect() Logger.log("i", "Disconnected from cluster %s", self.key) CuraApplication.getInstance().getBackend().backendStateChange.disconnect(self._onBackendStateChange) @@ -135,6 +120,149 @@ class CloudOutputDevice(NetworkedPrinterOutputDevice): self._tool_path = None self._uploaded_print_job = None + ## Checks whether the given network key is found in the cloud's host name + def matchesNetworkKey(self, network_key: str) -> bool: + # Typically, a network key looks like "ultimakersystem-aabbccdd0011._ultimaker._tcp.local." + # the host name should then be "ultimakersystem-aabbccdd0011" + if network_key.startswith(str(self.clusterData.host_name or "")): + return True + # However, for manually added printers, the local IP address is used in lieu of a proper + # network key, so check for that as well. It is in the format "manual:10.1.10.1". + if network_key.endswith(str(self.clusterData.host_internal_ip or "")): + return True + return False + + ## Set all the interface elements and texts for this output device. + def _setInterfaceElements(self) -> None: + self.setPriority(2) # Make sure we end up below the local networking and above 'save to file'. + self.setShortDescription(I18N_CATALOG.i18nc("@action:button", "Print via Cloud")) + self.setDescription(I18N_CATALOG.i18nc("@properties:tooltip", "Print via Cloud")) + self.setConnectionText(I18N_CATALOG.i18nc("@info:status", "Connected via Cloud")) + + ## Called when the network data should be updated. + def _update(self) -> None: + super()._update() + if time() - self._time_of_last_request < self.CHECK_CLUSTER_INTERVAL: + return # avoid calling the cloud too often + self._time_of_last_request = time() + if self._account.isLoggedIn: + self.setAuthenticationState(AuthState.Authenticated) + self._last_request_time = time() + self._api.getClusterStatus(self.key, self._onStatusCallFinished) + else: + self.setAuthenticationState(AuthState.NotAuthenticated) + + ## Method called when HTTP request to status endpoint is finished. + # Contains both printers and print jobs statuses in a single response. + def _onStatusCallFinished(self, status: CloudClusterStatus) -> None: + self._responseReceived() + if status.printers != self._received_printers: + self._received_printers = status.printers + self._updatePrinters(status.printers) + if status.print_jobs != self._received_print_jobs: + self._received_print_jobs = status.print_jobs + self._updatePrintJobs(status.print_jobs) + + ## Called when Cura requests an output device to receive a (G-code) file. + def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, + file_handler: Optional[FileHandler] = None, filter_by_machine: bool = False, **kwargs) -> None: + + # Show an error message if we're already sending a job. + if self._progress.visible: + PrintJobUploadBlockedMessage().show() + return + + # Indicate we have started sending a job. + self.writeStarted.emit(self) + + # The mesh didn't change, let's not upload it to the cloud again. + # Note that self.writeFinished is called in _onPrintUploadCompleted as well. + if self._uploaded_print_job: + self._api.requestPrint(self.key, self._uploaded_print_job.job_id, self._onPrintUploadCompleted) + return + + # Export the scene to the correct file type. + job = ExportFileJob(file_handler=file_handler, nodes=nodes, firmware_version=self.firmwareVersion) + job.finished.connect(self._onPrintJobCreated) + job.start() + + ## Handler for when the print job was created locally. + # It can now be sent over the cloud. + def _onPrintJobCreated(self, job: ExportFileJob) -> None: + output = job.getOutput() + self._tool_path = output # store the tool path to prevent re-uploading when printing the same file again + request = CloudPrintJobUploadRequest( + job_name=job.getFileName(), + file_size=len(output), + content_type=job.getMimeType(), + ) + self._api.requestUpload(request, self._uploadPrintJob) + + ## Uploads the mesh when the print job was registered with the cloud API. + # \param job_response: The response received from the cloud API. + def _uploadPrintJob(self, job_response: CloudPrintJobResponse) -> None: + if not self._tool_path: + return self._onUploadError() + self._progress.show() + self._uploaded_print_job = job_response # store the last uploaded job to prevent re-upload of the same file + self._api.uploadToolPath(job_response, self._tool_path, self._onPrintJobUploaded, self._progress.update, + self._onUploadError) + + ## Requests the print to be sent to the printer when we finished uploading the mesh. + def _onPrintJobUploaded(self) -> None: + self._progress.update(100) + print_job = cast(CloudPrintJobResponse, self._uploaded_print_job) + self._api.requestPrint(self.key, print_job.job_id, self._onPrintUploadCompleted) + + ## Shows a message when the upload has succeeded + # \param response: The response from the cloud API. + def _onPrintUploadCompleted(self, response: CloudPrintResponse) -> None: + self._progress.hide() + PrintJobUploadSuccessMessage().show() + self.writeFinished.emit() + + ## Displays the given message if uploading the mesh has failed + # \param message: The message to display. + def _onUploadError(self, message: str = None) -> None: + self._progress.hide() + self._uploaded_print_job = None + PrintJobUploadErrorMessage(message).show() + self.writeError.emit() + + ## Whether the printer that this output device represents supports print job actions via the cloud. + @pyqtProperty(bool, notify=_cloudClusterPrintersChanged) + def supportsPrintJobActions(self) -> bool: + if not self._printers: + return False + version_number = self.printers[0].firmwareVersion.split(".") + firmware_version = Version([version_number[0], version_number[1], version_number[2]]) + return firmware_version >= self.PRINT_JOB_ACTIONS_MIN_VERSION + + ## Set the remote print job state. + def setJobState(self, print_job_uuid: str, state: str) -> None: + self._api.doPrintJobAction(self._cluster.cluster_id, print_job_uuid, state) + + @pyqtSlot(str, name="sendJobToTop") + def sendJobToTop(self, print_job_uuid: str) -> None: + self._api.doPrintJobAction(self._cluster.cluster_id, print_job_uuid, "move", + {"list": "queued", "to_position": 0}) + + @pyqtSlot(str, name="deleteJobFromQueue") + def deleteJobFromQueue(self, print_job_uuid: str) -> None: + self._api.doPrintJobAction(self._cluster.cluster_id, print_job_uuid, "remove") + + @pyqtSlot(str, name="forceSendJob") + def forceSendJob(self, print_job_uuid: str) -> None: + self._api.doPrintJobAction(self._cluster.cluster_id, print_job_uuid, "force") + + @pyqtSlot(name="openPrintJobControlPanel") + def openPrintJobControlPanel(self) -> None: + QDesktopServices.openUrl(QUrl(self.clusterCloudUrl)) + + @pyqtSlot(name="openPrinterControlPanel") + def openPrinterControlPanel(self) -> None: + QDesktopServices.openUrl(QUrl(self.clusterCloudUrl)) + ## Gets the cluster response from which this device was created. @property def clusterData(self) -> CloudClusterResponse: @@ -145,307 +273,8 @@ class CloudOutputDevice(NetworkedPrinterOutputDevice): def clusterData(self, value: CloudClusterResponse) -> None: self._cluster = value - ## Checks whether the given network key is found in the cloud's host name - def matchesNetworkKey(self, network_key: str) -> bool: - # Typically, a network key looks like "ultimakersystem-aabbccdd0011._ultimaker._tcp.local." - # the host name should then be "ultimakersystem-aabbccdd0011" - if network_key.startswith(self.clusterData.host_name): - return True - - # However, for manually added printers, the local IP address is used in lieu of a proper - # network key, so check for that as well - if self.clusterData.host_internal_ip is not None and network_key.find(self.clusterData.host_internal_ip): - return True - - return False - - ## Set all the interface elements and texts for this output device. - def _setInterfaceElements(self) -> None: - self.setPriority(2) # Make sure we end up below the local networking and above 'save to file' - self.setName(self._id) - self.setShortDescription(I18N_CATALOG.i18nc("@action:button", "Print via Cloud")) - self.setDescription(I18N_CATALOG.i18nc("@properties:tooltip", "Print via Cloud")) - self.setConnectionText(I18N_CATALOG.i18nc("@info:status", "Connected via Cloud")) - - ## Called when Cura requests an output device to receive a (G-code) file. - def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, - file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: - - # Show an error message if we're already sending a job. - if self._progress.visible: - message = Message( - text = I18N_CATALOG.i18nc("@info:status", "Sending new jobs (temporarily) blocked, still sending the previous print job."), - title = I18N_CATALOG.i18nc("@info:title", "Cloud error"), - lifetime = 10 - ) - message.show() - return - - if self._uploaded_print_job: - # The mesh didn't change, let's not upload it again - self._api.requestPrint(self.key, self._uploaded_print_job.job_id, self._onPrintUploadCompleted) - return - - # Indicate we have started sending a job. - self.writeStarted.emit(self) - - mesh_format = MeshFormatHandler(file_handler, self.firmwareVersion) - if not mesh_format.is_valid: - Logger.log("e", "Missing file or mesh writer!") - return self._onUploadError(I18N_CATALOG.i18nc("@info:status", "Could not export print job.")) - - mesh = mesh_format.getBytes(nodes) - - self._tool_path = mesh - request = CloudPrintJobUploadRequest( - job_name = file_name or mesh_format.file_extension, - file_size = len(mesh), - content_type = mesh_format.mime_type, - ) - self._api.requestUpload(request, self._onPrintJobCreated) - - ## Called when the network data should be updated. - def _update(self) -> None: - super()._update() - if self._last_request_time and time() - self._last_request_time < self.CHECK_CLUSTER_INTERVAL: - return # Avoid calling the cloud too often - - Logger.log("d", "Updating: %s - %s >= %s", time(), self._last_request_time, self.CHECK_CLUSTER_INTERVAL) - if self._account.isLoggedIn: - self.setAuthenticationState(AuthState.Authenticated) - self._last_request_time = time() - self._api.getClusterStatus(self.key, self._onStatusCallFinished) - else: - self.setAuthenticationState(AuthState.NotAuthenticated) - - ## Method called when HTTP request to status endpoint is finished. - # Contains both printers and print jobs statuses in a single response. - def _onStatusCallFinished(self, status: CloudClusterStatus) -> None: - # Update all data from the cluster. - self._last_response_time = time() - if self._received_printers != status.printers: - self._received_printers = status.printers - self._updatePrinters(status.printers) - - if status.print_jobs != self._received_print_jobs: - self._received_print_jobs = status.print_jobs - self._updatePrintJobs(status.print_jobs) - - ## Updates the local list of printers with the list received from the cloud. - # \param jobs: The printers received from the cloud. - def _updatePrinters(self, printers: List[CloudClusterPrinterStatus]) -> None: - previous = {p.key: p for p in self._printers} # type: Dict[str, PrinterOutputModel] - received = {p.uuid: p for p in printers} # type: Dict[str, CloudClusterPrinterStatus] - removed_printers, added_printers, updated_printers = findChanges(previous, received) - - for removed_printer in removed_printers: - if self._active_printer == removed_printer: - self.setActivePrinter(None) - self._printers.remove(removed_printer) - - for added_printer in added_printers: - self._printers.append(added_printer.createOutputModel(CloudOutputController(self))) - - for model, printer in updated_printers: - printer.updateOutputModel(model) - - # Always have an active printer - if self._printers and not self._active_printer: - self.setActivePrinter(self._printers[0]) - - if added_printers or removed_printers: - self.printersChanged.emit() - - ## Updates the local list of print jobs with the list received from the cloud. - # \param jobs: The print jobs received from the cloud. - def _updatePrintJobs(self, jobs: List[CloudClusterPrintJobStatus]) -> None: - received = {j.uuid: j for j in jobs} # type: Dict[str, CloudClusterPrintJobStatus] - previous = {j.key: j for j in self._print_jobs} # type: Dict[str, UM3PrintJobOutputModel] - - removed_jobs, added_jobs, updated_jobs = findChanges(previous, received) - - for removed_job in removed_jobs: - if removed_job.assignedPrinter: - removed_job.assignedPrinter.updateActivePrintJob(None) - removed_job.stateChanged.disconnect(self._onPrintJobStateChanged) - self._print_jobs.remove(removed_job) - - for added_job in added_jobs: - self._addPrintJob(added_job) - - for model, job in updated_jobs: - job.updateOutputModel(model) - if job.printer_uuid: - self._updateAssignedPrinter(model, job.printer_uuid) - - # We only have to update when jobs are added or removed - # updated jobs push their changes via their output model - if added_jobs or removed_jobs: - self.printJobsChanged.emit() - - ## Registers a new print job received via the cloud API. - # \param job: The print job received. - def _addPrintJob(self, job: CloudClusterPrintJobStatus) -> None: - model = job.createOutputModel(CloudOutputController(self)) - model.stateChanged.connect(self._onPrintJobStateChanged) - if job.printer_uuid: - self._updateAssignedPrinter(model, job.printer_uuid) - self._print_jobs.append(model) - - ## Handles the event of a change in a print job state - def _onPrintJobStateChanged(self) -> None: - user_name = self._getUserName() - # TODO: confirm that notifications in Cura are still required - for job in self._print_jobs: - if job.state == "wait_cleanup" and job.key not in self._finished_jobs and job.owner == user_name: - self._finished_jobs.add(job.key) - Message( - title = I18N_CATALOG.i18nc("@info:status", "Print finished"), - text = (I18N_CATALOG.i18nc("@info:status", "Printer '{printer_name}' has finished printing '{job_name}'.").format( - printer_name = job.assignedPrinter.name, - job_name = job.name - ) if job.assignedPrinter else - I18N_CATALOG.i18nc("@info:status", "The print job '{job_name}' was finished.").format( - job_name = job.name - )), - ).show() - - ## Updates the printer assignment for the given print job model. - def _updateAssignedPrinter(self, model: UM3PrintJobOutputModel, printer_uuid: str) -> None: - printer = next((p for p in self._printers if printer_uuid == p.key), None) - if not printer: - Logger.log("w", "Missing printer %s for job %s in %s", model.assignedPrinter, model.key, - [p.key for p in self._printers]) - return - - printer.updateActivePrintJob(model) - model.updateAssignedPrinter(printer) - - ## Uploads the mesh when the print job was registered with the cloud API. - # \param job_response: The response received from the cloud API. - def _onPrintJobCreated(self, job_response: CloudPrintJobResponse) -> None: - self._progress.show() - self._uploaded_print_job = job_response - tool_path = cast(bytes, self._tool_path) - self._api.uploadToolPath(job_response, tool_path, self._onPrintJobUploaded, self._progress.update, self._onUploadError) - - ## Requests the print to be sent to the printer when we finished uploading the mesh. - def _onPrintJobUploaded(self) -> None: - self._progress.update(100) - print_job = cast(CloudPrintJobResponse, self._uploaded_print_job) - self._api.requestPrint(self.key, print_job.job_id, self._onPrintUploadCompleted) - - ## Displays the given message if uploading the mesh has failed - # \param message: The message to display. - def _onUploadError(self, message: str = None) -> None: - self._progress.hide() - self._uploaded_print_job = None - Message( - text = message or I18N_CATALOG.i18nc("@info:text", "Could not upload the data to the printer."), - title = I18N_CATALOG.i18nc("@info:title", "Cloud error"), - lifetime = 10 - ).show() - self.writeError.emit() - - ## Shows a message when the upload has succeeded - # \param response: The response from the cloud API. - def _onPrintUploadCompleted(self, response: CloudPrintResponse) -> None: - Logger.log("d", "The cluster will be printing this print job with the ID %s", response.cluster_job_id) - self._progress.hide() - Message( - text = I18N_CATALOG.i18nc("@info:status", "Print job was successfully sent to the printer."), - title = I18N_CATALOG.i18nc("@info:title", "Data Sent"), - lifetime = 5 - ).show() - self.writeFinished.emit() - - ## Gets the number of printers in the cluster. - # We use a minimum of 1 because cloud devices are always a cluster and printer discovery needs it. - @pyqtProperty(int, notify = _clusterPrintersChanged) - def clusterSize(self) -> int: - return max(1, len(self._printers)) - - ## Gets the remote printers. - @pyqtProperty("QVariantList", notify=_clusterPrintersChanged) - def printers(self) -> List[PrinterOutputModel]: - return self._printers - - ## Get the active printer in the UI (monitor page). - @pyqtProperty(QObject, notify = activePrinterChanged) - def activePrinter(self) -> Optional[PrinterOutputModel]: - return self._active_printer - - ## Set the active printer in the UI (monitor page). - @pyqtSlot(QObject) - def setActivePrinter(self, printer: Optional[PrinterOutputModel] = None) -> None: - if printer != self._active_printer: - self._active_printer = printer - self.activePrinterChanged.emit() - - ## Get remote print jobs. - @pyqtProperty("QVariantList", notify = printJobsChanged) - def printJobs(self) -> List[UM3PrintJobOutputModel]: - return self._print_jobs - - ## Get remote print jobs that are still in the print queue. - @pyqtProperty("QVariantList", notify = printJobsChanged) - def queuedPrintJobs(self) -> List[UM3PrintJobOutputModel]: - return [print_job for print_job in self._print_jobs - if print_job.state == "queued" or print_job.state == "error"] - - ## Get remote print jobs that are assigned to a printer. - @pyqtProperty("QVariantList", notify = printJobsChanged) - def activePrintJobs(self) -> List[UM3PrintJobOutputModel]: - return [print_job for print_job in self._print_jobs if - print_job.assignedPrinter is not None and print_job.state != "queued"] - - @pyqtSlot(int, result = str) - def formatDuration(self, seconds: int) -> str: - return Duration(seconds).getDisplayString(DurationFormat.Format.Short) - - @pyqtSlot(int, result = str) - def getTimeCompleted(self, time_remaining: int) -> str: - return formatTimeCompleted(time_remaining) - - @pyqtSlot(int, result = str) - def getDateCompleted(self, time_remaining: int) -> str: - return formatDateCompleted(time_remaining) - - ## TODO: The following methods are required by the monitor page QML, but are not actually available using cloud. - # TODO: We fake the methods here to not break the monitor page. - - @pyqtProperty(QUrl, notify = _clusterPrintersChanged) - def activeCameraUrl(self) -> "QUrl": - return QUrl() - - @pyqtSlot(QUrl) - def setActiveCameraUrl(self, camera_url: "QUrl") -> None: - pass - - @pyqtProperty(bool, notify = printJobsChanged) - def receivedPrintJobs(self) -> bool: - return bool(self._print_jobs) - - @pyqtSlot() - def openPrintJobControlPanel(self) -> None: - pass - - @pyqtSlot() - def openPrinterControlPanel(self) -> None: - pass - - @pyqtSlot(str) - def sendJobToTop(self, print_job_uuid: str) -> None: - pass - - @pyqtSlot(str) - def deleteJobFromQueue(self, print_job_uuid: str) -> None: - pass - - @pyqtSlot(str) - def forceSendJob(self, print_job_uuid: str) -> None: - pass - - @pyqtProperty("QVariantList", notify = _clusterPrintersChanged) - def connectedPrintersTypeCount(self) -> List[Dict[str, str]]: - return [] + ## Gets the URL on which to monitor the cluster via the cloud. + @property + def clusterCloudUrl(self) -> str: + root_url_prefix = "-staging" if self._account.is_staging else "" + return "https://mycloud{}.ultimaker.com/app/jobs/{}".format(root_url_prefix, self.clusterData.cluster_id) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index ced53e347b..c4929fc2d1 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -1,30 +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 typing import Dict, List +from typing import Dict, List, Optional from PyQt5.QtCore import QTimer from UM import i18nCatalog -from UM.Logger import Logger -from UM.Message import Message +from UM.Logger import Logger # To log errors talking to the API. from UM.Signal import Signal from cura.API import Account from cura.CuraApplication import CuraApplication +from cura.Settings.CuraStackBuilder import CuraStackBuilder from cura.Settings.GlobalStack import GlobalStack + from .CloudApiClient import CloudApiClient from .CloudOutputDevice import CloudOutputDevice -from .Models.CloudClusterResponse import CloudClusterResponse -from .Models.CloudError import CloudError -from .Utils import findChanges +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. -# Keeping all cloud related logic in this class instead of the UM3OutputDevicePlugin results in more readable code. -# -# API spec is available on https://api.ultimaker.com/docs/connect/spec/. -# +## The cloud output device manager is responsible for using the Ultimaker Cloud APIs to manage remote clusters. +# Keeping all cloud related logic in this class instead of the UM3OutputDevicePlugin results in more readable code. +# API spec is available on https://api.ultimaker.com/docs/connect/spec/. class CloudOutputDeviceManager: + META_CLUSTER_ID = "um_cloud_cluster_id" + META_NETWORK_KEY = "um_network_key" # The interval with which the remote clusters are checked CHECK_CLUSTER_INTERVAL = 30.0 # seconds @@ -32,110 +32,124 @@ class CloudOutputDeviceManager: # The translation catalog for this device. I18N_CATALOG = i18nCatalog("cura") - addedCloudCluster = Signal() - removedCloudCluster = Signal() + # Signal emitted when the list of discovered devices changed. + discoveredDevicesChanged = Signal() def __init__(self) -> None: # Persistent dict containing the remote clusters for the authenticated user. self._remote_clusters = {} # type: Dict[str, CloudOutputDevice] - - self._application = CuraApplication.getInstance() - self._output_device_manager = self._application.getOutputDeviceManager() - - self._account = self._application.getCuraAPI().account # type: Account - self._api = CloudApiClient(self._account, self._onApiError) + self._account = CuraApplication.getInstance().getCuraAPI().account # type: Account + self._api = CloudApiClient(self._account, on_error = lambda error: Logger.log("e", str(error))) + self._account.loginStateChanged.connect(self._onLoginStateChanged) # Create a timer to update the remote cluster list self._update_timer = QTimer() self._update_timer.setInterval(int(self.CHECK_CLUSTER_INTERVAL * 1000)) self._update_timer.setSingleShot(False) + self._update_timer.timeout.connect(self._getRemoteClusters) + # Ensure we don't start twice. self._running = False - # Called when the uses logs in or out + ## Starts running the cloud output device manager, thus periodically requesting cloud data. + def start(self): + if self._running: + return + if not self._account.isLoggedIn: + return + self._running = True + if not self._update_timer.isActive(): + self._update_timer.start() + self._getRemoteClusters() + + ## Stops running the cloud output device manager. + def stop(self): + if not self._running: + return + self._running = False + if self._update_timer.isActive(): + self._update_timer.stop() + self._onGetRemoteClustersFinished([]) # Make sure we remove all cloud output devices. + + ## Force refreshing connections. + def refreshConnections(self) -> None: + self._connectToActiveMachine() + + ## Called when the uses logs in or out def _onLoginStateChanged(self, is_logged_in: bool) -> None: - Logger.log("d", "Log in state changed to %s", is_logged_in) if is_logged_in: - if not self._update_timer.isActive(): - self._update_timer.start() - self._getRemoteClusters() + self.start() else: - if self._update_timer.isActive(): - self._update_timer.stop() + self.stop() - # Notify that all clusters have disappeared - self._onGetRemoteClustersFinished([]) - - ## Gets all remote clusters from the API. + ## Gets all remote clusters from the API. def _getRemoteClusters(self) -> None: - Logger.log("d", "Retrieving remote clusters") self._api.getClusters(self._onGetRemoteClustersFinished) - ## Callback for when the request for getting the clusters. is finished. + ## Callback for when the request for getting the clusters is finished. def _onGetRemoteClustersFinished(self, clusters: List[CloudClusterResponse]) -> None: online_clusters = {c.cluster_id: c for c in clusters if c.is_online} # type: Dict[str, CloudClusterResponse] + for device_id, cluster_data in online_clusters.items(): + if device_id not in self._remote_clusters: + self._onDeviceDiscovered(cluster_data) + else: + self._onDiscoveredDeviceUpdated(cluster_data) - removed_devices, added_clusters, updates = findChanges(self._remote_clusters, online_clusters) - - Logger.log("d", "Parsed remote clusters to %s", [cluster.toDict() for cluster in online_clusters.values()]) - Logger.log("d", "Removed: %s, added: %s, updates: %s", len(removed_devices), len(added_clusters), len(updates)) - - # Remove output devices that are gone - for device in removed_devices: - if device.isConnected(): - device.disconnect() - device.close() - self._output_device_manager.removeOutputDevice(device.key) - self._application.getDiscoveredPrintersModel().removeDiscoveredPrinter(device.key) - self.removedCloudCluster.emit(device) - del self._remote_clusters[device.key] - - # Add an output device for each new remote cluster. - # We only add when is_online as we don't want the option in the drop down if the cluster is not online. - for cluster in added_clusters: - device = CloudOutputDevice(self._api, cluster) - self._remote_clusters[cluster.cluster_id] = device - self._application.getDiscoveredPrintersModel().addDiscoveredPrinter( - device.key, - device.key, - cluster.friendly_name, - self._createMachineFromDiscoveredPrinter, - device.printerType, - device - ) - self.addedCloudCluster.emit(cluster) - - # Update the output devices - for device, cluster in updates: - device.clusterData = cluster - self._application.getDiscoveredPrintersModel().updateDiscoveredPrinter( - device.key, - cluster.friendly_name, - device.printerType, - ) + removed_device_keys = set(self._remote_clusters.keys()) - set(online_clusters.keys()) + for device_id in removed_device_keys: + self._onDiscoveredDeviceRemoved(device_id) + def _onDeviceDiscovered(self, cluster_data: CloudClusterResponse) -> None: + device = CloudOutputDevice(self._api, cluster_data) + CuraApplication.getInstance().getDiscoveredPrintersModel().addDiscoveredPrinter( + ip_address=device.key, + key=device.getId(), + name=device.getName(), + create_callback=self._createMachineFromDiscoveredDevice, + machine_type=device.printerType, + device=device + ) + self._remote_clusters[device.getId()] = device + self.discoveredDevicesChanged.emit() + self._checkIfNewClusterWasAdded(device.clusterData.cluster_id) self._connectToActiveMachine() - - def _createMachineFromDiscoveredPrinter(self, key: str) -> None: - device = self._remote_clusters[key] # type: CloudOutputDevice + + def _onDiscoveredDeviceUpdated(self, cluster_data: CloudClusterResponse) -> None: + device = self._remote_clusters.get(cluster_data.cluster_id) if not device: - Logger.log("e", "Could not find discovered device with key [%s]", key) return - - group_name = device.clusterData.friendly_name - machine_type_id = device.printerType - - Logger.log("i", "Creating machine from cloud device with key = [%s], group name = [%s], printer type = [%s]", - key, group_name, machine_type_id) - - # The newly added machine is automatically activated. - self._application.getMachineManager().addMachine(machine_type_id, group_name) - active_machine = CuraApplication.getInstance().getGlobalContainerStack() - if not active_machine: + CuraApplication.getInstance().getDiscoveredPrintersModel().updateDiscoveredPrinter( + ip_address=device.key, + name=cluster_data.friendly_name, + machine_type=device.printerType + ) + self.discoveredDevicesChanged.emit() + + def _onDiscoveredDeviceRemoved(self, device_id: str) -> None: + device = self._remote_clusters.pop(device_id, None) # type: Optional[CloudOutputDevice] + if not device: + return + device.close() + CuraApplication.getInstance().getDiscoveredPrintersModel().removeDiscoveredPrinter(device.key) + output_device_manager = CuraApplication.getInstance().getOutputDeviceManager() + if device.key in output_device_manager.getOutputDeviceIds(): + output_device_manager.removeOutputDevice(device.key) + self.discoveredDevicesChanged.emit() + + def _createMachineFromDiscoveredDevice(self, key: str) -> None: + device = self._remote_clusters[key] + if not device: return - active_machine.setMetaDataEntry(self.META_CLUSTER_ID, device.key) - self._connectToOutputDevice(device, active_machine) + # Create a new machine and activate it. + # We do not use use MachineManager.addMachine here because we need to set the cluster ID before activating it. + new_machine = CuraStackBuilder.createMachine(device.name, device.printerType) + if not new_machine: + Logger.log("e", "Failed creating a new machine") + return + new_machine.setMetaDataEntry(self.META_CLUSTER_ID, device.key) + CuraApplication.getInstance().getMachineManager().setActiveMachine(new_machine.getId()) + self._connectToOutputDevice(device, new_machine) ## Callback for when the active machine was changed by the user or a new remote cluster was found. def _connectToActiveMachine(self) -> None: @@ -143,69 +157,37 @@ class CloudOutputDeviceManager: if not active_machine: return - # Remove all output devices that we have registered. - # This is needed because when we switch machines we can only leave - # output devices that are meant for that machine. - for stored_cluster_id in self._remote_clusters: - self._output_device_manager.removeOutputDevice(stored_cluster_id) - - # Check if the stored cluster_id for the active machine is in our list of remote clusters. + output_device_manager = CuraApplication.getInstance().getOutputDeviceManager() stored_cluster_id = active_machine.getMetaDataEntry(self.META_CLUSTER_ID) - if stored_cluster_id in self._remote_clusters: - device = self._remote_clusters[stored_cluster_id] - self._connectToOutputDevice(device, active_machine) - Logger.log("d", "Device connected by metadata cluster ID %s", stored_cluster_id) - else: - self._connectByNetworkKey(active_machine) - - ## Tries to match the local network key to the cloud cluster host name. - def _connectByNetworkKey(self, active_machine: GlobalStack) -> None: - # Check if the active printer has a local network connection and match this key to the remote cluster. - local_network_key = active_machine.getMetaDataEntry("um_network_key") - if not local_network_key: - return - - device = next((c for c in self._remote_clusters.values() if c.matchesNetworkKey(local_network_key)), None) - if not device: - return - - Logger.log("i", "Found cluster %s with network key %s", device, local_network_key) - active_machine.setMetaDataEntry(self.META_CLUSTER_ID, device.key) - self._connectToOutputDevice(device, active_machine) + local_network_key = active_machine.getMetaDataEntry(self.META_NETWORK_KEY) + for device in self._remote_clusters.values(): + if device.key == stored_cluster_id: + # Connect to it if the stored ID matches. + self._connectToOutputDevice(device, active_machine) + elif local_network_key and device.matchesNetworkKey(local_network_key): + # Connect to it if we can match the local network key that was already present. + self._connectToOutputDevice(device, active_machine) + elif device.key in output_device_manager.getOutputDeviceIds(): + # Remove device if it is not meant for the active machine. + output_device_manager.removeOutputDevice(device.key) ## Connects to an output device and makes sure it is registered in the output device manager. - def _connectToOutputDevice(self, device: CloudOutputDevice, active_machine: GlobalStack) -> None: - device.connect() - self._output_device_manager.addOutputDevice(device) - active_machine.addConfiguredConnectionType(device.connectionType.value) + def _connectToOutputDevice(self, device: CloudOutputDevice, machine: GlobalStack) -> None: + machine.setName(device.name) + machine.setMetaDataEntry(self.META_CLUSTER_ID, device.key) + machine.setMetaDataEntry("group_name", device.name) + machine.addConfiguredConnectionType(device.connectionType.value) - ## Handles an API error received from the cloud. - # \param errors: The errors received - def _onApiError(self, errors: List[CloudError] = None) -> None: - Logger.log("w", str(errors)) - message = Message( - text = self.I18N_CATALOG.i18nc("@info:description", "There was an error connecting to the cloud."), - title = self.I18N_CATALOG.i18nc("@info:title", "Error"), - lifetime = 10 - ) - message.show() + if not device.isConnected(): + device.connect() - ## Starts running the cloud output device manager, thus periodically requesting cloud data. - def start(self): - if self._running: - return - self._account.loginStateChanged.connect(self._onLoginStateChanged) - # When switching machines we check if we have to activate a remote cluster. - self._application.globalContainerStackChanged.connect(self._connectToActiveMachine) - self._update_timer.timeout.connect(self._getRemoteClusters) - self._onLoginStateChanged(is_logged_in = self._account.isLoggedIn) + output_device_manager = CuraApplication.getInstance().getOutputDeviceManager() + if device.key not in output_device_manager.getOutputDeviceIds(): + output_device_manager.addOutputDevice(device) - ## Stops running the cloud output device manager. - def stop(self): - if not self._running: - return - self._account.loginStateChanged.disconnect(self._onLoginStateChanged) - # When switching machines we check if we have to activate a remote cluster. - self._application.globalContainerStackChanged.disconnect(self._connectToActiveMachine) - self._update_timer.timeout.disconnect(self._getRemoteClusters) - self._onLoginStateChanged(is_logged_in = False) + ## 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() diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterBuildPlate.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterBuildPlate.py deleted file mode 100644 index 4386bbb435..0000000000 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterBuildPlate.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. -from .BaseCloudModel import BaseCloudModel - - -## Class representing a cluster printer -# Spec: https://api-staging.ultimaker.com/connect/v1/spec -class CloudClusterBuildPlate(BaseCloudModel): - ## Create a new build plate - # \param type: The type of buildplate glass or aluminium - def __init__(self, type: str = "glass", **kwargs) -> None: - self.type = type - super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterConfigurationMaterial.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterConfigurationMaterial.py deleted file mode 100644 index db09133a14..0000000000 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterConfigurationMaterial.py +++ /dev/null @@ -1,55 +0,0 @@ -from typing import Optional - -from UM.Logger import Logger -from cura.CuraApplication import CuraApplication -from cura.PrinterOutput.Models.MaterialOutputModel import MaterialOutputModel -from .BaseCloudModel import BaseCloudModel - - -## Class representing a cloud cluster printer configuration -# Spec: https://api-staging.ultimaker.com/connect/v1/spec -class CloudClusterPrinterConfigurationMaterial(BaseCloudModel): - ## Creates a new material configuration model. - # \param brand: The brand of material in this print core, e.g. 'Ultimaker'. - # \param color: The color of material in this print core, e.g. 'Blue'. - # \param guid: he GUID of the material in this print core, e.g. '506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9'. - # \param material: The type of material in this print core, e.g. 'PLA'. - def __init__(self, brand: Optional[str] = None, color: Optional[str] = None, guid: Optional[str] = None, - material: Optional[str] = None, **kwargs) -> None: - self.guid = guid - self.brand = brand - self.color = color - self.material = material - super().__init__(**kwargs) - - ## Creates a material output model based on this cloud printer material. - 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() - else: - Logger.log("w", "Unable to find material with guid {guid}. Using data as provided by cluster" - .format(guid = self.guid)) - color = self.color - brand = self.brand - material_type = self.material - name = "Empty" if self.material == "empty" else "Unknown" - - return MaterialOutputModel(guid = self.guid, type = material_type, brand = brand, color = color, name = name) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterStatus.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterStatus.py deleted file mode 100644 index 0b76ba1bce..0000000000 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterStatus.py +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. -from typing import List, Union, Dict, Optional, Any - -from cura.PrinterOutput.PrinterOutputController import PrinterOutputController -from cura.PrinterOutput.Models.PrinterOutputModel import PrinterOutputModel -from .CloudClusterBuildPlate import CloudClusterBuildPlate -from .CloudClusterPrintCoreConfiguration import CloudClusterPrintCoreConfiguration -from .BaseCloudModel import BaseCloudModel - - -## Class representing a cluster printer -# Spec: https://api-staging.ultimaker.com/connect/v1/spec -class CloudClusterPrinterStatus(BaseCloudModel): - ## Creates a new cluster printer status - # \param enabled: A printer can be disabled if it should not receive new jobs. By default every printer is enabled. - # \param firmware_version: Firmware version installed on the printer. Can differ for each printer in a cluster. - # \param friendly_name: Human readable name of the printer. Can be used for identification purposes. - # \param ip_address: The IP address of the printer in the local network. - # \param machine_variant: The type of printer. Can be 'Ultimaker 3' or 'Ultimaker 3ext'. - # \param status: The status of the printer. - # \param unique_name: The unique name of the printer in the network. - # \param uuid: The unique ID of the printer, also known as GUID. - # \param configuration: The active print core configurations of this printer. - # \param reserved_by: A printer can be claimed by a specific print job. - # \param maintenance_required: Indicates if maintenance is necessary - # \param firmware_update_status: Whether the printer's firmware is up-to-date, value is one of: "up_to_date", - # "pending_update", "update_available", "update_in_progress", "update_failed", "update_impossible" - # \param latest_available_firmware: The version of the latest firmware that is available - # \param build_plate: The build plate that is on the printer - def __init__(self, enabled: bool, firmware_version: str, friendly_name: str, ip_address: str, machine_variant: str, - status: str, unique_name: str, uuid: str, - configuration: List[Union[Dict[str, Any], CloudClusterPrintCoreConfiguration]], - reserved_by: Optional[str] = None, maintenance_required: Optional[bool] = None, - firmware_update_status: Optional[str] = None, latest_available_firmware: Optional[str] = None, - build_plate: Union[Dict[str, Any], CloudClusterBuildPlate] = None, **kwargs) -> None: - - self.configuration = self.parseModels(CloudClusterPrintCoreConfiguration, configuration) - self.enabled = enabled - self.firmware_version = firmware_version - self.friendly_name = friendly_name - self.ip_address = ip_address - self.machine_variant = machine_variant - self.status = status - self.unique_name = unique_name - self.uuid = uuid - self.reserved_by = reserved_by - self.maintenance_required = maintenance_required - self.firmware_update_status = firmware_update_status - self.latest_available_firmware = latest_available_firmware - self.build_plate = self.parseModel(CloudClusterBuildPlate, build_plate) if build_plate else None - super().__init__(**kwargs) - - ## Creates a new output model. - # \param controller - The controller of the model. - def createOutputModel(self, controller: PrinterOutputController) -> PrinterOutputModel: - model = PrinterOutputModel(controller, len(self.configuration), firmware_version = self.firmware_version) - self.updateOutputModel(model) - return model - - ## Updates the given output model. - # \param model - The output model to update. - def updateOutputModel(self, model: PrinterOutputModel) -> None: - model.updateKey(self.uuid) - model.updateName(self.friendly_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") - - for configuration, extruder_output, extruder_config in \ - zip(self.configuration, model.extruders, model.printerConfiguration.extruderConfigurations): - configuration.updateOutputModel(extruder_output) - configuration.updateConfigurationModel(extruder_config) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/__init__.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/__init__.py deleted file mode 100644 index f3f6970c54..0000000000 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. diff --git a/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py b/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py index 176b7e6ab7..d5de7fe10a 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # !/usr/bin/env python # -*- coding: utf-8 -*- from PyQt5.QtCore import QUrl @@ -6,7 +6,8 @@ from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManage from typing import Optional, Callable, Any, Tuple, cast from UM.Logger import Logger -from .Models.CloudPrintJobResponse import CloudPrintJobResponse + +from ..Models.Http.CloudPrintJobResponse import CloudPrintJobResponse ## Class responsible for uploading meshes to the cloud in separate requests. @@ -53,7 +54,7 @@ class ToolPathUploader: def _createRequest(self) -> QNetworkRequest: request = QNetworkRequest(QUrl(self._print_job.upload_url)) request.setHeader(QNetworkRequest.ContentTypeHeader, self._print_job.content_type) - + first_byte, last_byte = self._chunkRange() content_range = "bytes {}-{}/{}".format(first_byte, last_byte - 1, len(self._data)) request.setRawHeader(b"Content-Range", content_range.encode()) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Utils.py b/plugins/UM3NetworkPrinting/src/Cloud/Utils.py deleted file mode 100644 index 5136e0e7db..0000000000 --- a/plugins/UM3NetworkPrinting/src/Cloud/Utils.py +++ /dev/null @@ -1,54 +0,0 @@ -from datetime import datetime, timedelta -from typing import TypeVar, Dict, Tuple, List - -from UM import i18nCatalog - -T = TypeVar("T") -U = TypeVar("U") - - -## Splits the given dictionaries into three lists (in a tuple): -# - `removed`: Items that were in the first argument but removed in the second one. -# - `added`: Items that were not in the first argument but were included in the second one. -# - `updated`: Items that were in both dictionaries. Both values are given in a tuple. -# \param previous: The previous items -# \param received: The received items -# \return: The tuple (removed, added, updated) as explained above. -def findChanges(previous: Dict[str, T], received: Dict[str, U]) -> Tuple[List[T], List[U], List[Tuple[T, U]]]: - previous_ids = set(previous) - received_ids = set(received) - - removed_ids = previous_ids.difference(received_ids) - new_ids = received_ids.difference(previous_ids) - updated_ids = received_ids.intersection(previous_ids) - - removed = [previous[removed_id] for removed_id in removed_ids] - added = [received[new_id] for new_id in new_ids] - updated = [(previous[updated_id], received[updated_id]) for updated_id in updated_ids] - - return removed, added, updated - - -def formatTimeCompleted(seconds_remaining: int) -> str: - completed = datetime.now() + timedelta(seconds=seconds_remaining) - return "{hour:02d}:{minute:02d}".format(hour = completed.hour, minute = completed.minute) - - -def formatDateCompleted(seconds_remaining: int) -> str: - now = datetime.now() - completed = now + timedelta(seconds=seconds_remaining) - days = (completed.date() - now.date()).days - i18n = i18nCatalog("cura") - - # If finishing date is more than 7 days out, using "Mon Dec 3 at HH:MM" format - if days >= 7: - return completed.strftime("%a %b ") + "{day}".format(day = completed.day) - # If finishing date is within the next week, use "Monday at HH:MM" format - elif days >= 2: - return completed.strftime("%a") - # If finishing tomorrow, use "tomorrow at HH:MM" format - elif days >= 1: - return i18n.i18nc("@info:status", "tomorrow") - # If finishing today, use "today at HH:MM" format - else: - return i18n.i18nc("@info:status", "today") diff --git a/plugins/UM3NetworkPrinting/src/ClusterOutputController.py b/plugins/UM3NetworkPrinting/src/ClusterOutputController.py new file mode 100644 index 0000000000..02d8d174d1 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/ClusterOutputController.py @@ -0,0 +1,21 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from cura.PrinterOutput.Models.PrintJobOutputModel import PrintJobOutputModel +from cura.PrinterOutput.PrinterOutputController import PrinterOutputController +from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice + + +class ClusterOutputController(PrinterOutputController): + + def __init__(self, output_device: PrinterOutputDevice) -> None: + super().__init__(output_device) + self.can_pause = True + self.can_abort = True + self.can_pre_heat_bed = False + self.can_pre_heat_hotends = False + self.can_send_raw_gcode = False + self.can_control_manually = False + self.can_update_firmware = False + + def setJobState(self, job: PrintJobOutputModel, state: str): + self._output_device.setJobState(job.key, state) diff --git a/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py deleted file mode 100644 index 3f3cd4cdd6..0000000000 --- a/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py +++ /dev/null @@ -1,712 +0,0 @@ -# Copyright (c) 2019 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. - -from typing import Any, cast, Tuple, Union, Optional, Dict, List -from time import time - -import io # To create the correct buffers for sending data to the printer. -import json -import os - -from UM.FileHandler.FileHandler import FileHandler -from UM.FileHandler.WriteFileJob import WriteFileJob # To call the file writer asynchronously. -from UM.i18n import i18nCatalog -from UM.Logger import Logger -from UM.Message import Message -from UM.PluginRegistry import PluginRegistry -from UM.Qt.Duration import Duration, DurationFormat -from UM.Scene.SceneNode import SceneNode # For typing. -from UM.Settings.ContainerRegistry import ContainerRegistry - -from cura.CuraApplication import CuraApplication -from cura.PrinterOutput.Models.PrinterConfigurationModel import PrinterConfigurationModel -from cura.PrinterOutput.Models.ExtruderConfigurationModel import ExtruderConfigurationModel -from cura.PrinterOutput.NetworkedPrinterOutputDevice import AuthState, NetworkedPrinterOutputDevice -from cura.PrinterOutput.Models.PrinterOutputModel import PrinterOutputModel -from cura.PrinterOutput.Models.MaterialOutputModel import MaterialOutputModel -from cura.PrinterOutput.PrinterOutputDevice import ConnectionType - -from .Cloud.Utils import formatTimeCompleted, formatDateCompleted -from .ClusterUM3PrinterOutputController import ClusterUM3PrinterOutputController -from .ConfigurationChangeModel import ConfigurationChangeModel -from .MeshFormatHandler import MeshFormatHandler -from .SendMaterialJob import SendMaterialJob -from .UM3PrintJobOutputModel import UM3PrintJobOutputModel - -from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply -from PyQt5.QtGui import QDesktopServices, QImage -from PyQt5.QtCore import pyqtSlot, QUrl, pyqtSignal, pyqtProperty, QObject - -i18n_catalog = i18nCatalog("cura") - - -class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): - printJobsChanged = pyqtSignal() - activePrinterChanged = pyqtSignal() - activeCameraUrlChanged = pyqtSignal() - receivedPrintJobsChanged = pyqtSignal() - - # Notify can only use signals that are defined by the class that they are in, not inherited ones. - # Therefore we create a private signal used to trigger the printersChanged signal. - _clusterPrintersChanged = pyqtSignal() - - def __init__(self, device_id, address, properties, parent = None) -> None: - super().__init__(device_id = device_id, address = address, properties=properties, connection_type = ConnectionType.NetworkConnection, parent = parent) - self._api_prefix = "/cluster-api/v1/" - - self._application = CuraApplication.getInstance() - - self._number_of_extruders = 2 - - self._dummy_lambdas = ( - "", {}, io.BytesIO() - ) # type: Tuple[Optional[str], Dict[str, Union[str, int, bool]], Union[io.StringIO, io.BytesIO]] - - self._print_jobs = [] # type: List[UM3PrintJobOutputModel] - self._received_print_jobs = False # type: bool - - if PluginRegistry.getInstance() is not None: - plugin_path = PluginRegistry.getInstance().getPluginPath("UM3NetworkPrinting") - if plugin_path is None: - Logger.log("e", "Cloud not find plugin path for plugin UM3NetworkPrnting") - raise RuntimeError("Cloud not find plugin path for plugin UM3NetworkPrnting") - self._monitor_view_qml_path = os.path.join(plugin_path, "resources", "qml", "MonitorStage.qml") - - # Trigger the printersChanged signal when the private signal is triggered - self.printersChanged.connect(self._clusterPrintersChanged) - - self._accepts_commands = True # type: bool - - # Cluster does not have authentication, so default to authenticated - self._authentication_state = AuthState.Authenticated - - self._error_message = None # type: Optional[Message] - self._write_job_progress_message = None # type: Optional[Message] - self._progress_message = None # type: Optional[Message] - - self._active_printer = None # type: Optional[PrinterOutputModel] - - self._printer_selection_dialog = None # type: QObject - - self.setPriority(3) # Make sure the output device gets selected above local file output - self.setName(self._id) - self.setShortDescription(i18n_catalog.i18nc("@action:button Preceded by 'Ready to'.", "Print over network")) - self.setDescription(i18n_catalog.i18nc("@properties:tooltip", "Print over network")) - - self.setConnectionText(i18n_catalog.i18nc("@info:status", "Connected over the network")) - - self._printer_uuid_to_unique_name_mapping = {} # type: Dict[str, str] - - self._finished_jobs = [] # type: List[UM3PrintJobOutputModel] - - self._cluster_size = int(properties.get(b"cluster_size", 0)) # type: int - - self._latest_reply_handler = None # type: Optional[QNetworkReply] - self._sending_job = None - - self._active_camera_url = QUrl() # type: QUrl - - def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, - file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: - self.writeStarted.emit(self) - - self.sendMaterialProfiles() - - mesh_format = MeshFormatHandler(file_handler, self.firmwareVersion) - - # This function pauses with the yield, waiting on instructions on which printer it needs to print with. - if not mesh_format.is_valid: - Logger.log("e", "Missing file or mesh writer!") - return - self._sending_job = self._sendPrintJob(mesh_format, nodes) - if self._sending_job is not None: - self._sending_job.send(None) # Start the generator. - - if len(self._printers) > 1: # We need to ask the user. - self._spawnPrinterSelectionDialog() - is_job_sent = True - else: # Just immediately continue. - self._sending_job.send("") # No specifically selected printer. - is_job_sent = self._sending_job.send(None) - - def _spawnPrinterSelectionDialog(self): - if self._printer_selection_dialog is None: - if PluginRegistry.getInstance() is not None: - path = os.path.join( - PluginRegistry.getInstance().getPluginPath("UM3NetworkPrinting"), - "resources", "qml", "PrintWindow.qml" - ) - self._printer_selection_dialog = self._application.createQmlComponent(path, {"OutputDevice": self}) - if self._printer_selection_dialog is not None: - self._printer_selection_dialog.show() - - @pyqtProperty(int, constant=True) - def clusterSize(self) -> int: - return self._cluster_size - - ## Allows the user to choose a printer to print with from the printer - # selection dialogue. - # \param target_printer The name of the printer to target. - @pyqtSlot(str) - def selectPrinter(self, target_printer: str = "") -> None: - if self._sending_job is not None: - self._sending_job.send(target_printer) - - @pyqtSlot() - def cancelPrintSelection(self) -> None: - self._sending_gcode = False - - ## Greenlet to send a job to the printer over the network. - # - # This greenlet gets called asynchronously in requestWrite. It is a - # greenlet in order to optionally wait for selectPrinter() to select a - # printer. - # The greenlet yields exactly three times: First time None, - # \param mesh_format Object responsible for choosing the right kind of format to write with. - def _sendPrintJob(self, mesh_format: MeshFormatHandler, nodes: List[SceneNode]): - Logger.log("i", "Sending print job to printer.") - if self._sending_gcode: - self._error_message = Message( - i18n_catalog.i18nc("@info:status", - "Sending new jobs (temporarily) blocked, still sending the previous print job.")) - self._error_message.show() - yield #Wait on the user to select a target printer. - yield #Wait for the write job to be finished. - yield False #Return whether this was a success or not. - yield #Prevent StopIteration. - - self._sending_gcode = True - - # Potentially wait on the user to select a target printer. - target_printer = yield # type: Optional[str] - - # Using buffering greatly reduces the write time for many lines of gcode - - stream = mesh_format.createStream() - - job = WriteFileJob(mesh_format.writer, stream, nodes, mesh_format.file_mode) - - self._write_job_progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), - lifetime = 0, dismissable = False, progress = -1, - title = i18n_catalog.i18nc("@info:title", "Sending Data"), - use_inactivity_timer = False) - self._write_job_progress_message.show() - - if mesh_format.preferred_format is not None: - self._dummy_lambdas = (target_printer, mesh_format.preferred_format, stream) - job.finished.connect(self._sendPrintJobWaitOnWriteJobFinished) - job.start() - yield True # Return that we had success! - yield # To prevent having to catch the StopIteration exception. - - def _sendPrintJobWaitOnWriteJobFinished(self, job: WriteFileJob) -> None: - if self._write_job_progress_message: - self._write_job_progress_message.hide() - - self._progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), lifetime = 0, - dismissable = False, progress = -1, - title = i18n_catalog.i18nc("@info:title", "Sending Data")) - self._progress_message.addAction("Abort", i18n_catalog.i18nc("@action:button", "Cancel"), icon = "", - description = "") - self._progress_message.actionTriggered.connect(self._progressMessageActionTriggered) - self._progress_message.show() - parts = [] - - target_printer, preferred_format, stream = self._dummy_lambdas - - # If a specific printer was selected, it should be printed with that machine. - if target_printer: - target_printer = self._printer_uuid_to_unique_name_mapping[target_printer] - parts.append(self._createFormPart("name=require_printer_name", bytes(target_printer, "utf-8"), "text/plain")) - - # Add user name to the print_job - parts.append(self._createFormPart("name=owner", bytes(self._getUserName(), "utf-8"), "text/plain")) - - file_name = self._application.getPrintInformation().jobName + "." + preferred_format["extension"] - - output = stream.getvalue() # Either str or bytes depending on the output mode. - if isinstance(stream, io.StringIO): - output = cast(str, output).encode("utf-8") - output = cast(bytes, output) - - parts.append(self._createFormPart("name=\"file\"; filename=\"%s\"" % file_name, output)) - - self._latest_reply_handler = self.postFormWithParts("print_jobs/", parts, - on_finished = self._onPostPrintJobFinished, - on_progress = self._onUploadPrintJobProgress) - - @pyqtProperty(QObject, notify = activePrinterChanged) - def activePrinter(self) -> Optional[PrinterOutputModel]: - return self._active_printer - - @pyqtSlot(QObject) - def setActivePrinter(self, printer: Optional[PrinterOutputModel]) -> None: - if self._active_printer != printer: - self._active_printer = printer - self.activePrinterChanged.emit() - - @pyqtProperty(QUrl, notify = activeCameraUrlChanged) - def activeCameraUrl(self) -> "QUrl": - return self._active_camera_url - - @pyqtSlot(QUrl) - def setActiveCameraUrl(self, camera_url: "QUrl") -> None: - if self._active_camera_url != camera_url: - self._active_camera_url = camera_url - self.activeCameraUrlChanged.emit() - - def _onPostPrintJobFinished(self, reply: QNetworkReply) -> None: - if self._progress_message: - self._progress_message.hide() - self._compressing_gcode = False - self._sending_gcode = False - - ## The IP address of the printer. - @pyqtProperty(str, constant = True) - def address(self) -> str: - return self._address - - def _onUploadPrintJobProgress(self, bytes_sent: int, bytes_total: int) -> None: - if bytes_total > 0: - new_progress = bytes_sent / bytes_total * 100 - # Treat upload progress as response. Uploading can take more than 10 seconds, so if we don't, we can get - # timeout responses if this happens. - self._last_response_time = time() - if self._progress_message is not None and new_progress != self._progress_message.getProgress(): - self._progress_message.show() # Ensure that the message is visible. - self._progress_message.setProgress(bytes_sent / bytes_total * 100) - - # If successfully sent: - if bytes_sent == bytes_total: - # Show a confirmation to the user so they know the job was sucessful and provide the option to switch to - # the monitor tab. - self._success_message = Message( - i18n_catalog.i18nc("@info:status", "Print job was successfully sent to the printer."), - lifetime=5, dismissable=True, - title=i18n_catalog.i18nc("@info:title", "Data Sent")) - self._success_message.addAction("View", i18n_catalog.i18nc("@action:button", "View in Monitor"), icon = "", - description="") - self._success_message.actionTriggered.connect(self._successMessageActionTriggered) - self._success_message.show() - else: - if self._progress_message is not None: - self._progress_message.setProgress(0) - self._progress_message.hide() - - def _progressMessageActionTriggered(self, message_id: Optional[str] = None, action_id: Optional[str] = None) -> None: - if action_id == "Abort": - Logger.log("d", "User aborted sending print to remote.") - if self._progress_message is not None: - self._progress_message.hide() - self._compressing_gcode = False - self._sending_gcode = False - self._application.getController().setActiveStage("PrepareStage") - - # After compressing the sliced model Cura sends data to printer, to stop receiving updates from the request - # the "reply" should be disconnected - if self._latest_reply_handler: - self._latest_reply_handler.disconnect() - self._latest_reply_handler = None - - def _successMessageActionTriggered(self, message_id: Optional[str] = None, action_id: Optional[str] = None) -> None: - if action_id == "View": - self._application.getController().setActiveStage("MonitorStage") - - @pyqtSlot() - def openPrintJobControlPanel(self) -> None: - Logger.log("d", "Opening print job control panel...") - QDesktopServices.openUrl(QUrl("http://" + self._address + "/print_jobs")) - - @pyqtSlot() - def openPrinterControlPanel(self) -> None: - Logger.log("d", "Opening printer control panel...") - QDesktopServices.openUrl(QUrl("http://" + self._address + "/printers")) - - @pyqtProperty("QVariantList", notify = printJobsChanged) - def printJobs(self)-> List[UM3PrintJobOutputModel]: - return self._print_jobs - - @pyqtProperty(bool, notify = receivedPrintJobsChanged) - def receivedPrintJobs(self) -> bool: - return self._received_print_jobs - - @pyqtProperty("QVariantList", notify = printJobsChanged) - def queuedPrintJobs(self) -> List[UM3PrintJobOutputModel]: - return [print_job for print_job in self._print_jobs if print_job.state == "queued" or print_job.state == "error"] - - @pyqtProperty("QVariantList", notify = printJobsChanged) - def activePrintJobs(self) -> List[UM3PrintJobOutputModel]: - return [print_job for print_job in self._print_jobs if print_job.assignedPrinter is not None and print_job.state != "queued"] - - @pyqtProperty("QVariantList", notify = _clusterPrintersChanged) - def connectedPrintersTypeCount(self) -> List[Dict[str, str]]: - printer_count = {} # type: Dict[str, int] - for printer in self._printers: - if printer.type in printer_count: - printer_count[printer.type] += 1 - else: - printer_count[printer.type] = 1 - result = [] - for machine_type in printer_count: - result.append({"machine_type": machine_type, "count": str(printer_count[machine_type])}) - return result - - @pyqtProperty("QVariantList", notify=_clusterPrintersChanged) - def printers(self): - return self._printers - - @pyqtSlot(int, result = str) - def getTimeCompleted(self, time_remaining: int) -> str: - return formatTimeCompleted(time_remaining) - - @pyqtSlot(int, result = str) - def getDateCompleted(self, time_remaining: int) -> str: - return formatDateCompleted(time_remaining) - - @pyqtSlot(int, result = str) - def formatDuration(self, seconds: int) -> str: - return Duration(seconds).getDisplayString(DurationFormat.Format.Short) - - @pyqtSlot(str) - def sendJobToTop(self, print_job_uuid: str) -> None: - # This function is part of the output device (and not of the printjob output model) as this type of operation - # is a modification of the cluster queue and not of the actual job. - data = "{\"to_position\": 0}" - self.put("print_jobs/{uuid}/move_to_position".format(uuid = print_job_uuid), data, on_finished=None) - - @pyqtSlot(str) - def deleteJobFromQueue(self, print_job_uuid: str) -> None: - # This function is part of the output device (and not of the printjob output model) as this type of operation - # is a modification of the cluster queue and not of the actual job. - self.delete("print_jobs/{uuid}".format(uuid = print_job_uuid), on_finished=None) - - @pyqtSlot(str) - def forceSendJob(self, print_job_uuid: str) -> None: - data = "{\"force\": true}" - self.put("print_jobs/{uuid}".format(uuid=print_job_uuid), data, on_finished=None) - - def _printJobStateChanged(self) -> None: - username = self._getUserName() - - if username is None: - return # We only want to show notifications if username is set. - - finished_jobs = [job for job in self._print_jobs if job.state == "wait_cleanup"] - - newly_finished_jobs = [job for job in finished_jobs if job not in self._finished_jobs and job.owner == username] - for job in newly_finished_jobs: - if job.assignedPrinter: - job_completed_text = i18n_catalog.i18nc("@info:status", "Printer '{printer_name}' has finished printing '{job_name}'.").format(printer_name=job.assignedPrinter.name, job_name = job.name) - else: - job_completed_text = i18n_catalog.i18nc("@info:status", "The print job '{job_name}' was finished.").format(job_name = job.name) - job_completed_message = Message(text=job_completed_text, title = i18n_catalog.i18nc("@info:status", "Print finished")) - job_completed_message.show() - - # Ensure UI gets updated - self.printJobsChanged.emit() - - # Keep a list of all completed jobs so we know if something changed next time. - self._finished_jobs = finished_jobs - - ## Called when the connection to the cluster changes. - def connect(self) -> None: - super().connect() - self.sendMaterialProfiles() - - def _onGetPreviewImageFinished(self, reply: QNetworkReply) -> None: - reply_url = reply.url().toString() - - uuid = reply_url[reply_url.find("print_jobs/")+len("print_jobs/"):reply_url.rfind("/preview_image")] - - print_job = findByKey(self._print_jobs, uuid) - if print_job: - image = QImage() - image.loadFromData(reply.readAll()) - print_job.updatePreviewImage(image) - - def _update(self) -> None: - super()._update() - self.get("printers/", on_finished = self._onGetPrintersDataFinished) - self.get("print_jobs/", on_finished = self._onGetPrintJobsFinished) - - for print_job in self._print_jobs: - if print_job.getPreviewImage() is None: - self.get("print_jobs/{uuid}/preview_image".format(uuid=print_job.key), on_finished=self._onGetPreviewImageFinished) - - def _onGetPrintJobsFinished(self, reply: QNetworkReply) -> None: - self._received_print_jobs = True - self.receivedPrintJobsChanged.emit() - - if not checkValidGetReply(reply): - return - - result = loadJsonFromReply(reply) - if result is None: - return - - print_jobs_seen = [] - job_list_changed = False - for idx, print_job_data in enumerate(result): - print_job = findByKey(self._print_jobs, print_job_data["uuid"]) - if print_job is None: - print_job = self._createPrintJobModel(print_job_data) - job_list_changed = True - elif not job_list_changed: - # Check if the order of the jobs has changed since the last check - if self._print_jobs.index(print_job) != idx: - job_list_changed = True - - self._updatePrintJob(print_job, print_job_data) - - if print_job.state != "queued" and print_job.state != "error": # Print job should be assigned to a printer. - if print_job.state in ["failed", "finished", "aborted", "none"]: - # Print job was already completed, so don't attach it to a printer. - printer = None - else: - printer = self._getPrinterByKey(print_job_data["printer_uuid"]) - else: # The job can "reserve" a printer if some changes are required. - printer = self._getPrinterByKey(print_job_data["assigned_to"]) - - if printer: - printer.updateActivePrintJob(print_job) - - print_jobs_seen.append(print_job) - - # Check what jobs need to be removed. - removed_jobs = [print_job for print_job in self._print_jobs if print_job not in print_jobs_seen] - - for removed_job in removed_jobs: - job_list_changed = job_list_changed or self._removeJob(removed_job) - - if job_list_changed: - # Override the old list with the new list (either because jobs were removed / added or order changed) - self._print_jobs = print_jobs_seen - self.printJobsChanged.emit() # Do a single emit for all print job changes. - - def _onGetPrintersDataFinished(self, reply: QNetworkReply) -> None: - if not checkValidGetReply(reply): - return - - result = loadJsonFromReply(reply) - if result is None: - return - - printer_list_changed = False - printers_seen = [] - - for printer_data in result: - printer = findByKey(self._printers, printer_data["uuid"]) - - if printer is None: - printer = self._createPrinterModel(printer_data) - printer_list_changed = True - - printers_seen.append(printer) - - self._updatePrinter(printer, printer_data) - - removed_printers = [printer for printer in self._printers if printer not in printers_seen] - for printer in removed_printers: - self._removePrinter(printer) - - if removed_printers or printer_list_changed: - self.printersChanged.emit() - - def _createPrinterModel(self, data: Dict[str, Any]) -> PrinterOutputModel: - printer = PrinterOutputModel(output_controller = ClusterUM3PrinterOutputController(self), - number_of_extruders = self._number_of_extruders) - printer.setCameraUrl(QUrl("http://" + data["ip_address"] + ":8080/?action=stream")) - self._printers.append(printer) - return printer - - def _createPrintJobModel(self, data: Dict[str, Any]) -> UM3PrintJobOutputModel: - print_job = UM3PrintJobOutputModel(output_controller=ClusterUM3PrinterOutputController(self), - key=data["uuid"], name= data["name"]) - - configuration = PrinterConfigurationModel() - extruders = [ExtruderConfigurationModel(position = idx) for idx in range(0, self._number_of_extruders)] - for index in range(0, self._number_of_extruders): - try: - extruder_data = data["configuration"][index] - except IndexError: - continue - extruder = extruders[int(data["configuration"][index]["extruder_index"])] - extruder.setHotendID(extruder_data.get("print_core_id", "")) - extruder.setMaterial(self._createMaterialOutputModel(extruder_data.get("material", {}))) - - configuration.setExtruderConfigurations(extruders) - configuration.setPrinterType(data.get("machine_variant", "")) - print_job.updateConfiguration(configuration) - print_job.setCompatibleMachineFamilies(data.get("compatible_machine_families", [])) - print_job.stateChanged.connect(self._printJobStateChanged) - return print_job - - def _updatePrintJob(self, print_job: UM3PrintJobOutputModel, data: Dict[str, Any]) -> None: - print_job.updateTimeTotal(data["time_total"]) - print_job.updateTimeElapsed(data["time_elapsed"]) - impediments_to_printing = data.get("impediments_to_printing", []) - print_job.updateOwner(data["owner"]) - - status_set_by_impediment = False - for impediment in impediments_to_printing: - if impediment["severity"] == "UNFIXABLE": - status_set_by_impediment = True - print_job.updateState("error") - break - - if not status_set_by_impediment: - print_job.updateState(data["status"]) - - print_job.updateConfigurationChanges(self._createConfigurationChanges(data["configuration_changes_required"])) - - def _createConfigurationChanges(self, data: List[Dict[str, Any]]) -> List[ConfigurationChangeModel]: - result = [] - for change in data: - result.append(ConfigurationChangeModel(type_of_change=change["type_of_change"], - index=change["index"], - target_name=change["target_name"], - origin_name=change["origin_name"])) - return result - - def _createMaterialOutputModel(self, material_data: Dict[str, Any]) -> "MaterialOutputModel": - material_manager = self._application.getMaterialManager() - material_group_list = None - - # Avoid crashing if there is no "guid" field in the metadata - material_guid = material_data.get("guid") - if material_guid: - material_group_list = material_manager.getMaterialGroupListByGUID(material_guid) - - # This can happen if the connected machine has no material in one or more extruders (if GUID is empty), or the - # material is unknown to Cura, so we should return an "empty" or "unknown" material model. - if material_group_list is None: - material_name = i18n_catalog.i18nc("@label:material", "Empty") if len(material_data.get("guid", "")) == 0 \ - else i18n_catalog.i18nc("@label:material", "Unknown") - - return MaterialOutputModel(guid = material_data.get("guid", ""), - type = material_data.get("material", ""), - color = material_data.get("color", ""), - brand = material_data.get("brand", ""), - name = material_data.get("name", material_name) - ) - - # 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() - else: - Logger.log("w", - "Unable to find material with guid {guid}. Using data as provided by cluster".format( - guid=material_data["guid"])) - color = material_data["color"] - brand = material_data["brand"] - material_type = material_data["material"] - name = i18n_catalog.i18nc("@label:material", "Empty") if material_data["material"] == "empty" \ - else i18n_catalog.i18nc("@label:material", "Unknown") - return MaterialOutputModel(guid = material_data["guid"], type = material_type, - brand = brand, color = color, name = name) - - def _updatePrinter(self, printer: PrinterOutputModel, data: Dict[str, Any]) -> None: - # For some unknown reason the cluster wants UUID for everything, except for sending a job directly to a printer. - # Then we suddenly need the unique name. So in order to not have to mess up all the other code, we save a mapping. - self._printer_uuid_to_unique_name_mapping[data["uuid"]] = data["unique_name"] - - definitions = ContainerRegistry.getInstance().findDefinitionContainers(name = data["machine_variant"]) - if not definitions: - Logger.log("w", "Unable to find definition for machine variant %s", data["machine_variant"]) - return - - machine_definition = definitions[0] - - printer.updateName(data["friendly_name"]) - printer.updateKey(data["uuid"]) - printer.updateType(data["machine_variant"]) - - if data["status"] != "unreachable": - self._application.getDiscoveredPrintersModel().updateDiscoveredPrinter(data["ip_address"], - name = data["friendly_name"], - machine_type = data["machine_variant"]) - - # Do not store the build plate information that comes from connect if the current printer has not build plate information - if "build_plate" in data and machine_definition.getMetaDataEntry("has_variant_buildplates", False): - printer.updateBuildplate(data["build_plate"]["type"]) - if not data["enabled"]: - printer.updateState("disabled") - else: - printer.updateState(data["status"]) - - for index in range(0, self._number_of_extruders): - extruder = printer.extruders[index] - try: - extruder_data = data["configuration"][index] - except IndexError: - break - - extruder.updateHotendID(extruder_data.get("print_core_id", "")) - - material_data = extruder_data["material"] - if extruder.activeMaterial is None or extruder.activeMaterial.guid != material_data["guid"]: - material = self._createMaterialOutputModel(material_data) - extruder.updateActiveMaterial(material) - - def _removeJob(self, job: UM3PrintJobOutputModel) -> bool: - if job not in self._print_jobs: - return False - - if job.assignedPrinter: - job.assignedPrinter.updateActivePrintJob(None) - job.stateChanged.disconnect(self._printJobStateChanged) - self._print_jobs.remove(job) - - return True - - def _removePrinter(self, printer: PrinterOutputModel) -> None: - self._printers.remove(printer) - if self._active_printer == printer: - self._active_printer = None - self.activePrinterChanged.emit() - - ## Sync the material profiles in Cura with the printer. - # - # This gets called when connecting to a printer as well as when sending a - # print. - def sendMaterialProfiles(self) -> None: - job = SendMaterialJob(device = self) - job.run() - -def loadJsonFromReply(reply: QNetworkReply) -> Optional[List[Dict[str, Any]]]: - try: - result = json.loads(bytes(reply.readAll()).decode("utf-8")) - except json.decoder.JSONDecodeError: - Logger.logException("w", "Unable to decode JSON from reply.") - return None - return result - - -def checkValidGetReply(reply: QNetworkReply) -> bool: - status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) - - if status_code != 200: - Logger.log("w", "Got status code {status_code} while trying to get data".format(status_code=status_code)) - return False - return True - - -def findByKey(lst: List[Union[UM3PrintJobOutputModel, PrinterOutputModel]], key: str) -> Optional[UM3PrintJobOutputModel]: - for item in lst: - if item.key == key: - return item - return None diff --git a/plugins/UM3NetworkPrinting/src/ClusterUM3PrinterOutputController.py b/plugins/UM3NetworkPrinting/src/ClusterUM3PrinterOutputController.py deleted file mode 100644 index 370cfc9008..0000000000 --- a/plugins/UM3NetworkPrinting/src/ClusterUM3PrinterOutputController.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2017 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. - -from cura.PrinterOutput.PrinterOutputController import PrinterOutputController - -MYPY = False -if MYPY: - from cura.PrinterOutput.Models.PrintJobOutputModel import PrintJobOutputModel - -class ClusterUM3PrinterOutputController(PrinterOutputController): - def __init__(self, output_device): - super().__init__(output_device) - self.can_pre_heat_bed = False - self.can_pre_heat_hotends = False - self.can_control_manually = False - self.can_send_raw_gcode = False - - def setJobState(self, job: "PrintJobOutputModel", state: str): - data = "{\"action\": \"%s\"}" % state - self._output_device.put("print_jobs/%s/action" % job.key, data, on_finished=None) diff --git a/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py b/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py deleted file mode 100644 index 5d608ed546..0000000000 --- a/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py +++ /dev/null @@ -1,146 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. - -import os.path -import time -from typing import Optional, TYPE_CHECKING - -from PyQt5.QtCore import pyqtSignal, pyqtProperty, pyqtSlot, QObject - -from UM.PluginRegistry import PluginRegistry -from UM.Logger import Logger -from UM.i18n import i18nCatalog - -from cura.CuraApplication import CuraApplication -from cura.MachineAction import MachineAction -from cura.Settings.CuraContainerRegistry import CuraContainerRegistry - -from .UM3OutputDevicePlugin import UM3OutputDevicePlugin - -if TYPE_CHECKING: - from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice - -catalog = i18nCatalog("cura") - - -class DiscoverUM3Action(MachineAction): - discoveredDevicesChanged = pyqtSignal() - - def __init__(self) -> None: - super().__init__("DiscoverUM3Action", catalog.i18nc("@action","Connect via Network")) - self._qml_url = "resources/qml/DiscoverUM3Action.qml" - - self._network_plugin = None #type: Optional[UM3OutputDevicePlugin] - - self.__additional_components_view = None #type: Optional[QObject] - - self._application = CuraApplication.getInstance() - self._api = self._application.getCuraAPI() - - self._application.engineCreatedSignal.connect(self._createAdditionalComponentsView) - - self._last_zero_conf_event_time = time.time() #type: float - - # Time to wait after a zero-conf service change before allowing a zeroconf reset - self._zero_conf_change_grace_period = 0.25 #type: float - - # Overrides the one in MachineAction. - # This requires not attention from the user (any more), so we don't need to show any 'upgrade screens'. - def needsUserInteraction(self) -> bool: - return False - - @pyqtSlot() - def startDiscovery(self): - if not self._network_plugin: - Logger.log("d", "Starting device discovery.") - self._network_plugin = self._application.getOutputDeviceManager().getOutputDevicePlugin("UM3NetworkPrinting") - self._network_plugin.discoveredDevicesChanged.connect(self._onDeviceDiscoveryChanged) - self.discoveredDevicesChanged.emit() - - ## Re-filters the list of devices. - @pyqtSlot() - def reset(self): - Logger.log("d", "Reset the list of found devices.") - if self._network_plugin: - self._network_plugin.resetLastManualDevice() - self.discoveredDevicesChanged.emit() - - @pyqtSlot() - def restartDiscovery(self): - # Ensure that there is a bit of time after a printer has been discovered. - # This is a work around for an issue with Qt 5.5.1 up to Qt 5.7 which can segfault if we do this too often. - # It's most likely that the QML engine is still creating delegates, where the python side already deleted or - # garbage collected the data. - # Whatever the case, waiting a bit ensures that it doesn't crash. - if time.time() - self._last_zero_conf_event_time > self._zero_conf_change_grace_period: - if not self._network_plugin: - self.startDiscovery() - else: - self._network_plugin.startDiscovery() - - @pyqtSlot(str, str) - def removeManualDevice(self, key, address): - if not self._network_plugin: - return - - self._network_plugin.removeManualDevice(key, address) - - @pyqtSlot(str, str) - def setManualDevice(self, key, address): - if key != "": - # This manual printer replaces a current manual printer - self._network_plugin.removeManualDevice(key) - - if address != "": - self._network_plugin.addManualDevice(address) - - def _onDeviceDiscoveryChanged(self, *args): - self._last_zero_conf_event_time = time.time() - self.discoveredDevicesChanged.emit() - - @pyqtProperty("QVariantList", notify = discoveredDevicesChanged) - def foundDevices(self): - if self._network_plugin: - - printers = list(self._network_plugin.getDiscoveredDevices().values()) - printers.sort(key = lambda k: k.name) - return printers - else: - return [] - - @pyqtSlot() - def refreshConnections(self) -> None: - if self._network_plugin: - self._network_plugin.refreshConnections() - - # TODO: Improve naming - # TODO: CHANGE TO HOSTNAME - @pyqtSlot(result = str) - def getLastManualEntryKey(self) -> str: - if self._network_plugin: - return self._network_plugin.getLastManualDevice() - return "" - - # TODO: Better naming needed. Exists where? On the current machine? On all machines? - # TODO: CHANGE TO HOSTNAME - @pyqtSlot(str, result = bool) - def existsKey(self, key: str) -> bool: - metadata_filter = {"um_network_key": key} - containers = CuraContainerRegistry.getInstance().findContainerStacks(type="machine", **metadata_filter) - return bool(containers) - - def _createAdditionalComponentsView(self) -> None: - Logger.log("d", "Creating additional ui components for UM3.") - - # Create networking dialog - plugin_path = PluginRegistry.getInstance().getPluginPath("UM3NetworkPrinting") - if not plugin_path: - return - path = os.path.join(plugin_path, "resources/qml/UM3InfoComponents.qml") - self.__additional_components_view = self._application.createQmlComponent(path, {"manager": self}) - if not self.__additional_components_view: - Logger.log("w", "Could not create ui components for UM3.") - return - - # Create extra components - self._application.addAdditionalComponent("monitorButtons", self.__additional_components_view.findChild(QObject, "networkPrinterConnectButton")) diff --git a/plugins/UM3NetworkPrinting/src/ExportFileJob.py b/plugins/UM3NetworkPrinting/src/ExportFileJob.py new file mode 100644 index 0000000000..56d15bc835 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/ExportFileJob.py @@ -0,0 +1,39 @@ +from typing import List, Optional + +from UM.FileHandler.FileHandler import FileHandler +from UM.FileHandler.WriteFileJob import WriteFileJob +from UM.Logger import Logger +from UM.Scene.SceneNode import SceneNode +from cura.CuraApplication import CuraApplication + +from .MeshFormatHandler import MeshFormatHandler + + +## Job that exports the build plate to the correct file format for the target cluster. +class ExportFileJob(WriteFileJob): + + def __init__(self, file_handler: Optional[FileHandler], nodes: List[SceneNode], firmware_version: str) -> None: + + self._mesh_format_handler = MeshFormatHandler(file_handler, firmware_version) + if not self._mesh_format_handler.is_valid: + Logger.log("e", "Missing file or mesh writer!") + return + + super().__init__(self._mesh_format_handler.writer, self._mesh_format_handler.createStream(), nodes, + self._mesh_format_handler.file_mode) + + # Determine the filename. + job_name = CuraApplication.getInstance().getPrintInformation().jobName + extension = self._mesh_format_handler.preferred_format.get("extension", "") + self.setFileName("{}.{}".format(job_name, extension)) + + ## Get the mime type of the selected export file type. + def getMimeType(self) -> str: + return self._mesh_format_handler.mime_type + + ## Get the job result as bytes as that is what we need to upload to the cluster. + def getOutput(self) -> bytes: + output = self.getStream().getvalue() + if isinstance(output, str): + output = output.encode("utf-8") + return output diff --git a/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py b/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py deleted file mode 100644 index 5c1948b977..0000000000 --- a/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py +++ /dev/null @@ -1,646 +0,0 @@ -from typing import List, Optional - -from cura.CuraApplication import CuraApplication -from cura.PrinterOutput.NetworkedPrinterOutputDevice import NetworkedPrinterOutputDevice, AuthState -from cura.PrinterOutput.Models.PrinterOutputModel import PrinterOutputModel -from cura.PrinterOutput.Models.PrintJobOutputModel import PrintJobOutputModel -from cura.PrinterOutput.Models.MaterialOutputModel import MaterialOutputModel -from cura.PrinterOutput.PrinterOutputDevice import ConnectionType - -from cura.Settings.ContainerManager import ContainerManager -from cura.Settings.ExtruderManager import ExtruderManager - -from UM.FileHandler.FileHandler import FileHandler -from UM.i18n import i18nCatalog -from UM.Logger import Logger -from UM.Message import Message -from UM.PluginRegistry import PluginRegistry -from UM.Scene.SceneNode import SceneNode -from UM.Settings.ContainerRegistry import ContainerRegistry - -from PyQt5.QtNetwork import QNetworkRequest -from PyQt5.QtCore import QTimer, QUrl -from PyQt5.QtWidgets import QMessageBox - -from .LegacyUM3PrinterOutputController import LegacyUM3PrinterOutputController - -from time import time - -import json -import os - - -i18n_catalog = i18nCatalog("cura") - - -## This is the output device for the "Legacy" API of the UM3. All firmware before 4.0.1 uses this API. -# Everything after that firmware uses the ClusterUM3Output. -# The Legacy output device can only have one printer (whereas the cluster can have 0 to n). -# -# Authentication is done in a number of steps; -# 1. Request an id / key pair by sending the application & user name. (state = authRequested) -# 2. Machine sends this back and will display an approve / deny message on screen. (state = AuthReceived) -# 3. OutputDevice will poll if the button was pressed. -# 4. At this point the machine either has the state Authenticated or AuthenticationDenied. -# 5. As a final step, we verify the authentication, as this forces the QT manager to setup the authenticator. -class LegacyUM3OutputDevice(NetworkedPrinterOutputDevice): - def __init__(self, device_id, address: str, properties, parent = None) -> None: - super().__init__(device_id = device_id, address = address, properties = properties, connection_type = ConnectionType.NetworkConnection, parent = parent) - self._api_prefix = "/api/v1/" - self._number_of_extruders = 2 - - self._authentication_id = None - self._authentication_key = None - - self._authentication_counter = 0 - self._max_authentication_counter = 5 * 60 # Number of attempts before authentication timed out (5 min) - - self._authentication_timer = QTimer() - self._authentication_timer.setInterval(1000) # TODO; Add preference for update interval - self._authentication_timer.setSingleShot(False) - - self._authentication_timer.timeout.connect(self._onAuthenticationTimer) - - # The messages are created when connect is called the first time. - # This ensures that the messages are only created for devices that actually want to connect. - self._authentication_requested_message = None - self._authentication_failed_message = None - self._authentication_succeeded_message = None - self._not_authenticated_message = None - - self.authenticationStateChanged.connect(self._onAuthenticationStateChanged) - - self.setPriority(3) # Make sure the output device gets selected above local file output - self.setName(self._id) - self.setShortDescription(i18n_catalog.i18nc("@action:button Preceded by 'Ready to'.", "Print over network")) - self.setDescription(i18n_catalog.i18nc("@properties:tooltip", "Print over network")) - - self.setIconName("print") - - self._output_controller = LegacyUM3PrinterOutputController(self) - - def _createMonitorViewFromQML(self) -> None: - if self._monitor_view_qml_path is None and PluginRegistry.getInstance() is not None: - self._monitor_view_qml_path = os.path.join( - PluginRegistry.getInstance().getPluginPath("UM3NetworkPrinting"), - "resources", "qml", "MonitorStage.qml" - ) - super()._createMonitorViewFromQML() - - def _onAuthenticationStateChanged(self): - # We only accept commands if we are authenticated. - self._setAcceptsCommands(self._authentication_state == AuthState.Authenticated) - - if self._authentication_state == AuthState.Authenticated: - self.setConnectionText(i18n_catalog.i18nc("@info:status", "Connected over the network.")) - elif self._authentication_state == AuthState.AuthenticationRequested: - self.setConnectionText(i18n_catalog.i18nc("@info:status", - "Connected over the network. Please approve the access request on the printer.")) - elif self._authentication_state == AuthState.AuthenticationDenied: - self.setConnectionText(i18n_catalog.i18nc("@info:status", "Connected over the network. No access to control the printer.")) - - - def _setupMessages(self): - self._authentication_requested_message = Message(i18n_catalog.i18nc("@info:status", - "Access to the printer requested. Please approve the request on the printer"), - lifetime=0, dismissable=False, progress=0, - title=i18n_catalog.i18nc("@info:title", - "Authentication status")) - - self._authentication_failed_message = Message("", title=i18n_catalog.i18nc("@info:title", "Authentication Status")) - self._authentication_failed_message.addAction("Retry", i18n_catalog.i18nc("@action:button", "Retry"), None, - i18n_catalog.i18nc("@info:tooltip", "Re-send the access request")) - self._authentication_failed_message.actionTriggered.connect(self._messageCallback) - self._authentication_succeeded_message = Message( - i18n_catalog.i18nc("@info:status", "Access to the printer accepted"), - title=i18n_catalog.i18nc("@info:title", "Authentication Status")) - - self._not_authenticated_message = Message( - i18n_catalog.i18nc("@info:status", "No access to print with this printer. Unable to send print job."), - title=i18n_catalog.i18nc("@info:title", "Authentication Status")) - self._not_authenticated_message.addAction("Request", i18n_catalog.i18nc("@action:button", "Request Access"), - None, i18n_catalog.i18nc("@info:tooltip", - "Send access request to the printer")) - self._not_authenticated_message.actionTriggered.connect(self._messageCallback) - - def _messageCallback(self, message_id=None, action_id="Retry"): - if action_id == "Request" or action_id == "Retry": - if self._authentication_failed_message: - self._authentication_failed_message.hide() - if self._not_authenticated_message: - self._not_authenticated_message.hide() - - self._requestAuthentication() - - def connect(self): - super().connect() - self._setupMessages() - global_container = CuraApplication.getInstance().getGlobalContainerStack() - if global_container: - self._authentication_id = global_container.getMetaDataEntry("network_authentication_id", None) - self._authentication_key = global_container.getMetaDataEntry("network_authentication_key", None) - - def close(self): - super().close() - if self._authentication_requested_message: - self._authentication_requested_message.hide() - if self._authentication_failed_message: - self._authentication_failed_message.hide() - if self._authentication_succeeded_message: - self._authentication_succeeded_message.hide() - self._sending_gcode = False - self._compressing_gcode = False - self._authentication_timer.stop() - - ## Send all material profiles to the printer. - def _sendMaterialProfiles(self): - Logger.log("i", "Sending material profiles to printer") - - # TODO: Might want to move this to a job... - for container in ContainerRegistry.getInstance().findInstanceContainers(type="material"): - try: - xml_data = container.serialize() - if xml_data == "" or xml_data is None: - continue - - names = ContainerManager.getInstance().getLinkedMaterials(container.getId()) - if names: - # There are other materials that share this GUID. - if not container.isReadOnly(): - continue # If it's not readonly, it's created by user, so skip it. - - file_name = "none.xml" - - self.postForm("materials", "form-data; name=\"file\";filename=\"%s\"" % file_name, xml_data.encode(), on_finished=None) - - except NotImplementedError: - # If the material container is not the most "generic" one it can't be serialized an will raise a - # NotImplementedError. We can simply ignore these. - pass - - def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: - if not self.activePrinter: - # No active printer. Unable to write - return - - if self.activePrinter.state not in ["idle", ""]: - # Printer is not able to accept commands. - return - - if self._authentication_state != AuthState.Authenticated: - # Not authenticated, so unable to send job. - return - - self.writeStarted.emit(self) - - gcode_dict = getattr(CuraApplication.getInstance().getController().getScene(), "gcode_dict", []) - active_build_plate_id = CuraApplication.getInstance().getMultiBuildPlateModel().activeBuildPlate - gcode_list = gcode_dict[active_build_plate_id] - - if not gcode_list: - # Unable to find g-code. Nothing to send - return - - self._gcode = gcode_list - - errors = self._checkForErrors() - if errors: - text = i18n_catalog.i18nc("@label", "Unable to start a new print job.") - informative_text = i18n_catalog.i18nc("@label", - "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. " - "Please resolve this issues before continuing.") - detailed_text = "" - for error in errors: - detailed_text += error + "\n" - - CuraApplication.getInstance().messageBox(i18n_catalog.i18nc("@window:title", "Mismatched configuration"), - text, - informative_text, - detailed_text, - buttons=QMessageBox.Ok, - icon=QMessageBox.Critical, - callback = self._messageBoxCallback - ) - return # Don't continue; Errors must block sending the job to the printer. - - # There might be multiple things wrong with the configuration. Check these before starting. - warnings = self._checkForWarnings() - - if warnings: - text = i18n_catalog.i18nc("@label", "Are you sure you wish to print with the selected configuration?") - informative_text = i18n_catalog.i18nc("@label", - "There is a mismatch between the configuration or calibration of the printer and Cura. " - "For the best result, always slice for the PrintCores and materials that are inserted in your printer.") - detailed_text = "" - for warning in warnings: - detailed_text += warning + "\n" - - CuraApplication.getInstance().messageBox(i18n_catalog.i18nc("@window:title", "Mismatched configuration"), - text, - informative_text, - detailed_text, - buttons=QMessageBox.Yes + QMessageBox.No, - icon=QMessageBox.Question, - callback=self._messageBoxCallback - ) - return - - # No warnings or errors, so we're good to go. - self._startPrint() - - # Notify the UI that a switch to the print monitor should happen - CuraApplication.getInstance().getController().setActiveStage("MonitorStage") - - def _startPrint(self): - Logger.log("i", "Sending print job to printer.") - if self._sending_gcode: - self._error_message = Message( - i18n_catalog.i18nc("@info:status", - "Sending new jobs (temporarily) blocked, still sending the previous print job.")) - self._error_message.show() - return - - self._sending_gcode = True - - self._send_gcode_start = time() - self._progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), 0, False, -1, - i18n_catalog.i18nc("@info:title", "Sending Data")) - self._progress_message.addAction("Abort", i18n_catalog.i18nc("@action:button", "Cancel"), None, "") - self._progress_message.actionTriggered.connect(self._progressMessageActionTriggered) - self._progress_message.show() - - compressed_gcode = self._compressGCode() - if compressed_gcode is None: - # Abort was called. - return - - file_name = "%s.gcode.gz" % CuraApplication.getInstance().getPrintInformation().jobName - self.postForm("print_job", "form-data; name=\"file\";filename=\"%s\"" % file_name, compressed_gcode, - on_finished=self._onPostPrintJobFinished) - - return - - def _progressMessageActionTriggered(self, message_id=None, action_id=None): - if action_id == "Abort": - Logger.log("d", "User aborted sending print to remote.") - self._progress_message.hide() - self._compressing_gcode = False - self._sending_gcode = False - CuraApplication.getInstance().getController().setActiveStage("PrepareStage") - - def _onPostPrintJobFinished(self, reply): - self._progress_message.hide() - self._sending_gcode = False - - def _onUploadPrintJobProgress(self, bytes_sent, bytes_total): - if bytes_total > 0: - new_progress = bytes_sent / bytes_total * 100 - # Treat upload progress as response. Uploading can take more than 10 seconds, so if we don't, we can get - # timeout responses if this happens. - self._last_response_time = time() - if new_progress > self._progress_message.getProgress(): - self._progress_message.show() # Ensure that the message is visible. - self._progress_message.setProgress(bytes_sent / bytes_total * 100) - else: - self._progress_message.setProgress(0) - - self._progress_message.hide() - - def _messageBoxCallback(self, button): - def delayedCallback(): - if button == QMessageBox.Yes: - self._startPrint() - else: - CuraApplication.getInstance().getController().setActiveStage("PrepareStage") - # For some unknown reason Cura on OSX will hang if we do the call back code - # immediately without first returning and leaving QML's event system. - - QTimer.singleShot(100, delayedCallback) - - def _checkForErrors(self): - errors = [] - print_information = CuraApplication.getInstance().getPrintInformation() - if not print_information.materialLengths: - Logger.log("w", "There is no material length information. Unable to check for errors.") - return errors - - for index, extruder in enumerate(self.activePrinter.extruders): - # Due to airflow issues, both slots must be loaded, regardless if they are actually used or not. - if extruder.hotendID == "": - # No Printcore loaded. - errors.append(i18n_catalog.i18nc("@info:status", "No Printcore loaded in slot {slot_number}".format(slot_number=index + 1))) - - if index < len(print_information.materialLengths) and print_information.materialLengths[index] != 0: - # The extruder is by this print. - if extruder.activeMaterial is None: - # No active material - errors.append(i18n_catalog.i18nc("@info:status", "No material loaded in slot {slot_number}".format(slot_number=index + 1))) - return errors - - def _checkForWarnings(self): - warnings = [] - print_information = CuraApplication.getInstance().getPrintInformation() - - if not print_information.materialLengths: - Logger.log("w", "There is no material length information. Unable to check for warnings.") - return warnings - - extruder_manager = ExtruderManager.getInstance() - - for index, extruder in enumerate(self.activePrinter.extruders): - if index < len(print_information.materialLengths) and print_information.materialLengths[index] != 0: - # The extruder is by this print. - - # TODO: material length check - - # Check if the right Printcore is active. - variant = extruder_manager.getExtruderStack(index).findContainer({"type": "variant"}) - if variant: - if variant.getName() != extruder.hotendID: - warnings.append(i18n_catalog.i18nc("@label", "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}".format(cura_printcore_name = variant.getName(), remote_printcore_name = extruder.hotendID, extruder_id = index + 1))) - else: - Logger.log("w", "Unable to find variant.") - - # Check if the right material is loaded. - local_material = extruder_manager.getExtruderStack(index).findContainer({"type": "material"}) - if local_material: - if extruder.activeMaterial.guid != local_material.getMetaDataEntry("GUID"): - Logger.log("w", "Extruder %s has a different material (%s) as Cura (%s)", index + 1, extruder.activeMaterial.guid, local_material.getMetaDataEntry("GUID")) - warnings.append(i18n_catalog.i18nc("@label", "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}").format(local_material.getName(), extruder.activeMaterial.name, index + 1)) - else: - Logger.log("w", "Unable to find material.") - - return warnings - - def _update(self): - if not super()._update(): - return - if self._authentication_state == AuthState.NotAuthenticated: - if self._authentication_id is None and self._authentication_key is None: - # This machine doesn't have any authentication, so request it. - self._requestAuthentication() - elif self._authentication_id is not None and self._authentication_key is not None: - # We have authentication info, but we haven't checked it out yet. Do so now. - self._verifyAuthentication() - elif self._authentication_state == AuthState.AuthenticationReceived: - # We have an authentication, but it's not confirmed yet. - self._checkAuthentication() - - # We don't need authentication for requesting info, so we can go right ahead with requesting this. - self.get("printer", on_finished=self._onGetPrinterDataFinished) - self.get("print_job", on_finished=self._onGetPrintJobFinished) - - def _resetAuthenticationRequestedMessage(self): - if self._authentication_requested_message: - self._authentication_requested_message.hide() - self._authentication_timer.stop() - self._authentication_counter = 0 - - def _onAuthenticationTimer(self): - self._authentication_counter += 1 - self._authentication_requested_message.setProgress( - self._authentication_counter / self._max_authentication_counter * 100) - if self._authentication_counter > self._max_authentication_counter: - self._authentication_timer.stop() - Logger.log("i", "Authentication timer ended. Setting authentication to denied for printer: %s" % self._id) - self.setAuthenticationState(AuthState.AuthenticationDenied) - self._resetAuthenticationRequestedMessage() - self._authentication_failed_message.show() - - def _verifyAuthentication(self): - Logger.log("d", "Attempting to verify authentication") - # This will ensure that the "_onAuthenticationRequired" is triggered, which will setup the authenticator. - self.get("auth/verify", on_finished=self._onVerifyAuthenticationCompleted) - - def _onVerifyAuthenticationCompleted(self, reply): - status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) - if status_code == 401: - # Something went wrong; We somehow tried to verify authentication without having one. - Logger.log("d", "Attempted to verify auth without having one.") - self._authentication_id = None - self._authentication_key = None - self.setAuthenticationState(AuthState.NotAuthenticated) - elif status_code == 403 and self._authentication_state != AuthState.Authenticated: - # If we were already authenticated, we probably got an older message back all of the sudden. Drop that. - Logger.log("d", - "While trying to verify the authentication state, we got a forbidden response. Our own auth state was %s. ", - self._authentication_state) - self.setAuthenticationState(AuthState.AuthenticationDenied) - self._authentication_failed_message.show() - elif status_code == 200: - self.setAuthenticationState(AuthState.Authenticated) - - def _checkAuthentication(self): - Logger.log("d", "Checking if authentication is correct for id %s and key %s", self._authentication_id, self._getSafeAuthKey()) - self.get("auth/check/" + str(self._authentication_id), on_finished=self._onCheckAuthenticationFinished) - - def _onCheckAuthenticationFinished(self, reply): - if str(self._authentication_id) not in reply.url().toString(): - Logger.log("w", "Got an old id response.") - # Got response for old authentication ID. - return - try: - data = json.loads(bytes(reply.readAll()).decode("utf-8")) - except json.decoder.JSONDecodeError: - Logger.log("w", "Received an invalid authentication check from printer: Not valid JSON.") - return - - if data.get("message", "") == "authorized": - Logger.log("i", "Authentication was approved") - self.setAuthenticationState(AuthState.Authenticated) - self._saveAuthentication() - - # Double check that everything went well. - self._verifyAuthentication() - - # Notify the user. - self._resetAuthenticationRequestedMessage() - self._authentication_succeeded_message.show() - elif data.get("message", "") == "unauthorized": - Logger.log("i", "Authentication was denied.") - self.setAuthenticationState(AuthState.AuthenticationDenied) - self._authentication_failed_message.show() - - def _saveAuthentication(self) -> None: - global_container_stack = CuraApplication.getInstance().getGlobalContainerStack() - if self._authentication_key is None: - Logger.log("e", "Authentication key is None, nothing to save.") - return - if self._authentication_id is None: - Logger.log("e", "Authentication id is None, nothing to save.") - return - if global_container_stack: - global_container_stack.setMetaDataEntry("network_authentication_key", self._authentication_key) - - global_container_stack.setMetaDataEntry("network_authentication_id", self._authentication_id) - - # Force save so we are sure the data is not lost. - CuraApplication.getInstance().saveStack(global_container_stack) - Logger.log("i", "Authentication succeeded for id %s and key %s", self._authentication_id, - self._getSafeAuthKey()) - else: - Logger.log("e", "Unable to save authentication for id %s and key %s", self._authentication_id, - self._getSafeAuthKey()) - - def _onRequestAuthenticationFinished(self, reply): - try: - data = json.loads(bytes(reply.readAll()).decode("utf-8")) - except json.decoder.JSONDecodeError: - Logger.log("w", "Received an invalid authentication request reply from printer: Not valid JSON.") - self.setAuthenticationState(AuthState.NotAuthenticated) - return - - self.setAuthenticationState(AuthState.AuthenticationReceived) - self._authentication_id = data["id"] - self._authentication_key = data["key"] - Logger.log("i", "Got a new authentication ID (%s) and KEY (%s). Waiting for authorization.", - self._authentication_id, self._getSafeAuthKey()) - - def _requestAuthentication(self): - self._authentication_requested_message.show() - self._authentication_timer.start() - - # Reset any previous authentication info. If this isn't done, the "Retry" action on the failed message might - # give issues. - self._authentication_key = None - self._authentication_id = None - - self.post("auth/request", - json.dumps({"application": "Cura-" + CuraApplication.getInstance().getVersion(), - "user": self._getUserName()}), - on_finished=self._onRequestAuthenticationFinished) - - self.setAuthenticationState(AuthState.AuthenticationRequested) - - def _onAuthenticationRequired(self, reply, authenticator): - if self._authentication_id is not None and self._authentication_key is not None: - Logger.log("d", - "Authentication was required for printer: %s. Setting up authenticator with ID %s and key %s", - self._id, self._authentication_id, self._getSafeAuthKey()) - authenticator.setUser(self._authentication_id) - authenticator.setPassword(self._authentication_key) - else: - Logger.log("d", "No authentication is available to use for %s, but we did got a request for it.", self._id) - - def _onGetPrintJobFinished(self, reply): - status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) - - if not self._printers: - return # Ignore the data for now, we don't have info about a printer yet. - printer = self._printers[0] - - if status_code == 200: - try: - result = json.loads(bytes(reply.readAll()).decode("utf-8")) - except json.decoder.JSONDecodeError: - Logger.log("w", "Received an invalid print job state message: Not valid JSON.") - return - if printer.activePrintJob is None: - print_job = PrintJobOutputModel(output_controller=self._output_controller) - printer.updateActivePrintJob(print_job) - else: - print_job = printer.activePrintJob - print_job.updateState(result["state"]) - print_job.updateTimeElapsed(result["time_elapsed"]) - print_job.updateTimeTotal(result["time_total"]) - print_job.updateName(result["name"]) - elif status_code == 404: - # No job found, so delete the active print job (if any!) - printer.updateActivePrintJob(None) - else: - Logger.log("w", - "Got status code {status_code} while trying to get printer data".format(status_code=status_code)) - - def materialHotendChangedMessage(self, callback): - CuraApplication.getInstance().messageBox(i18n_catalog.i18nc("@window:title", "Sync with your printer"), - i18n_catalog.i18nc("@label", - "Would you like to use your current printer configuration in Cura?"), - i18n_catalog.i18nc("@label", - "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer."), - buttons=QMessageBox.Yes + QMessageBox.No, - icon=QMessageBox.Question, - callback=callback - ) - - def _onGetPrinterDataFinished(self, reply): - status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) - if status_code == 200: - try: - result = json.loads(bytes(reply.readAll()).decode("utf-8")) - except json.decoder.JSONDecodeError: - Logger.log("w", "Received an invalid printer state message: Not valid JSON.") - return - - if not self._printers: - # Quickest way to get the firmware version is to grab it from the zeroconf. - firmware_version = self._properties.get(b"firmware_version", b"").decode("utf-8") - self._printers = [PrinterOutputModel(output_controller=self._output_controller, number_of_extruders=self._number_of_extruders, firmware_version=firmware_version)] - self._printers[0].setCameraUrl(QUrl("http://" + self._address + ":8080/?action=stream")) - for extruder in self._printers[0].extruders: - extruder.activeMaterialChanged.connect(self.materialIdChanged) - extruder.hotendIDChanged.connect(self.hotendIdChanged) - self.printersChanged.emit() - - # LegacyUM3 always has a single printer. - printer = self._printers[0] - printer.updateBedTemperature(result["bed"]["temperature"]["current"]) - printer.updateTargetBedTemperature(result["bed"]["temperature"]["target"]) - printer.updateState(result["status"]) - - try: - # If we're still handling the request, we should ignore remote for a bit. - if not printer.getController().isPreheatRequestInProgress(): - printer.updateIsPreheating(result["bed"]["pre_heat"]["active"]) - except KeyError: - # Older firmwares don't support preheating, so we need to fake it. - pass - - head_position = result["heads"][0]["position"] - printer.updateHeadPosition(head_position["x"], head_position["y"], head_position["z"]) - - for index in range(0, self._number_of_extruders): - temperatures = result["heads"][0]["extruders"][index]["hotend"]["temperature"] - extruder = printer.extruders[index] - extruder.updateTargetHotendTemperature(temperatures["target"]) - extruder.updateHotendTemperature(temperatures["current"]) - - material_guid = result["heads"][0]["extruders"][index]["active_material"]["guid"] - - if extruder.activeMaterial is None or extruder.activeMaterial.guid != material_guid: - # Find matching material (as we need to set brand, type & color) - containers = ContainerRegistry.getInstance().findInstanceContainers(type="material", - GUID=material_guid) - if containers: - color = containers[0].getMetaDataEntry("color_code") - brand = containers[0].getMetaDataEntry("brand") - material_type = containers[0].getMetaDataEntry("material") - name = containers[0].getName() - else: - # Unknown material. - color = "#00000000" - brand = "Unknown" - material_type = "Unknown" - name = "Unknown" - material = MaterialOutputModel(guid=material_guid, type=material_type, - brand=brand, color=color, name = name) - extruder.updateActiveMaterial(material) - - try: - hotend_id = result["heads"][0]["extruders"][index]["hotend"]["id"] - except KeyError: - hotend_id = "" - printer.extruders[index].updateHotendID(hotend_id) - - else: - Logger.log("w", - "Got status code {status_code} while trying to get printer data".format(status_code = status_code)) - - ## Convenience function to "blur" out all but the last 5 characters of the auth key. - # This can be used to debug print the key, without it compromising the security. - def _getSafeAuthKey(self): - if self._authentication_key is not None: - result = self._authentication_key[-5:] - result = "********" + result - return result - - return self._authentication_key diff --git a/plugins/UM3NetworkPrinting/src/LegacyUM3PrinterOutputController.py b/plugins/UM3NetworkPrinting/src/LegacyUM3PrinterOutputController.py deleted file mode 100644 index 9e372d4113..0000000000 --- a/plugins/UM3NetworkPrinting/src/LegacyUM3PrinterOutputController.py +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright (c) 2019 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. - -from cura.PrinterOutput.PrinterOutputController import PrinterOutputController -from PyQt5.QtCore import QTimer -from UM.Version import Version - -MYPY = False -if MYPY: - from cura.PrinterOutput.Models.PrintJobOutputModel import PrintJobOutputModel - from cura.PrinterOutput.Models.PrinterOutputModel import PrinterOutputModel - - -class LegacyUM3PrinterOutputController(PrinterOutputController): - def __init__(self, output_device): - super().__init__(output_device) - self._preheat_bed_timer = QTimer() - self._preheat_bed_timer.setSingleShot(True) - self._preheat_bed_timer.timeout.connect(self._onPreheatBedTimerFinished) - self._preheat_printer = None - - self.can_control_manually = False - self.can_send_raw_gcode = False - - # Are we still waiting for a response about preheat? - # We need this so we can already update buttons, so it feels more snappy. - self._preheat_request_in_progress = False - - def isPreheatRequestInProgress(self): - return self._preheat_request_in_progress - - def setJobState(self, job: "PrintJobOutputModel", state: str): - data = "{\"target\": \"%s\"}" % state - self._output_device.put("print_job/state", data, on_finished=None) - - def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: float): - data = str(temperature) - self._output_device.put("printer/bed/temperature/target", data, on_finished = self._onPutBedTemperatureCompleted) - - def _onPutBedTemperatureCompleted(self, reply): - if Version(self._preheat_printer.firmwareVersion) < Version("3.5.92"): - # If it was handling a preheat, it isn't anymore. - self._preheat_request_in_progress = False - - def _onPutPreheatBedCompleted(self, reply): - self._preheat_request_in_progress = False - - def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed): - head_pos = printer._head_position - new_x = head_pos.x + x - new_y = head_pos.y + y - new_z = head_pos.z + z - data = "{\n\"x\":%s,\n\"y\":%s,\n\"z\":%s\n}" %(new_x, new_y, new_z) - self._output_device.put("printer/heads/0/position", data, on_finished=None) - - def homeBed(self, printer): - self._output_device.put("printer/heads/0/position/z", "0", on_finished=None) - - def _onPreheatBedTimerFinished(self): - self.setTargetBedTemperature(self._preheat_printer, 0) - self._preheat_printer.updateIsPreheating(False) - self._preheat_request_in_progress = True - - def cancelPreheatBed(self, printer: "PrinterOutputModel"): - self.preheatBed(printer, temperature=0, duration=0) - self._preheat_bed_timer.stop() - printer.updateIsPreheating(False) - - def preheatBed(self, printer: "PrinterOutputModel", temperature, duration): - try: - temperature = round(temperature) # The API doesn't allow floating point. - duration = round(duration) - except ValueError: - return # Got invalid values, can't pre-heat. - - if duration > 0: - data = """{"temperature": "%i", "timeout": "%i"}""" % (temperature, duration) - else: - data = """{"temperature": "%i"}""" % temperature - - # Real bed pre-heating support is implemented from 3.5.92 and up. - - if Version(printer.firmwareVersion) < Version("3.5.92"): - # No firmware-side duration support then, so just set target bed temp and set a timer. - self.setTargetBedTemperature(printer, temperature=temperature) - self._preheat_bed_timer.setInterval(duration * 1000) - self._preheat_bed_timer.start() - self._preheat_printer = printer - printer.updateIsPreheating(True) - return - - self._output_device.put("printer/bed/pre_heat", data, on_finished = self._onPutPreheatBedCompleted) - printer.updateIsPreheating(True) - self._preheat_request_in_progress = True - - diff --git a/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py b/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py index c3cd82a86d..9927bf744e 100644 --- a/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py +++ b/plugins/UM3NetworkPrinting/src/MeshFormatHandler.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 io from typing import Optional, Dict, Union, List, cast @@ -32,7 +32,7 @@ class MeshFormatHandler: # \return A dict with the file format details, with the following keys: # {id: str, extension: str, description: str, mime_type: str, mode: int, hide_in_file_dialog: bool} @property - def preferred_format(self) -> Optional[Dict[str, Union[str, int, bool]]]: + def preferred_format(self) -> Dict[str, Union[str, int, bool]]: return self._preferred_format ## Gets the file writer for the given file handler and mime type. @@ -90,6 +90,7 @@ class MeshFormatHandler: machine_file_formats = global_stack.getMetaDataEntry("file_formats").split(";") machine_file_formats = [file_type.strip() for file_type in machine_file_formats] + # Exception for UM3 firmware version >=4.4: UFP is now supported and should be the preferred file format. if "application/x-ufp" not in machine_file_formats and Version(firmware_version) >= Version("4.4"): machine_file_formats = ["application/x-ufp"] + machine_file_formats diff --git a/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py b/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py new file mode 100644 index 0000000000..311356de8e --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py @@ -0,0 +1,41 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import os + +from PyQt5.QtCore import QUrl +from PyQt5.QtGui import QDesktopServices + +from UM import i18nCatalog +from UM.Message import Message +from cura.CuraApplication import CuraApplication + + +I18N_CATALOG = i18nCatalog("cura") + + +class CloudFlowMessage(Message): + + def __init__(self, address: str) -> None: + + image_path = os.path.join( + CuraApplication.getInstance().getPluginRegistry().getPluginPath("UM3NetworkPrinting") or "", + "resources", "svg", "cloud-flow-start.svg" + ) + + super().__init__( + text=I18N_CATALOG.i18nc("@info:status", + "Send and monitor print jobs from anywhere using your Ultimaker account."), + lifetime=0, + dismissable=True, + option_state=False, + image_source=QUrl.fromLocalFile(image_path), + image_caption=I18N_CATALOG.i18nc("@info:status Ultimaker Cloud should not be translated.", + "Connect to Ultimaker Cloud"), + ) + self._address = address + self.addAction("", I18N_CATALOG.i18nc("@action", "Get started"), "", "") + self.actionTriggered.connect(self._onCloudFlowStarted) + + def _onCloudFlowStarted(self, messageId: str, actionId: str) -> None: + QDesktopServices.openUrl(QUrl("http://{}/cloud_connect".format(self._address))) + self.hide() diff --git a/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py b/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py new file mode 100644 index 0000000000..3a1a9f0e0f --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Messages/CloudPrinterDetectedMessage.py @@ -0,0 +1,45 @@ +# 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/Messages/LegacyDeviceNoLongerSupportedMessage.py b/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py new file mode 100644 index 0000000000..f4132dbcbc --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py @@ -0,0 +1,33 @@ +# 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 + + +I18N_CATALOG = i18nCatalog("cura") + + +## Message shown when trying to connect to a legacy printer device. +class LegacyDeviceNoLongerSupportedMessage(Message): + + # Singleton used to prevent duplicate messages of this type at the same time. + __is_visible = False + + def __init__(self) -> None: + super().__init__( + text = I18N_CATALOG.i18nc("@info:status", "You are attempting to connect to a printer that is not " + "running Ultimaker Connect. Please update the printer to the " + "latest firmware."), + title = I18N_CATALOG.i18nc("@info:title", "Update your printer"), + lifetime = 10 + ) + + def show(self) -> None: + if LegacyDeviceNoLongerSupportedMessage.__is_visible: + return + super().show() + LegacyDeviceNoLongerSupportedMessage.__is_visible = True + + def hide(self, send_signal = True) -> None: + super().hide(send_signal) + LegacyDeviceNoLongerSupportedMessage.__is_visible = False diff --git a/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py b/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py new file mode 100644 index 0000000000..e021b2ae99 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py @@ -0,0 +1,39 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import TYPE_CHECKING + +from UM import i18nCatalog +from UM.Message import Message + + +if TYPE_CHECKING: + from ..UltimakerNetworkedPrinterOutputDevice import UltimakerNetworkedPrinterOutputDevice + + +I18N_CATALOG = i18nCatalog("cura") + + +## Message shown when sending material files to cluster host. +class MaterialSyncMessage(Message): + + # Singleton used to prevent duplicate messages of this type at the same time. + __is_visible = False + + def __init__(self, device: "UltimakerNetworkedPrinterOutputDevice") -> None: + super().__init__( + text = I18N_CATALOG.i18nc("@info:status", "Cura has detected material profiles that were not yet installed " + "on the host printer of group {0}.", device.name), + title = I18N_CATALOG.i18nc("@info:title", "Sending materials to printer"), + lifetime = 10, + dismissable = True + ) + + def show(self) -> None: + if MaterialSyncMessage.__is_visible: + return + super().show() + MaterialSyncMessage.__is_visible = True + + def hide(self, send_signal = True) -> None: + super().hide(send_signal) + MaterialSyncMessage.__is_visible = False diff --git a/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py b/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py new file mode 100644 index 0000000000..77d7995fc7 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py @@ -0,0 +1,50 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import TYPE_CHECKING + +from PyQt5.QtCore import QUrl +from PyQt5.QtGui import QDesktopServices + +from UM import i18nCatalog +from UM.Message import Message + + +if TYPE_CHECKING: + from ..UltimakerNetworkedPrinterOutputDevice import UltimakerNetworkedPrinterOutputDevice + + +I18N_CATALOG = i18nCatalog("cura") + + +## Message shown when trying to connect to a printer that is not a host. +class NotClusterHostMessage(Message): + + # Singleton used to prevent duplicate messages of this type at the same time. + __is_visible = False + + def __init__(self, device: "UltimakerNetworkedPrinterOutputDevice") -> None: + super().__init__( + text = I18N_CATALOG.i18nc("@info:status", "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.", device.name), + title = I18N_CATALOG.i18nc("@info:title", "Not a group host"), + lifetime = 0, + dismissable = True + ) + self._address = device.address + self.addAction("", I18N_CATALOG.i18nc("@action", "Configure group"), "", "") + self.actionTriggered.connect(self._onConfigureClicked) + + def show(self) -> None: + if NotClusterHostMessage.__is_visible: + return + super().show() + NotClusterHostMessage.__is_visible = True + + def hide(self, send_signal = True) -> None: + super().hide(send_signal) + NotClusterHostMessage.__is_visible = False + + def _onConfigureClicked(self, messageId: str, actionId: str) -> None: + QDesktopServices.openUrl(QUrl("http://{}/print_jobs".format(self._address))) + self.hide() diff --git a/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py new file mode 100644 index 0000000000..be00292559 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py @@ -0,0 +1,18 @@ +# 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 + + +I18N_CATALOG = i18nCatalog("cura") + + +## Message shown when uploading a print job to a cluster is blocked because another upload is already in progress. +class PrintJobUploadBlockedMessage(Message): + + def __init__(self) -> None: + super().__init__( + text = I18N_CATALOG.i18nc("@info:status", "Please wait until the current job has been sent."), + title = I18N_CATALOG.i18nc("@info:title", "Print error"), + lifetime = 10 + ) diff --git a/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py new file mode 100644 index 0000000000..bb26a84953 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py @@ -0,0 +1,18 @@ +# 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 + + +I18N_CATALOG = i18nCatalog("cura") + + +## Message shown when uploading a print job to a cluster failed. +class PrintJobUploadErrorMessage(Message): + + def __init__(self, message: str = None) -> None: + super().__init__( + text = message or I18N_CATALOG.i18nc("@info:text", "Could not upload the data to the printer."), + title = I18N_CATALOG.i18nc("@info:title", "Network error"), + lifetime = 10 + ) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py similarity index 89% rename from plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py rename to plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py index 943bef2bc1..bdbab008e3 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py +++ b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.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 UM import i18nCatalog from UM.Message import Message @@ -8,11 +8,11 @@ I18N_CATALOG = i18nCatalog("cura") ## Class responsible for showing a progress message while a mesh is being uploaded to the cloud. -class CloudProgressMessage(Message): +class PrintJobUploadProgressMessage(Message): def __init__(self): super().__init__( title = I18N_CATALOG.i18nc("@info:status", "Sending Print Job"), - text = I18N_CATALOG.i18nc("@info:status", "Uploading via Ultimaker Cloud"), + text = I18N_CATALOG.i18nc("@info:status", "Uploading print job to printer."), progress = -1, lifetime = 0, dismissable = False, diff --git a/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py new file mode 100644 index 0000000000..c9be28d57f --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py @@ -0,0 +1,18 @@ +# 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 + + +I18N_CATALOG = i18nCatalog("cura") + + +## Message shown when uploading a print job to a cluster succeeded. +class PrintJobUploadSuccessMessage(Message): + + def __init__(self) -> None: + super().__init__( + text = I18N_CATALOG.i18nc("@info:status", "Print job was successfully sent to the printer."), + title = I18N_CATALOG.i18nc("@info:title", "Data Sent"), + lifetime = 5 + ) diff --git a/plugins/UM3NetworkPrinting/src/Messages/__init__.py b/plugins/UM3NetworkPrinting/src/Messages/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/plugins/UM3NetworkPrinting/src/Models.py b/plugins/UM3NetworkPrinting/src/Models.py deleted file mode 100644 index c5b9b16665..0000000000 --- a/plugins/UM3NetworkPrinting/src/Models.py +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. - - -## Base model that maps kwargs to instance attributes. -class BaseModel: - def __init__(self, **kwargs) -> None: - self.__dict__.update(kwargs) - self.validate() - - # Validates the model, raising an exception if the model is invalid. - def validate(self) -> None: - pass - - -## Class representing a material that was fetched from the cluster API. -class ClusterMaterial(BaseModel): - def __init__(self, guid: str, version: int, **kwargs) -> None: - self.guid = guid # type: str - self.version = version # type: int - super().__init__(**kwargs) - - def validate(self) -> None: - if not self.guid: - raise ValueError("guid is required on ClusterMaterial") - if not self.version: - raise ValueError("version is required on ClusterMaterial") - - -## Class representing a local material that was fetched from the container registry. -class LocalMaterial(BaseModel): - def __init__(self, GUID: str, id: str, version: int, **kwargs) -> None: - self.GUID = GUID # type: str - self.id = id # type: str - self.version = version # type: int - super().__init__(**kwargs) - - # - def validate(self) -> None: - super().validate() - if not self.GUID: - raise ValueError("guid is required on LocalMaterial") - if not self.version: - raise ValueError("version is required on LocalMaterial") - if not self.id: - raise ValueError("id is required on LocalMaterial") diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/BaseCloudModel.py b/plugins/UM3NetworkPrinting/src/Models/BaseModel.py similarity index 81% rename from plugins/UM3NetworkPrinting/src/Cloud/Models/BaseCloudModel.py rename to plugins/UM3NetworkPrinting/src/Models/BaseModel.py index 18a8cb5cba..3d38a4b116 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/BaseCloudModel.py +++ b/plugins/UM3NetworkPrinting/src/Models/BaseModel.py @@ -1,13 +1,23 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from datetime import datetime, timezone -from typing import Dict, Union, TypeVar, Type, List, Any - -from ...Models import BaseModel +from typing import TypeVar, Dict, List, Any, Type, Union -## Base class for the models used in the interface with the Ultimaker cloud APIs. -class BaseCloudModel(BaseModel): +# Type variable used in the parse methods below, which should be a subclass of BaseModel. +T = TypeVar("T", bound="BaseModel") + + +class BaseModel: + + def __init__(self, **kwargs) -> None: + self.__dict__.update(kwargs) + self.validate() + + # Validates the model, raising an exception if the model is invalid. + def validate(self) -> None: + pass + ## Checks whether the two models are equal. # \param other: The other model. # \return True if they are equal, False if they are different. @@ -24,9 +34,6 @@ class BaseCloudModel(BaseModel): def toDict(self) -> Dict[str, Any]: return self.__dict__ - # Type variable used in the parse methods below, which should be a subclass of BaseModel. - T = TypeVar("T", bound=BaseModel) - ## Parses a single model. # \param model_class: The model class. # \param values: The value of the model, which is usually a dictionary, but may also be already parsed. diff --git a/plugins/UM3NetworkPrinting/src/ConfigurationChangeModel.py b/plugins/UM3NetworkPrinting/src/Models/ConfigurationChangeModel.py similarity index 63% rename from plugins/UM3NetworkPrinting/src/ConfigurationChangeModel.py rename to plugins/UM3NetworkPrinting/src/Models/ConfigurationChangeModel.py index ef8a212b76..58fae03679 100644 --- a/plugins/UM3NetworkPrinting/src/ConfigurationChangeModel.py +++ b/plugins/UM3NetworkPrinting/src/Models/ConfigurationChangeModel.py @@ -1,13 +1,18 @@ -# 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, QObject + + +BLOCKING_CHANGE_TYPES = [ + "material_insert", "buildplate_change" +] -from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot class ConfigurationChangeModel(QObject): def __init__(self, type_of_change: str, index: int, target_name: str, origin_name: str) -> None: super().__init__() - self._type_of_change = type_of_change - # enum = ["material", "print_core_change"] + self._type_of_change = type_of_change # enum = ["material", "print_core_change"] + self._can_override = self._type_of_change not in BLOCKING_CHANGE_TYPES self._index = index self._target_name = target_name self._origin_name = origin_name @@ -27,3 +32,7 @@ class ConfigurationChangeModel(QObject): @pyqtProperty(str, constant = True) def originName(self) -> str: return self._origin_name + + @pyqtProperty(bool, constant = True) + def canOverride(self) -> bool: + return self._can_override diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterResponse.py b/plugins/UM3NetworkPrinting/src/Models/Http/CloudClusterResponse.py similarity index 91% rename from plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterResponse.py rename to plugins/UM3NetworkPrinting/src/Models/Http/CloudClusterResponse.py index a872a6ba68..7ecfe8b0a3 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterResponse.py +++ b/plugins/UM3NetworkPrinting/src/Models/Http/CloudClusterResponse.py @@ -1,13 +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 typing import Optional -from .BaseCloudModel import BaseCloudModel +from ..BaseModel import BaseModel ## Class representing a cloud connected cluster. -# Spec: https://api-staging.ultimaker.com/connect/v1/spec -class CloudClusterResponse(BaseCloudModel): +class CloudClusterResponse(BaseModel): + ## Creates a new cluster response object. # \param cluster_id: The secret unique ID, e.g. 'kBEeZWEifXbrXviO8mRYLx45P8k5lHVGs43XKvRniPg='. # \param host_guid: The unique identifier of the print cluster host, e.g. 'e90ae0ac-1257-4403-91ee-a44c9b7e8050'. diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterStatus.py b/plugins/UM3NetworkPrinting/src/Models/Http/CloudClusterStatus.py similarity index 52% rename from plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterStatus.py rename to plugins/UM3NetworkPrinting/src/Models/Http/CloudClusterStatus.py index b0250c2ebb..330e61d343 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterStatus.py +++ b/plugins/UM3NetworkPrinting/src/Models/Http/CloudClusterStatus.py @@ -1,26 +1,26 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from datetime import datetime from typing import List, Dict, Union, Any -from .CloudClusterPrinterStatus import CloudClusterPrinterStatus -from .CloudClusterPrintJobStatus import CloudClusterPrintJobStatus -from .BaseCloudModel import BaseCloudModel +from ..BaseModel import BaseModel +from .ClusterPrinterStatus import ClusterPrinterStatus +from .ClusterPrintJobStatus import ClusterPrintJobStatus # Model that represents the status of the cluster for the cloud -# Spec: https://api-staging.ultimaker.com/connect/v1/spec -class CloudClusterStatus(BaseCloudModel): +class CloudClusterStatus(BaseModel): + ## Creates a new cluster status model object. # \param printers: The latest status of each printer in the cluster. # \param print_jobs: The latest status of each print job in the cluster. # \param generated_time: The datetime when the object was generated on the server-side. def __init__(self, - printers: List[Union[CloudClusterPrinterStatus, Dict[str, Any]]], - print_jobs: List[Union[CloudClusterPrintJobStatus, Dict[str, Any]]], + printers: List[Union[ClusterPrinterStatus, Dict[str, Any]]], + print_jobs: List[Union[ClusterPrintJobStatus, Dict[str, Any]]], generated_time: Union[str, datetime], **kwargs) -> None: self.generated_time = self.parseDate(generated_time) - self.printers = self.parseModels(CloudClusterPrinterStatus, printers) - self.print_jobs = self.parseModels(CloudClusterPrintJobStatus, print_jobs) + self.printers = self.parseModels(ClusterPrinterStatus, printers) + self.print_jobs = self.parseModels(ClusterPrintJobStatus, print_jobs) super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudError.py b/plugins/UM3NetworkPrinting/src/Models/Http/CloudError.py similarity index 88% rename from plugins/UM3NetworkPrinting/src/Cloud/Models/CloudError.py rename to plugins/UM3NetworkPrinting/src/Models/Http/CloudError.py index b53361022e..9381e4b8cf 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudError.py +++ b/plugins/UM3NetworkPrinting/src/Models/Http/CloudError.py @@ -1,13 +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 typing import Dict, Optional, Any -from .BaseCloudModel import BaseCloudModel +from ..BaseModel import BaseModel ## Class representing errors generated by the cloud servers, according to the JSON-API standard. -# Spec: https://api-staging.ultimaker.com/connect/v1/spec -class CloudError(BaseCloudModel): +class CloudError(BaseModel): + ## Creates a new error object. # \param id: Unique identifier for this particular occurrence of the problem. # \param title: A short, human-readable summary of the problem that SHOULD NOT change from occurrence to occurrence diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobResponse.py b/plugins/UM3NetworkPrinting/src/Models/Http/CloudPrintJobResponse.py similarity index 88% rename from plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobResponse.py rename to plugins/UM3NetworkPrinting/src/Models/Http/CloudPrintJobResponse.py index 79196ee38c..a1880e8751 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobResponse.py +++ b/plugins/UM3NetworkPrinting/src/Models/Http/CloudPrintJobResponse.py @@ -1,13 +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 typing import Optional -from .BaseCloudModel import BaseCloudModel +from ..BaseModel import BaseModel # Model that represents the response received from the cloud after requesting to upload a print job -# Spec: https://api-staging.ultimaker.com/cura/v1/spec -class CloudPrintJobResponse(BaseCloudModel): +class CloudPrintJobResponse(BaseModel): + ## Creates a new print job response model. # \param job_id: The job unique ID, e.g. 'kBEeZWEifXbrXviO8mRYLx45P8k5lHVGs43XKvRniPg='. # \param status: The status of the print job. @@ -28,6 +28,5 @@ class CloudPrintJobResponse(BaseCloudModel): self.upload_url = upload_url self.content_type = content_type self.status_description = status_description - # TODO: Implement slicing details self.slicing_details = slicing_details super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobUploadRequest.py b/plugins/UM3NetworkPrinting/src/Models/Http/CloudPrintJobUploadRequest.py similarity index 77% rename from plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobUploadRequest.py rename to plugins/UM3NetworkPrinting/src/Models/Http/CloudPrintJobUploadRequest.py index e59c571558..ff705ae495 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobUploadRequest.py +++ b/plugins/UM3NetworkPrinting/src/Models/Http/CloudPrintJobUploadRequest.py @@ -1,11 +1,11 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from .BaseCloudModel import BaseCloudModel +from ..BaseModel import BaseModel # Model that represents the request to upload a print job to the cloud -# Spec: https://api-staging.ultimaker.com/cura/v1/spec -class CloudPrintJobUploadRequest(BaseCloudModel): +class CloudPrintJobUploadRequest(BaseModel): + ## Creates a new print job upload request. # \param job_name: The name of the print job. # \param file_size: The size of the file in bytes. diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintResponse.py b/plugins/UM3NetworkPrinting/src/Models/Http/CloudPrintResponse.py similarity index 85% rename from plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintResponse.py rename to plugins/UM3NetworkPrinting/src/Models/Http/CloudPrintResponse.py index 919d1b3c3a..b108f40e27 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintResponse.py +++ b/plugins/UM3NetworkPrinting/src/Models/Http/CloudPrintResponse.py @@ -1,14 +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. from datetime import datetime from typing import Optional, Union -from .BaseCloudModel import BaseCloudModel +from ..BaseModel import BaseModel # Model that represents the responses received from the cloud after requesting a job to be printed. -# Spec: https://api-staging.ultimaker.com/connect/v1/spec -class CloudPrintResponse(BaseCloudModel): +class CloudPrintResponse(BaseModel): + ## Creates a new print response object. # \param job_id: The unique ID of a print job inside of the cluster. This ID is generated by Cura Connect. # \param status: The status of the print request (queued or failed). diff --git a/plugins/UM3NetworkPrinting/src/Models/Http/ClusterBuildPlate.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterBuildPlate.py new file mode 100644 index 0000000000..a5a392488d --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterBuildPlate.py @@ -0,0 +1,13 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from ..BaseModel import BaseModel + + +## Class representing a cluster printer +class ClusterBuildPlate(BaseModel): + + ## Create a new build plate + # \param type: The type of build plate glass or aluminium + def __init__(self, type: str = "glass", **kwargs) -> None: + self.type = type + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Models/Http/ClusterMaterial.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterMaterial.py new file mode 100644 index 0000000000..afc0851211 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterMaterial.py @@ -0,0 +1,16 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from ..BaseModel import BaseModel + + +class ClusterMaterial(BaseModel): + def __init__(self, guid: str, version: int, **kwargs) -> None: + self.guid = guid # type: str + self.version = version # type: int + super().__init__(**kwargs) + + def validate(self) -> None: + if not self.guid: + raise ValueError("guid is required on ClusterMaterial") + if not self.version: + raise ValueError("version is required on ClusterMaterial") diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintCoreConfiguration.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintCoreConfiguration.py similarity index 78% rename from plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintCoreConfiguration.py rename to plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintCoreConfiguration.py index aba1cdb755..e11d2be2d2 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintCoreConfiguration.py +++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintCoreConfiguration.py @@ -1,26 +1,28 @@ -# 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 Union, Dict, Optional, Any from cura.PrinterOutput.Models.ExtruderConfigurationModel import ExtruderConfigurationModel from cura.PrinterOutput.Models.ExtruderOutputModel import ExtruderOutputModel -from .CloudClusterPrinterConfigurationMaterial import CloudClusterPrinterConfigurationMaterial -from .BaseCloudModel import BaseCloudModel + +from .ClusterPrinterConfigurationMaterial import ClusterPrinterConfigurationMaterial +from ..BaseModel import BaseModel -## Class representing a cloud cluster printer configuration -# Spec: https://api-staging.ultimaker.com/connect/v1/spec -class CloudClusterPrintCoreConfiguration(BaseCloudModel): +## Class representing a cloud cluster printer configuration +# Also used for representing slots in a Material Station (as from Cura's perspective these are the same). +class ClusterPrintCoreConfiguration(BaseModel): + ## Creates a new cloud cluster printer configuration object # \param extruder_index: The position of the extruder on the machine as list index. Numbered from left to right. # \param material: The material of a configuration object in a cluster printer. May be in a dict or an object. # \param nozzle_diameter: The diameter of the print core at this position in millimeters, e.g. '0.4'. # \param print_core_id: The type of print core inserted at this position, e.g. 'AA 0.4'. def __init__(self, extruder_index: int, - material: Union[None, Dict[str, Any], CloudClusterPrinterConfigurationMaterial], + material: Union[None, Dict[str, Any], ClusterPrinterConfigurationMaterial] = None, print_core_id: Optional[str] = None, **kwargs) -> None: self.extruder_index = extruder_index - self.material = self.parseModel(CloudClusterPrinterConfigurationMaterial, material) if material else None + self.material = self.parseModel(ClusterPrinterConfigurationMaterial, material) if material else None self.print_core_id = print_core_id super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConfigurationChange.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobConfigurationChange.py similarity index 84% rename from plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConfigurationChange.py rename to plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobConfigurationChange.py index 9ff4154666..88251bbf53 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConfigurationChange.py +++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobConfigurationChange.py @@ -1,13 +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 typing import Optional -from .BaseCloudModel import BaseCloudModel +from ..BaseModel import BaseModel ## Model for the types of changes that are needed before a print job can start -# Spec: https://api-staging.ultimaker.com/connect/v1/spec -class CloudClusterPrintJobConfigurationChange(BaseCloudModel): +class ClusterPrintJobConfigurationChange(BaseModel): + ## Creates a new print job constraint. # \param type_of_change: The type of configuration change, one of: "material", "print_core_change" # \param index: The hotend slot or extruder index to change diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConstraint.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobConstraint.py similarity index 75% rename from plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConstraint.py rename to plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobConstraint.py index 8236ec06b9..9239004b18 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConstraint.py +++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobConstraint.py @@ -1,13 +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 typing import Optional -from .BaseCloudModel import BaseCloudModel +from ..BaseModel import BaseModel ## Class representing a cloud cluster print job constraint -# Spec: https://api-staging.ultimaker.com/connect/v1/spec -class CloudClusterPrintJobConstraints(BaseCloudModel): +class ClusterPrintJobConstraints(BaseModel): + ## Creates a new print job constraint. # \param require_printer_name: Unique name of the printer that this job should be printed on. # Should be one of the unique_name field values in the cluster, e.g. 'ultimakersystem-ccbdd30044ec' diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobImpediment.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobImpediment.py similarity index 68% rename from plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobImpediment.py rename to plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobImpediment.py index 12b67996c1..5a8f0aa46d 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobImpediment.py +++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobImpediment.py @@ -1,13 +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. -from .BaseCloudModel import BaseCloudModel +from ..BaseModel import BaseModel ## Class representing the reasons that prevent this job from being printed on the associated printer -# Spec: https://api-staging.ultimaker.com/connect/v1/spec -class CloudClusterPrintJobImpediment(BaseCloudModel): +class ClusterPrintJobImpediment(BaseModel): + ## Creates a new print job constraint. - # \param translation_key: A string indicating a reason the print cannot be printed, such as 'does_not_fit_in_build_volume' + # \param translation_key: A string indicating a reason the print cannot be printed, + # such as 'does_not_fit_in_build_volume' # \param severity: A number indicating the severity of the problem, with higher being more severe def __init__(self, translation_key: str, severity: int, **kwargs) -> None: self.translation_key = translation_key diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobStatus.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobStatus.py similarity index 78% rename from plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobStatus.py rename to plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobStatus.py index 79050521af..e54d99f1e6 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobStatus.py +++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrintJobStatus.py @@ -1,22 +1,25 @@ -# 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 List, Optional, Union, Dict, Any +from PyQt5.QtCore import QUrl + from cura.PrinterOutput.Models.PrinterConfigurationModel import PrinterConfigurationModel -from ...UM3PrintJobOutputModel import UM3PrintJobOutputModel -from ...ConfigurationChangeModel import ConfigurationChangeModel -from ..CloudOutputController import CloudOutputController -from .BaseCloudModel import BaseCloudModel -from .CloudClusterBuildPlate import CloudClusterBuildPlate -from .CloudClusterPrintJobConfigurationChange import CloudClusterPrintJobConfigurationChange -from .CloudClusterPrintJobImpediment import CloudClusterPrintJobImpediment -from .CloudClusterPrintCoreConfiguration import CloudClusterPrintCoreConfiguration -from .CloudClusterPrintJobConstraint import CloudClusterPrintJobConstraints + +from .ClusterBuildPlate import ClusterBuildPlate +from .ClusterPrintJobConfigurationChange import ClusterPrintJobConfigurationChange +from .ClusterPrintJobImpediment import ClusterPrintJobImpediment +from .ClusterPrintCoreConfiguration import ClusterPrintCoreConfiguration +from .ClusterPrintJobConstraint import ClusterPrintJobConstraints +from ..UM3PrintJobOutputModel import UM3PrintJobOutputModel +from ..ConfigurationChangeModel import ConfigurationChangeModel +from ..BaseModel import BaseModel +from ...ClusterOutputController import ClusterOutputController ## Model for the status of a single print job in a cluster. -# Spec: https://api-staging.ultimaker.com/connect/v1/spec -class CloudClusterPrintJobStatus(BaseCloudModel): +class ClusterPrintJobStatus(BaseModel): + ## Creates a new cloud print job status model. # \param assigned_to: The name of the printer this job is assigned to while being queued. # \param configuration: The required print core configurations of this print job. @@ -45,21 +48,21 @@ class CloudClusterPrintJobStatus(BaseCloudModel): # printer def __init__(self, created_at: str, force: bool, machine_variant: str, name: str, started: bool, status: str, time_total: int, uuid: str, - configuration: List[Union[Dict[str, Any], CloudClusterPrintCoreConfiguration]], - constraints: List[Union[Dict[str, Any], CloudClusterPrintJobConstraints]], + configuration: List[Union[Dict[str, Any], ClusterPrintCoreConfiguration]], + constraints: List[Union[Dict[str, Any], ClusterPrintJobConstraints]], last_seen: Optional[float] = None, network_error_count: Optional[int] = None, owner: Optional[str] = None, printer_uuid: Optional[str] = None, time_elapsed: Optional[int] = None, assigned_to: Optional[str] = None, deleted_at: Optional[str] = None, printed_on_uuid: Optional[str] = None, configuration_changes_required: List[ - Union[Dict[str, Any], CloudClusterPrintJobConfigurationChange]] = None, - build_plate: Union[Dict[str, Any], CloudClusterBuildPlate] = None, + Union[Dict[str, Any], ClusterPrintJobConfigurationChange]] = None, + build_plate: Union[Dict[str, Any], ClusterBuildPlate] = None, compatible_machine_families: List[str] = None, - impediments_to_printing: List[Union[Dict[str, Any], CloudClusterPrintJobImpediment]] = None, + impediments_to_printing: List[Union[Dict[str, Any], ClusterPrintJobImpediment]] = None, **kwargs) -> None: self.assigned_to = assigned_to - self.configuration = self.parseModels(CloudClusterPrintCoreConfiguration, configuration) - self.constraints = self.parseModels(CloudClusterPrintJobConstraints, constraints) + self.configuration = self.parseModels(ClusterPrintCoreConfiguration, configuration) + self.constraints = self.parseModels(ClusterPrintJobConstraints, constraints) self.created_at = created_at self.force = force self.last_seen = last_seen @@ -76,22 +79,21 @@ class CloudClusterPrintJobStatus(BaseCloudModel): self.deleted_at = deleted_at self.printed_on_uuid = printed_on_uuid - self.configuration_changes_required = self.parseModels(CloudClusterPrintJobConfigurationChange, + self.configuration_changes_required = self.parseModels(ClusterPrintJobConfigurationChange, configuration_changes_required) \ if configuration_changes_required else [] - self.build_plate = self.parseModel(CloudClusterBuildPlate, build_plate) if build_plate else None + self.build_plate = self.parseModel(ClusterBuildPlate, build_plate) if build_plate else None self.compatible_machine_families = compatible_machine_families if compatible_machine_families else [] - self.impediments_to_printing = self.parseModels(CloudClusterPrintJobImpediment, impediments_to_printing) \ + self.impediments_to_printing = self.parseModels(ClusterPrintJobImpediment, impediments_to_printing) \ if impediments_to_printing else [] super().__init__(**kwargs) ## Creates an UM3 print job output model based on this cloud cluster print job. # \param printer: The output model of the printer - def createOutputModel(self, controller: CloudOutputController) -> UM3PrintJobOutputModel: + def createOutputModel(self, controller: ClusterOutputController) -> UM3PrintJobOutputModel: model = UM3PrintJobOutputModel(controller, self.uuid, self.name) self.updateOutputModel(model) - return model ## Creates a new configuration model @@ -99,6 +101,7 @@ class CloudClusterPrintJobStatus(BaseCloudModel): extruders = [extruder.createConfigurationModel() for extruder in self.configuration or ()] configuration = PrinterConfigurationModel() configuration.setExtruderConfigurations(extruders) + configuration.setPrinterType(self.machine_variant) return configuration ## Updates an UM3 print job output model based on this cloud cluster print job. diff --git a/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterConfigurationMaterial.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterConfigurationMaterial.py new file mode 100644 index 0000000000..8edb9fb808 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterConfigurationMaterial.py @@ -0,0 +1,51 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from typing import Optional + +from UM.Settings.ContainerRegistry import ContainerRegistry +from cura.PrinterOutput.Models.MaterialOutputModel import MaterialOutputModel + +from ..BaseModel import BaseModel + + +## Class representing a cloud cluster printer configuration +class ClusterPrinterConfigurationMaterial(BaseModel): + + ## Creates a new material configuration model. + # \param brand: The brand of material in this print core, e.g. 'Ultimaker'. + # \param color: The color of material in this print core, e.g. 'Blue'. + # \param guid: he GUID of the material in this print core, e.g. '506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9'. + # \param material: The type of material in this print core, e.g. 'PLA'. + def __init__(self, brand: Optional[str] = None, color: Optional[str] = None, guid: Optional[str] = None, + material: Optional[str] = None, **kwargs) -> None: + self.guid = guid + self.brand = brand + self.color = color + self.material = material + super().__init__(**kwargs) + + ## 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: + 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: + 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_metadata["material"], brand = material_metadata["brand"], color = material_metadata["color_code"], name = material_metadata["name"]) diff --git a/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterMaterialStation.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterMaterialStation.py new file mode 100644 index 0000000000..c51e07bcfc --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterMaterialStation.py @@ -0,0 +1,23 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Union, Dict, Any, List + +from ..BaseModel import BaseModel +from .ClusterPrinterMaterialStationSlot import ClusterPrinterMaterialStationSlot + + +## Class representing the data of a Material Station in the cluster. +class ClusterPrinterMaterialStation(BaseModel): + + ## Creates a new Material Station status. + # \param status: The status of the material station. + # \param: supported: Whether the material station is supported on this machine or not. + # \param material_slots: The active slots configurations of this material station. + def __init__(self, status: str, supported: bool = False, + material_slots: List[Union[ClusterPrinterMaterialStationSlot, Dict[str, Any]]] = None, + **kwargs) -> None: + self.status = status + self.supported = supported + self.material_slots = self.parseModels(ClusterPrinterMaterialStationSlot, material_slots)\ + if material_slots else [] # type: List[ClusterPrinterMaterialStationSlot] + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterMaterialStationSlot.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterMaterialStationSlot.py new file mode 100644 index 0000000000..80deb1c9a8 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterMaterialStationSlot.py @@ -0,0 +1,22 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional + +from .ClusterPrintCoreConfiguration import ClusterPrintCoreConfiguration + + +## Class representing the data of a single slot in the material station. +class ClusterPrinterMaterialStationSlot(ClusterPrintCoreConfiguration): + + ## Create a new material station slot object. + # \param slot_index: The index of the slot in the material station (ranging 0 to 5). + # \param compatible: Whether the configuration is compatible with the print core. + # \param material_remaining: How much material is remaining on the spool (between 0 and 1, or -1 for missing data). + # \param material_empty: Whether the material spool is too empty to be used. + def __init__(self, slot_index: int, compatible: bool, material_remaining: float, + material_empty: Optional[bool] = False, **kwargs): + self.slot_index = slot_index + self.compatible = compatible + self.material_remaining = material_remaining + self.material_empty = material_empty + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterStatus.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterStatus.py new file mode 100644 index 0000000000..69daa1f08b --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterStatus.py @@ -0,0 +1,146 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from itertools import product +from typing import List, Union, Dict, Optional, Any + +from PyQt5.QtCore import QUrl + +from cura.PrinterOutput.Models.PrinterConfigurationModel import PrinterConfigurationModel +from cura.PrinterOutput.PrinterOutputController import PrinterOutputController +from cura.PrinterOutput.Models.PrinterOutputModel import PrinterOutputModel + +from .ClusterBuildPlate import ClusterBuildPlate +from .ClusterPrintCoreConfiguration import ClusterPrintCoreConfiguration +from .ClusterPrinterMaterialStation import ClusterPrinterMaterialStation +from .ClusterPrinterMaterialStationSlot import ClusterPrinterMaterialStationSlot +from .ClusterPrinterConfigurationMaterial import ClusterPrinterConfigurationMaterial +from ..BaseModel import BaseModel + + +## Class representing a cluster printer +class ClusterPrinterStatus(BaseModel): + + ## Creates a new cluster printer status + # \param enabled: A printer can be disabled if it should not receive new jobs. By default every printer is enabled. + # \param firmware_version: Firmware version installed on the printer. Can differ for each printer in a cluster. + # \param friendly_name: Human readable name of the printer. Can be used for identification purposes. + # \param ip_address: The IP address of the printer in the local network. + # \param machine_variant: The type of printer. Can be 'Ultimaker 3' or 'Ultimaker 3ext'. + # \param status: The status of the printer. + # \param unique_name: The unique name of the printer in the network. + # \param uuid: The unique ID of the printer, also known as GUID. + # \param configuration: The active print core configurations of this printer. + # \param reserved_by: A printer can be claimed by a specific print job. + # \param maintenance_required: Indicates if maintenance is necessary. + # \param firmware_update_status: Whether the printer's firmware is up-to-date, value is one of: "up_to_date", + # "pending_update", "update_available", "update_in_progress", "update_failed", "update_impossible". + # \param latest_available_firmware: The version of the latest firmware that is available. + # \param build_plate: The build plate that is on the printer. + # \param material_station: The material station that is on the printer. + def __init__(self, enabled: bool, firmware_version: str, friendly_name: str, ip_address: str, machine_variant: str, + status: str, unique_name: str, uuid: str, + configuration: List[Union[Dict[str, Any], ClusterPrintCoreConfiguration]], + reserved_by: Optional[str] = None, maintenance_required: Optional[bool] = None, + firmware_update_status: Optional[str] = None, latest_available_firmware: Optional[str] = None, + build_plate: Union[Dict[str, Any], ClusterBuildPlate] = None, + material_station: Union[Dict[str, Any], ClusterPrinterMaterialStation] = None, **kwargs) -> None: + + self.configuration = self.parseModels(ClusterPrintCoreConfiguration, configuration) + self.enabled = enabled + self.firmware_version = firmware_version + self.friendly_name = friendly_name + self.ip_address = ip_address + self.machine_variant = machine_variant + self.status = status + self.unique_name = unique_name + self.uuid = uuid + self.reserved_by = reserved_by + self.maintenance_required = maintenance_required + self.firmware_update_status = firmware_update_status + self.latest_available_firmware = latest_available_firmware + self.build_plate = self.parseModel(ClusterBuildPlate, build_plate) if build_plate else None + self.material_station = self.parseModel(ClusterPrinterMaterialStation, + material_station) if material_station else None + super().__init__(**kwargs) + + ## Creates a new output model. + # \param controller - The controller of the model. + def createOutputModel(self, controller: PrinterOutputController) -> PrinterOutputModel: + # FIXME + # Note that we're using '2' here as extruder count. We have hardcoded this for now to prevent issues where the + # amount of extruders coming back from the API is actually lower (which it can be if a printer was just added + # to a cluster). This should be fixed in the future, probably also on the cluster API side. + model = PrinterOutputModel(controller, 2, firmware_version = self.firmware_version) + self.updateOutputModel(model) + return model + + ## Updates the given output model. + # \param model - The output model to update. + def updateOutputModel(self, model: PrinterOutputModel) -> None: + model.updateKey(self.uuid) + model.updateName(self.friendly_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") + model.setCameraUrl(QUrl("http://{}:8080/?action=stream".format(self.ip_address))) + + if not model.printerConfiguration: + # Prevent accessing printer configuration when not available. + # This sometimes happens when a printer was just added to a group and Cura is connected to that group. + return + + # Set the possible configurations based on whether a Material Station is present or not. + if self.material_station and self.material_station.material_slots: + self._updateAvailableConfigurations(model) + if self.configuration: + self._updateActiveConfiguration(model) + + def _updateActiveConfiguration(self, model: PrinterOutputModel) -> None: + configurations = zip(self.configuration, model.extruders, model.printerConfiguration.extruderConfigurations) + for configuration, extruder_output, extruder_config in configurations: + configuration.updateOutputModel(extruder_output) + configuration.updateConfigurationModel(extruder_config) + + def _updateAvailableConfigurations(self, model: PrinterOutputModel) -> None: + available_configurations = [self._createAvailableConfigurationFromPrinterConfiguration( + left_slot = left_slot, + right_slot = right_slot, + printer_configuration = model.printerConfiguration + ) for left_slot, right_slot in product(self._getSlotsForExtruder(0), self._getSlotsForExtruder(1))] + model.setAvailableConfigurations(available_configurations) + + ## Create a list of Material Station slots for the given extruder index. + # Returns a list with a single empty material slot if none are found to ensure we don't miss configurations. + def _getSlotsForExtruder(self, extruder_index: int) -> List[ClusterPrinterMaterialStationSlot]: + if not self.material_station: # typing guard + return [] + slots = [slot for slot in self.material_station.material_slots if self._isSupportedConfiguration( + slot = slot, + extruder_index = extruder_index + )] + return slots or [self._createEmptyMaterialSlot(extruder_index)] + + ## Check if a configuration is supported in order to make it selectable by the user. + # We filter out any slot that is not supported by the extruder index, print core type or if the material is empty. + @staticmethod + def _isSupportedConfiguration(slot: ClusterPrinterMaterialStationSlot, extruder_index: int) -> bool: + return slot.extruder_index == extruder_index and slot.compatible and not slot.material_empty + + ## Create an empty material slot with a fake empty material. + @staticmethod + def _createEmptyMaterialSlot(extruder_index: int) -> ClusterPrinterMaterialStationSlot: + empty_material = ClusterPrinterConfigurationMaterial(guid = "", material = "empty", brand = "", color = "") + return ClusterPrinterMaterialStationSlot(slot_index = 0, extruder_index = extruder_index, + compatible = True, material_remaining = 0, material = empty_material) + + @staticmethod + def _createAvailableConfigurationFromPrinterConfiguration(left_slot: ClusterPrinterMaterialStationSlot, + right_slot: ClusterPrinterMaterialStationSlot, + printer_configuration: PrinterConfigurationModel + ) -> PrinterConfigurationModel: + available_configuration = PrinterConfigurationModel() + available_configuration.setExtruderConfigurations([left_slot.createConfigurationModel(), + right_slot.createConfigurationModel()]) + available_configuration.setPrinterType(printer_configuration.printerType) + available_configuration.setBuildplateConfiguration(printer_configuration.buildplateConfiguration) + return available_configuration diff --git a/plugins/UM3NetworkPrinting/src/Models/Http/PrinterSystemStatus.py b/plugins/UM3NetworkPrinting/src/Models/Http/PrinterSystemStatus.py new file mode 100644 index 0000000000..ad7b9c8698 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Models/Http/PrinterSystemStatus.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 Dict, Any + +from ..BaseModel import BaseModel + + +## Class representing the system status of a printer. +class PrinterSystemStatus(BaseModel): + + def __init__(self, guid: str, firmware: str, hostname: str, name: str, platform: str, variant: str, + hardware: Dict[str, Any], **kwargs + ) -> None: + self.guid = guid + self.firmware = firmware + self.hostname = hostname + self.name = name + self.platform = platform + self.variant = variant + self.hardware = hardware + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Models/Http/__init__.py b/plugins/UM3NetworkPrinting/src/Models/Http/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/plugins/UM3NetworkPrinting/src/Models/LocalMaterial.py b/plugins/UM3NetworkPrinting/src/Models/LocalMaterial.py new file mode 100644 index 0000000000..b45289e1c4 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Models/LocalMaterial.py @@ -0,0 +1,21 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from .BaseModel import BaseModel + + +class LocalMaterial(BaseModel): + + def __init__(self, GUID: str, id: str, version: int, **kwargs) -> None: + self.GUID = GUID # type: str + self.id = id # type: str + self.version = version # type: int + super().__init__(**kwargs) + + def validate(self) -> None: + super().validate() + if not self.GUID: + raise ValueError("guid is required on LocalMaterial") + if not self.version: + raise ValueError("version is required on LocalMaterial") + if not self.id: + raise ValueError("id is required on LocalMaterial") diff --git a/plugins/UM3NetworkPrinting/src/UM3PrintJobOutputModel.py b/plugins/UM3NetworkPrinting/src/Models/UM3PrintJobOutputModel.py similarity index 69% rename from plugins/UM3NetworkPrinting/src/UM3PrintJobOutputModel.py rename to plugins/UM3NetworkPrinting/src/Models/UM3PrintJobOutputModel.py index b627b6e9c8..bfde233a35 100644 --- a/plugins/UM3NetworkPrinting/src/UM3PrintJobOutputModel.py +++ b/plugins/UM3NetworkPrinting/src/Models/UM3PrintJobOutputModel.py @@ -1,21 +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 List from PyQt5.QtCore import pyqtProperty, pyqtSignal +from PyQt5.QtGui import QImage from cura.PrinterOutput.Models.PrintJobOutputModel import PrintJobOutputModel from cura.PrinterOutput.PrinterOutputController import PrinterOutputController + from .ConfigurationChangeModel import ConfigurationChangeModel class UM3PrintJobOutputModel(PrintJobOutputModel): configurationChangesChanged = pyqtSignal() - def __init__(self, output_controller: "PrinterOutputController", key: str = "", name: str = "", parent=None) -> None: + def __init__(self, output_controller: PrinterOutputController, key: str = "", name: str = "", parent=None) -> None: super().__init__(output_controller, key, name, parent) - self._configuration_changes = [] # type: List[ConfigurationChangeModel] + self._configuration_changes = [] # type: List[ConfigurationChangeModel] @pyqtProperty("QVariantList", notify=configurationChangesChanged) def configurationChanges(self) -> List[ConfigurationChangeModel]: @@ -26,3 +27,8 @@ class UM3PrintJobOutputModel(PrintJobOutputModel): return self._configuration_changes = changes self.configurationChangesChanged.emit() + + def updatePreviewImageData(self, data: bytes) -> None: + image = QImage() + image.loadFromData(data) + self.updatePreviewImage(image) diff --git a/plugins/UM3NetworkPrinting/src/Models/__init__.py b/plugins/UM3NetworkPrinting/src/Models/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py new file mode 100644 index 0000000000..f61982b9a8 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py @@ -0,0 +1,173 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import json +from json import JSONDecodeError +from typing import Callable, List, Optional, Dict, Union, Any, Type, cast, TypeVar, Tuple + +from PyQt5.QtCore import QUrl +from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply + +from UM.Logger import Logger + +from ..Models.BaseModel import BaseModel +from ..Models.Http.ClusterPrintJobStatus import ClusterPrintJobStatus +from ..Models.Http.ClusterPrinterStatus import ClusterPrinterStatus +from ..Models.Http.PrinterSystemStatus import PrinterSystemStatus +from ..Models.Http.ClusterMaterial import ClusterMaterial + + +## The generic type variable used to document the methods below. +ClusterApiClientModel = TypeVar("ClusterApiClientModel", bound=BaseModel) + + +## The ClusterApiClient is responsible for all network calls to local network clusters. +class ClusterApiClient: + + PRINTER_API_PREFIX = "/api/v1" + CLUSTER_API_PREFIX = "/cluster-api/v1" + + # In order to avoid garbage collection we keep the callbacks in this list. + _anti_gc_callbacks = [] # type: List[Callable[[], None]] + + ## Initializes a new cluster API client. + # \param address: The network address of the cluster to call. + # \param on_error: The callback to be called whenever we receive errors from the server. + def __init__(self, address: str, on_error: Callable) -> None: + super().__init__() + self._manager = QNetworkAccessManager() + self._address = address + self._on_error = on_error + + ## Get printer system information. + # \param on_finished: The callback in case the response is successful. + def getSystem(self, on_finished: Callable) -> None: + url = "{}/system".format(self.PRINTER_API_PREFIX) + reply = self._manager.get(self._createEmptyRequest(url)) + self._addCallback(reply, on_finished, PrinterSystemStatus) + + ## Get the installed materials on the printer. + # \param on_finished: The callback in case the response is successful. + def getMaterials(self, on_finished: Callable[[List[ClusterMaterial]], Any]) -> None: + url = "{}/materials".format(self.CLUSTER_API_PREFIX) + reply = self._manager.get(self._createEmptyRequest(url)) + self._addCallback(reply, on_finished, ClusterMaterial) + + ## Get the printers in the cluster. + # \param on_finished: The callback in case the response is successful. + def getPrinters(self, on_finished: Callable[[List[ClusterPrinterStatus]], Any]) -> None: + url = "{}/printers".format(self.CLUSTER_API_PREFIX) + reply = self._manager.get(self._createEmptyRequest(url)) + self._addCallback(reply, on_finished, ClusterPrinterStatus) + + ## Get the print jobs in the cluster. + # \param on_finished: The callback in case the response is successful. + def getPrintJobs(self, on_finished: Callable[[List[ClusterPrintJobStatus]], Any]) -> None: + url = "{}/print_jobs".format(self.CLUSTER_API_PREFIX) + reply = self._manager.get(self._createEmptyRequest(url)) + self._addCallback(reply, on_finished, ClusterPrintJobStatus) + + ## Move a print job to the top of the queue. + def movePrintJobToTop(self, print_job_uuid: str) -> None: + url = "{}/print_jobs/{}/action/move".format(self.CLUSTER_API_PREFIX, print_job_uuid) + self._manager.post(self._createEmptyRequest(url), json.dumps({"to_position": 0, "list": "queued"}).encode()) + + ## Override print job configuration and force it to be printed. + def forcePrintJob(self, print_job_uuid: str) -> None: + url = "{}/print_jobs/{}".format(self.CLUSTER_API_PREFIX, print_job_uuid) + self._manager.put(self._createEmptyRequest(url), json.dumps({"force": True}).encode()) + + ## Delete a print job from the queue. + def deletePrintJob(self, print_job_uuid: str) -> None: + url = "{}/print_jobs/{}".format(self.CLUSTER_API_PREFIX, print_job_uuid) + self._manager.deleteResource(self._createEmptyRequest(url)) + + ## Set the state of a print job. + def setPrintJobState(self, print_job_uuid: str, state: str) -> None: + url = "{}/print_jobs/{}/action".format(self.CLUSTER_API_PREFIX, print_job_uuid) + # We rewrite 'resume' to 'print' here because we are using the old print job action endpoints. + action = "print" if state == "resume" else state + self._manager.put(self._createEmptyRequest(url), json.dumps({"action": action}).encode()) + + ## Get the preview image data of a print job. + def getPrintJobPreviewImage(self, print_job_uuid: str, on_finished: Callable) -> None: + url = "{}/print_jobs/{}/preview_image".format(self.CLUSTER_API_PREFIX, print_job_uuid) + reply = self._manager.get(self._createEmptyRequest(url)) + self._addCallback(reply, on_finished) + + ## We override _createEmptyRequest in order to add the user credentials. + # \param url: The URL to request + # \param content_type: The type of the body contents. + def _createEmptyRequest(self, path: str, content_type: Optional[str] = "application/json") -> QNetworkRequest: + url = QUrl("http://" + self._address + path) + request = QNetworkRequest(url) + request.setAttribute(QNetworkRequest.FollowRedirectsAttribute, True) + if content_type: + request.setHeader(QNetworkRequest.ContentTypeHeader, content_type) + return request + + ## Parses the given JSON network reply into a status code and a dictionary, handling unexpected errors as well. + # \param reply: The reply from the server. + # \return A tuple with a status code and a dictionary. + @staticmethod + def _parseReply(reply: QNetworkReply) -> Tuple[int, Dict[str, Any]]: + status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) + try: + response = bytes(reply.readAll()).decode() + return status_code, json.loads(response) + except (UnicodeDecodeError, JSONDecodeError, ValueError) as err: + Logger.logException("e", "Could not parse the cluster response: %s", err) + return status_code, {"errors": [err]} + + ## Parses the given models and calls the correct callback depending on the result. + # \param response: The response from the server, after being converted to a dict. + # \param on_finished: The callback in case the response is successful. + # \param model_class: The type of the model to convert the response to. It may either be a single record or a list. + def _parseModels(self, response: Dict[str, Any], + on_finished: Union[Callable[[ClusterApiClientModel], Any], + Callable[[List[ClusterApiClientModel]], Any]], + model_class: Type[ClusterApiClientModel]) -> None: + try: + if isinstance(response, list): + results = [model_class(**c) for c in response] # type: List[ClusterApiClientModel] + on_finished_list = cast(Callable[[List[ClusterApiClientModel]], Any], on_finished) + on_finished_list(results) + else: + result = model_class(**response) # type: ClusterApiClientModel + on_finished_item = cast(Callable[[ClusterApiClientModel], Any], on_finished) + on_finished_item(result) + except (JSONDecodeError, TypeError): + 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. + # The callback is added to the 'finished' signal of the reply. + # \param reply: The reply that should be listened to. + # \param on_finished: The callback in case the response is successful. + def _addCallback(self, + reply: QNetworkReply, + on_finished: Union[Callable[[ClusterApiClientModel], Any], + Callable[[List[ClusterApiClientModel]], Any]], + model: Type[ClusterApiClientModel] = None, + ) -> None: + + def parse() -> None: + self._anti_gc_callbacks.remove(parse) + + # Don't try to parse the reply if we didn't get one + if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) is None: + return + + if reply.error() > 0: + self._on_error(reply.errorString()) + return + + # If no parse model is given, simply return the raw data in the callback. + if not model: + on_finished(reply.readAll()) + return + + # Otherwise parse the result and return the formatted data in the callback. + status_code, response = self._parseReply(reply) + self._parseModels(response, on_finished, model) + + self._anti_gc_callbacks.append(parse) + reply.finished.connect(parse) diff --git a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py new file mode 100644 index 0000000000..dd9c0a7d2a --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py @@ -0,0 +1,173 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from typing import Optional, Dict, List, Callable, Any + +from PyQt5.QtGui import QDesktopServices +from PyQt5.QtCore import pyqtSlot, QUrl, pyqtSignal, pyqtProperty +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.PrinterOutput.NetworkedPrinterOutputDevice import AuthState +from cura.PrinterOutput.PrinterOutputDevice import ConnectionType + +from .ClusterApiClient import ClusterApiClient +from .SendMaterialJob import SendMaterialJob +from ..ExportFileJob import ExportFileJob +from ..UltimakerNetworkedPrinterOutputDevice import UltimakerNetworkedPrinterOutputDevice +from ..Messages.PrintJobUploadBlockedMessage import PrintJobUploadBlockedMessage +from ..Messages.PrintJobUploadErrorMessage import PrintJobUploadErrorMessage +from ..Messages.PrintJobUploadSuccessMessage import PrintJobUploadSuccessMessage +from ..Models.Http.ClusterMaterial import ClusterMaterial + + +I18N_CATALOG = i18nCatalog("cura") + + +class LocalClusterOutputDevice(UltimakerNetworkedPrinterOutputDevice): + + activeCameraUrlChanged = pyqtSignal() + + def __init__(self, device_id: str, address: str, properties: Dict[bytes, bytes], parent=None) -> None: + + super().__init__( + device_id=device_id, + address=address, + properties=properties, + connection_type=ConnectionType.NetworkConnection, + parent=parent + ) + + self._cluster_api = None # type: Optional[ClusterApiClient] + + # We don't have authentication over local networking, so we're always authenticated. + self.setAuthenticationState(AuthState.Authenticated) + self._setInterfaceElements() + self._active_camera_url = QUrl() # type: QUrl + + ## Set all the interface elements and texts for this output device. + def _setInterfaceElements(self) -> None: + self.setPriority(3) # Make sure the output device gets selected above local file output + self.setShortDescription(I18N_CATALOG.i18nc("@action:button Preceded by 'Ready to'.", "Print over network")) + self.setDescription(I18N_CATALOG.i18nc("@properties:tooltip", "Print over network")) + self.setConnectionText(I18N_CATALOG.i18nc("@info:status", "Connected over the network")) + + ## Called when the connection to the cluster changes. + def connect(self) -> None: + super().connect() + self._update() + self.sendMaterialProfiles() + + @pyqtProperty(QUrl, notify=activeCameraUrlChanged) + def activeCameraUrl(self) -> QUrl: + return self._active_camera_url + + @pyqtSlot(QUrl, name="setActiveCameraUrl") + def setActiveCameraUrl(self, camera_url: QUrl) -> None: + if self._active_camera_url != camera_url: + self._active_camera_url = camera_url + self.activeCameraUrlChanged.emit() + + @pyqtSlot(name="openPrintJobControlPanel") + def openPrintJobControlPanel(self) -> None: + QDesktopServices.openUrl(QUrl("http://" + self._address + "/print_jobs")) + + @pyqtSlot(name="openPrinterControlPanel") + def openPrinterControlPanel(self) -> None: + QDesktopServices.openUrl(QUrl("http://" + self._address + "/printers")) + + @pyqtSlot(str, name="sendJobToTop") + def sendJobToTop(self, print_job_uuid: str) -> None: + self._getApiClient().movePrintJobToTop(print_job_uuid) + + @pyqtSlot(str, name="deleteJobFromQueue") + def deleteJobFromQueue(self, print_job_uuid: str) -> None: + self._getApiClient().deletePrintJob(print_job_uuid) + + @pyqtSlot(str, name="forceSendJob") + def forceSendJob(self, print_job_uuid: str) -> None: + self._getApiClient().forcePrintJob(print_job_uuid) + + ## Set the remote print job state. + # \param print_job_uuid: The UUID of the print job to set the state for. + # \param action: The action to undertake ('pause', 'resume', 'abort'). + def setJobState(self, print_job_uuid: str, action: str) -> None: + self._getApiClient().setPrintJobState(print_job_uuid, action) + + def _update(self) -> None: + super()._update() + self._getApiClient().getPrinters(self._updatePrinters) + self._getApiClient().getPrintJobs(self._updatePrintJobs) + self._updatePrintJobPreviewImages() + + ## Get a list of materials that are installed on the cluster host. + def getMaterials(self, on_finished: Callable[[List[ClusterMaterial]], Any]) -> None: + self._getApiClient().getMaterials(on_finished = on_finished) + + ## Sync the material profiles in Cura with the printer. + # This gets called when connecting to a printer as well as when sending a print. + def sendMaterialProfiles(self) -> None: + job = SendMaterialJob(device = self) + job.run() + + ## Send a print job to the cluster. + def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, + file_handler: Optional[FileHandler] = None, filter_by_machine: bool = False, **kwargs) -> None: + + # Show an error message if we're already sending a job. + if self._progress.visible: + PrintJobUploadBlockedMessage().show() + return + + self.writeStarted.emit(self) + + # Export the scene to the correct file type. + job = ExportFileJob(file_handler=file_handler, nodes=nodes, firmware_version=self.firmwareVersion) + job.finished.connect(self._onPrintJobCreated) + job.start() + + ## Handler for when the print job was created locally. + # It can now be sent over the network. + def _onPrintJobCreated(self, job: ExportFileJob) -> None: + 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()) + ] + # FIXME: move form posting to API client + self.postFormWithParts("/cluster-api/v1/print_jobs/", parts, on_finished=self._onPrintUploadCompleted, + on_progress=self._onPrintJobUploadProgress) + + ## Handler for print job upload progress. + def _onPrintJobUploadProgress(self, bytes_sent: int, bytes_total: int) -> None: + percentage = (bytes_sent / bytes_total) if bytes_total else 0 + self._progress.setProgress(percentage * 100) + self.writeProgress.emit() + + ## Handler for when the print job was fully uploaded to the cluster. + def _onPrintUploadCompleted(self, _: QNetworkReply) -> None: + self._progress.hide() + PrintJobUploadSuccessMessage().show() + self.writeFinished.emit() + + ## Displays the given message if uploading the mesh has failed + # \param message: The message to display. + def _onUploadError(self, message: str = None) -> None: + self._progress.hide() + PrintJobUploadErrorMessage(message).show() + self.writeError.emit() + + ## Download all the images from the cluster and load their data in the print job models. + def _updatePrintJobPreviewImages(self): + for print_job in self._print_jobs: + if print_job.getPreviewImage() is None: + self._getApiClient().getPrintJobPreviewImage(print_job.key, print_job.updatePreviewImageData) + + ## Get the API client instance. + def _getApiClient(self) -> ClusterApiClient: + if not self._cluster_api: + self._cluster_api = ClusterApiClient(self.address, on_error = lambda error: Logger.log("e", str(error))) + return self._cluster_api diff --git a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDeviceManager.py new file mode 100644 index 0000000000..273c64ef4d --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDeviceManager.py @@ -0,0 +1,274 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from typing import Dict, Optional, Callable, List + +from UM import i18nCatalog +from UM.Logger import Logger +from UM.Signal import Signal +from UM.Version import Version + +from cura.CuraApplication import CuraApplication +from cura.Settings.CuraStackBuilder import CuraStackBuilder +from cura.Settings.GlobalStack import GlobalStack + +from .ZeroConfClient import ZeroConfClient +from .ClusterApiClient import ClusterApiClient +from .LocalClusterOutputDevice import LocalClusterOutputDevice +from ..UltimakerNetworkedPrinterOutputDevice import UltimakerNetworkedPrinterOutputDevice +from ..Messages.CloudFlowMessage import CloudFlowMessage +from ..Messages.LegacyDeviceNoLongerSupportedMessage import LegacyDeviceNoLongerSupportedMessage +from ..Models.Http.PrinterSystemStatus import PrinterSystemStatus + + +I18N_CATALOG = i18nCatalog("cura") + + +## The LocalClusterOutputDeviceManager is responsible for discovering and managing local networked clusters. +class LocalClusterOutputDeviceManager: + + META_NETWORK_KEY = "um_network_key" + + MANUAL_DEVICES_PREFERENCE_KEY = "um3networkprinting/manual_instances" + MIN_SUPPORTED_CLUSTER_VERSION = Version("4.0.0") + + # The translation catalog for this device. + I18N_CATALOG = i18nCatalog("cura") + + # Signal emitted when the list of discovered devices changed. + discoveredDevicesChanged = Signal() + + def __init__(self) -> None: + + # Persistent dict containing the networked clusters. + self._discovered_devices = {} # type: Dict[str, LocalClusterOutputDevice] + self._output_device_manager = CuraApplication.getInstance().getOutputDeviceManager() + + # Hook up ZeroConf client. + self._zero_conf_client = ZeroConfClient() + self._zero_conf_client.addedNetworkCluster.connect(self._onDeviceDiscovered) + self._zero_conf_client.removedNetworkCluster.connect(self._onDiscoveredDeviceRemoved) + + ## Start the network discovery. + def start(self) -> None: + self._zero_conf_client.start() + for address in self._getStoredManualAddresses(): + self.addManualDevice(address) + + ## Stop network discovery and clean up discovered devices. + def stop(self) -> None: + self._zero_conf_client.stop() + for instance_name in list(self._discovered_devices): + self._onDiscoveredDeviceRemoved(instance_name) + + ## Restart discovery on the local network. + def startDiscovery(self): + self.stop() + self.start() + + ## Add a networked printer manually by address. + def addManualDevice(self, address: str, callback: Optional[Callable[[bool, str], None]] = None) -> None: + api_client = ClusterApiClient(address, lambda error: Logger.log("e", str(error))) + api_client.getSystem(lambda status: self._onCheckManualDeviceResponse(address, status, callback)) + + ## Remove a manually added networked printer. + def removeManualDevice(self, device_id: str, address: Optional[str] = None) -> None: + if device_id not in self._discovered_devices and address is not None: + device_id = "manual:{}".format(address) + + if device_id in self._discovered_devices: + address = address or self._discovered_devices[device_id].ipAddress + self._onDiscoveredDeviceRemoved(device_id) + + if address in self._getStoredManualAddresses(): + self._removeStoredManualAddress(address) + + ## Force reset all network device connections. + def refreshConnections(self) -> None: + self._connectToActiveMachine() + + ## Get the discovered devices. + def getDiscoveredDevices(self) -> Dict[str, LocalClusterOutputDevice]: + return self._discovered_devices + + ## Connect the active machine to a given device. + def associateActiveMachineWithPrinterDevice(self, device: LocalClusterOutputDevice) -> None: + active_machine = CuraApplication.getInstance().getGlobalContainerStack() + if not active_machine: + return + self._connectToOutputDevice(device, active_machine) + self._connectToActiveMachine() + + # Pre-select the correct machine type of the group host. + # We first need to find the correct definition because the machine manager only takes name as input, not ID. + definitions = CuraApplication.getInstance().getContainerRegistry().findContainers(id = device.printerType) + if not definitions: + return + CuraApplication.getInstance().getMachineManager().switchPrinterType(definitions[0].getName()) + + ## Callback for when the active machine was changed by the user or a new remote cluster was found. + def _connectToActiveMachine(self) -> None: + active_machine = CuraApplication.getInstance().getGlobalContainerStack() + if not active_machine: + return + + output_device_manager = CuraApplication.getInstance().getOutputDeviceManager() + stored_device_id = active_machine.getMetaDataEntry(self.META_NETWORK_KEY) + for device in self._discovered_devices.values(): + if device.key == stored_device_id: + # Connect to it if the stored key matches. + self._connectToOutputDevice(device, active_machine) + elif device.key in output_device_manager.getOutputDeviceIds(): + # Remove device if it is not meant for the active machine. + output_device_manager.removeOutputDevice(device.key) + + ## Callback for when a manual device check request was responded to. + def _onCheckManualDeviceResponse(self, address: str, status: PrinterSystemStatus, + callback: Optional[Callable[[bool, str], None]] = None) -> None: + self._onDeviceDiscovered("manual:{}".format(address), address, { + b"name": status.name.encode("utf-8"), + b"address": address.encode("utf-8"), + b"machine": str(status.hardware.get("typeid", "")).encode("utf-8"), + b"manual": b"true", + b"firmware_version": status.firmware.encode("utf-8"), + b"cluster_size": b"1" + }) + self._storeManualAddress(address) + if callback is not None: + CuraApplication.getInstance().callLater(callback, True, address) + + ## Returns a dict of printer BOM numbers to machine types. + # These numbers are available in the machine definition already so we just search for them here. + @staticmethod + def _getPrinterTypeIdentifiers() -> Dict[str, str]: + container_registry = CuraApplication.getInstance().getContainerRegistry() + ultimaker_machines = container_registry.findContainersMetadata(type="machine", manufacturer="Ultimaker B.V.") + found_machine_type_identifiers = {} # type: Dict[str, str] + for machine in ultimaker_machines: + machine_type = machine.get("id", None) + machine_bom_numbers = machine.get("bom_numbers", []) + if machine_type and machine_bom_numbers: + for bom_number in machine_bom_numbers: + # This produces a n:1 mapping of bom numbers to machine types + # allowing the S5R1 and S5R2 hardware to use a single S5 definition. + found_machine_type_identifiers[str(bom_number)] = machine_type + return found_machine_type_identifiers + + ## Add a new device. + def _onDeviceDiscovered(self, key: str, address: str, properties: Dict[bytes, bytes]) -> None: + machine_identifier = properties.get(b"machine", b"").decode("utf-8") + printer_type_identifiers = self._getPrinterTypeIdentifiers() + + # Detect the machine type based on the BOM number that is sent over the network. + properties[b"printer_type"] = b"Unknown" + for bom, p_type in printer_type_identifiers.items(): + if machine_identifier.startswith(bom): + properties[b"printer_type"] = bytes(p_type, encoding="utf8") + break + + device = LocalClusterOutputDevice(key, address, properties) + discovered_printers_model = CuraApplication.getInstance().getDiscoveredPrintersModel() + if address in list(discovered_printers_model.discoveredPrintersByAddress.keys()): + # The printer was already added, we just update the available data. + discovered_printers_model.updateDiscoveredPrinter( + ip_address=address, + name=device.getName(), + machine_type=device.printerType + ) + else: + # The printer was not added yet so let's do that. + discovered_printers_model.addDiscoveredPrinter( + ip_address=address, + key=device.getId(), + name=device.getName(), + create_callback=self._createMachineFromDiscoveredDevice, + machine_type=device.printerType, + device=device + ) + self._discovered_devices[device.getId()] = device + self.discoveredDevicesChanged.emit() + self._connectToActiveMachine() + + ## Remove a device. + def _onDiscoveredDeviceRemoved(self, device_id: str) -> None: + device = self._discovered_devices.pop(device_id, None) # type: Optional[LocalClusterOutputDevice] + if not device: + return + device.close() + CuraApplication.getInstance().getDiscoveredPrintersModel().removeDiscoveredPrinter(device.address) + self.discoveredDevicesChanged.emit() + + ## Create a machine instance based on the discovered network printer. + def _createMachineFromDiscoveredDevice(self, device_id: str) -> None: + device = self._discovered_devices.get(device_id) + if device is None: + return + + # Create a new machine and activate it. + # We do not use use MachineManager.addMachine here because we need to set the network key before activating it. + # If we do not do this the auto-pairing with the cloud-equivalent device will not work. + new_machine = CuraStackBuilder.createMachine(device.name, device.printerType) + if not new_machine: + Logger.log("e", "Failed creating a new machine") + return + new_machine.setMetaDataEntry(self.META_NETWORK_KEY, device.key) + CuraApplication.getInstance().getMachineManager().setActiveMachine(new_machine.getId()) + self._connectToOutputDevice(device, new_machine) + self._showCloudFlowMessage(device) + + ## Add an address to the stored preferences. + def _storeManualAddress(self, address: str) -> None: + stored_addresses = self._getStoredManualAddresses() + if address in stored_addresses: + return # Prevent duplicates. + stored_addresses.append(address) + new_value = ",".join(stored_addresses) + CuraApplication.getInstance().getPreferences().setValue(self.MANUAL_DEVICES_PREFERENCE_KEY, new_value) + + ## Remove an address from the stored preferences. + def _removeStoredManualAddress(self, address: str) -> None: + stored_addresses = self._getStoredManualAddresses() + try: + stored_addresses.remove(address) # Can throw a ValueError + new_value = ",".join(stored_addresses) + CuraApplication.getInstance().getPreferences().setValue(self.MANUAL_DEVICES_PREFERENCE_KEY, new_value) + except ValueError: + Logger.log("w", "Could not remove address from stored_addresses, it was not there") + + ## Load the user-configured manual devices from Cura preferences. + def _getStoredManualAddresses(self) -> List[str]: + preferences = CuraApplication.getInstance().getPreferences() + preferences.addPreference(self.MANUAL_DEVICES_PREFERENCE_KEY, "") + manual_instances = preferences.getValue(self.MANUAL_DEVICES_PREFERENCE_KEY).split(",") + return manual_instances + + ## Add a device to the current active machine. + def _connectToOutputDevice(self, device: UltimakerNetworkedPrinterOutputDevice, machine: GlobalStack) -> None: + + # Make sure users know that we no longer support legacy devices. + if Version(device.firmwareVersion) < self.MIN_SUPPORTED_CLUSTER_VERSION: + LegacyDeviceNoLongerSupportedMessage().show() + return + + machine.setName(device.name) + machine.setMetaDataEntry(self.META_NETWORK_KEY, device.key) + machine.setMetaDataEntry("group_name", device.name) + machine.addConfiguredConnectionType(device.connectionType.value) + + if not device.isConnected(): + device.connect() + + output_device_manager = CuraApplication.getInstance().getOutputDeviceManager() + if device.key not in output_device_manager.getOutputDeviceIds(): + output_device_manager.addOutputDevice(device) + + ## Nudge the user to start using Ultimaker Cloud. + @staticmethod + def _showCloudFlowMessage(device: LocalClusterOutputDevice) -> None: + if CuraApplication.getInstance().getMachineManager().activeMachineIsUsingCloudConnection: + # This printer is already cloud connected, so we do not bother the user anymore. + return + if not CuraApplication.getInstance().getCuraAPI().account.isLoggedIn: + # Do not show the message if the user is not signed in. + return + CloudFlowMessage(device.ipAddress).show() diff --git a/plugins/UM3NetworkPrinting/src/SendMaterialJob.py b/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py similarity index 59% rename from plugins/UM3NetworkPrinting/src/SendMaterialJob.py rename to plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py index f0fde818c4..09949ed37e 100644 --- a/plugins/UM3NetworkPrinting/src/SendMaterialJob.py +++ b/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py @@ -1,20 +1,20 @@ # Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. - -import json import os -from typing import Dict, TYPE_CHECKING, Set, Optional +from typing import Dict, TYPE_CHECKING, Set, List 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 -# Absolute imports don't work in plugins -from .Models import ClusterMaterial, LocalMaterial +from ..Models.Http.ClusterMaterial import ClusterMaterial +from ..Models.LocalMaterial import LocalMaterial +from ..Messages.MaterialSyncMessage import MaterialSyncMessage if TYPE_CHECKING: - from .ClusterUM3OutputDevice import ClusterUM3OutputDevice + from .LocalClusterOutputDevice import LocalClusterOutputDevice ## Asynchronous job to send material profiles to the printer. @@ -22,75 +22,56 @@ if TYPE_CHECKING: # This way it won't freeze up the interface while sending those materials. class SendMaterialJob(Job): - def __init__(self, device: "ClusterUM3OutputDevice") -> None: + def __init__(self, device: "LocalClusterOutputDevice") -> None: super().__init__() - self.device = device # type: ClusterUM3OutputDevice + self.device = device # type: LocalClusterOutputDevice ## Send the request to the printer and register a callback def run(self) -> None: - self.device.get("materials/", on_finished = self._onGetRemoteMaterials) + self.device.getMaterials(on_finished = self._onGetMaterials) - ## Process the materials reply from the printer. - # - # \param reply The reply from the printer, a json file. - def _onGetRemoteMaterials(self, reply: QNetworkReply) -> None: - # Got an error from the HTTP request. If we did not receive a 200 something happened. - if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: - Logger.log("e", "Error fetching materials from printer: %s", reply.errorString()) - return - - # Collect materials from the printer's reply and send the missing ones if needed. - remote_materials_by_guid = self._parseReply(reply) - if remote_materials_by_guid: - self._sendMissingMaterials(remote_materials_by_guid) + ## Callback for when the remote materials were returned. + def _onGetMaterials(self, materials: List[ClusterMaterial]) -> None: + remote_materials_by_guid = {material.guid: material for material in materials} + self._sendMissingMaterials(remote_materials_by_guid) ## Determine which materials should be updated and send them to the printer. - # # \param remote_materials_by_guid The remote materials by GUID. def _sendMissingMaterials(self, remote_materials_by_guid: Dict[str, ClusterMaterial]) -> None: - # Collect local materials local_materials_by_guid = self._getLocalMaterials() if len(local_materials_by_guid) == 0: Logger.log("d", "There are no local materials to synchronize with the printer.") return - - # Find out what materials are new or updated and must be sent to the printer material_ids_to_send = self._determineMaterialsToSend(local_materials_by_guid, remote_materials_by_guid) if len(material_ids_to_send) == 0: Logger.log("d", "There are no remote materials to update.") return - - # Send materials to the printer self._sendMaterials(material_ids_to_send) ## From the local and remote materials, determine which ones should be synchronized. - # # Makes a Set of id's containing only the id's of the materials that are not on the printer yet or the ones that # are newer in Cura. - # # \param local_materials The local materials by GUID. # \param remote_materials The remote materials by GUID. @staticmethod def _determineMaterialsToSend(local_materials: Dict[str, LocalMaterial], remote_materials: Dict[str, ClusterMaterial]) -> Set[str]: return { - material.id - for guid, material in local_materials.items() - if guid not in remote_materials or material.version > remote_materials[guid].version + local_material.id + for guid, local_material in local_materials.items() + if guid not in remote_materials.keys() or local_material.version > remote_materials[guid].version } ## Send the materials to the printer. - # # The given materials will be loaded from disk en sent to to printer. # The given id's will be matched with filenames of the locally stored materials. - # # \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 @@ -104,9 +85,7 @@ class SendMaterialJob(Job): self._sendMaterialFile(file_path, file_name, root_material_id) ## Send a single material file to the printer. - # # Also add the material signature file if that is available. - # # \param file_path The path of the material file. # \param file_name The name of the material file. # \param material_id The ID of the material in the file. @@ -126,61 +105,41 @@ class SendMaterialJob(Job): parts.append(self.device.createFormPart("name=\"signature_file\"; filename=\"{file_name}\"" .format(file_name = signature_file_name), f.read())) - Logger.log("d", "Syncing material {material_id} with cluster.".format(material_id = material_id)) - self.device.postFormWithParts(target = "materials/", parts = parts, on_finished = self.sendingFinished) + # FIXME: move form posting to API client + self.device.postFormWithParts(target = "/cluster-api/v1/materials/", parts = parts, + on_finished = self._sendingFinished) ## Check a reply from an upload to the printer and log an error when the call failed - @staticmethod - def sendingFinished(reply: QNetworkReply) -> None: + def _sendingFinished(self, reply: QNetworkReply) -> None: if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: - Logger.log("e", "Received error code from printer when syncing material: {code}, {text}".format( - code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), - text = reply.errorString() - )) - - ## Parse the reply from the printer - # - # Parses the reply to a "/materials" request to the printer - # - # \return a dictionary of ClusterMaterial objects by GUID - # \throw KeyError Raised when on of the materials does not include a valid guid - @classmethod - def _parseReply(cls, reply: QNetworkReply) -> Optional[Dict[str, ClusterMaterial]]: - try: - remote_materials = json.loads(reply.readAll().data().decode("utf-8")) - return {material["guid"]: ClusterMaterial(**material) for material in remote_materials} - except UnicodeDecodeError: - Logger.log("e", "Request material storage on printer: I didn't understand the printer's answer.") - except json.JSONDecodeError: - Logger.log("e", "Request material storage on printer: I didn't understand the printer's answer.") - except ValueError: - Logger.log("e", "Request material storage on printer: Printer's answer had an incorrect value.") - except TypeError: - Logger.log("e", "Request material storage on printer: Printer's answer was missing a required value.") - return None + Logger.log("w", "Error while syncing material: %s", reply.errorString()) + return + body = reply.readAll().data().decode('utf8') + if "not added" in body: + # For some reason the cluster returns a 200 sometimes even when syncing failed. + return + # Inform the user that materials have been synced. This message only shows itself when not already visible. + # Because of the guards above it is not shown when syncing failed (which is not always an actual problem). + MaterialSyncMessage(self.device).show() ## Retrieves a list of local materials - # # Only the new newest version of the local materials is returned - # # \return a dictionary of LocalMaterial objects by GUID - def _getLocalMaterials(self) -> Dict[str, LocalMaterial]: + @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 new file mode 100644 index 0000000000..0446af177b --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py @@ -0,0 +1,146 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from queue import Queue +from threading import Thread, Event +from time import time +from typing import Optional + +from zeroconf import Zeroconf, ServiceBrowser, ServiceStateChange, ServiceInfo + +from UM.Logger import Logger +from UM.Signal import Signal +from cura.CuraApplication import CuraApplication + + +## The ZeroConfClient handles all network discovery logic. +# It emits signals when new network services were found or disappeared. +class ZeroConfClient: + + # The discovery protocol name for Ultimaker printers. + ZERO_CONF_NAME = u"_ultimaker._tcp.local." + + # Signals emitted when new services were discovered or removed on the network. + addedNetworkCluster = Signal() + removedNetworkCluster = Signal() + + def __init__(self) -> None: + self._zero_conf = None # type: Optional[Zeroconf] + self._zero_conf_browser = None # type: Optional[ServiceBrowser] + self._service_changed_request_queue = None # type: Optional[Queue] + self._service_changed_request_event = None # type: Optional[Event] + self._service_changed_request_thread = None # type: Optional[Thread] + + ## The ZeroConf service changed requests are handled in a separate thread so we don't block the UI. + # We can also re-schedule the requests when they fail to get detailed service info. + # Any new or re-reschedule requests will be appended to the request queue and the thread will process them. + def start(self) -> None: + self._service_changed_request_queue = Queue() + self._service_changed_request_event = Event() + 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) + self._service_changed_request_thread.start() + self._zero_conf_browser = ServiceBrowser(self._zero_conf, self.ZERO_CONF_NAME, [self._queueService]) + + # Cleanup ZeroConf resources. + def stop(self) -> None: + if self._zero_conf is not None: + self._zero_conf.close() + self._zero_conf = None + if self._zero_conf_browser is not None: + self._zero_conf_browser.cancel() + self._zero_conf_browser = None + + ## Handles a change is discovered network services. + def _queueService(self, zeroconf: Zeroconf, service_type, name: str, state_change: ServiceStateChange) -> None: + item = (zeroconf, service_type, name, state_change) + if not self._service_changed_request_queue or not self._service_changed_request_event: + return + self._service_changed_request_queue.put(item) + self._service_changed_request_event.set() + + ## Callback for when a ZeroConf service has changes. + def _handleOnServiceChangedRequests(self) -> None: + if not self._service_changed_request_queue or not self._service_changed_request_event: + return + + while True: + # Wait for the event to be set + self._service_changed_request_event.wait(timeout=5.0) + + # Stop if the application is shutting down + if CuraApplication.getInstance().isShuttingDown(): + return + + self._service_changed_request_event.clear() + + # Handle all pending requests + reschedule_requests = [] # A list of requests that have failed so later they will get re-scheduled + while not self._service_changed_request_queue.empty(): + request = self._service_changed_request_queue.get() + zeroconf, service_type, name, state_change = request + try: + result = self._onServiceChanged(zeroconf, service_type, name, state_change) + if not result: + reschedule_requests.append(request) + except Exception: + Logger.logException("e", "Failed to get service info for [%s] [%s], the request will be rescheduled", + service_type, name) + reschedule_requests.append(request) + + # Re-schedule the failed requests if any + if reschedule_requests: + for request in reschedule_requests: + self._service_changed_request_queue.put(request) + + ## Handler for zeroConf detection. + # Return True or False indicating if the process succeeded. + # Note that this function can take over 3 seconds to complete. Be careful calling it from the main thread. + def _onServiceChanged(self, zero_conf: Zeroconf, service_type: str, name: str, state_change: ServiceStateChange + ) -> bool: + if state_change == ServiceStateChange.Added: + return self._onServiceAdded(zero_conf, service_type, name) + elif state_change == ServiceStateChange.Removed: + return self._onServiceRemoved(name) + return True + + ## Handler for when a ZeroConf service was added. + def _onServiceAdded(self, zero_conf: Zeroconf, service_type: str, name: str) -> bool: + # First try getting info from zero-conf cache + info = ServiceInfo(service_type, name, properties={}) + for record in zero_conf.cache.entries_with_name(name.lower()): + info.update_record(zero_conf, time(), record) + + for record in zero_conf.cache.entries_with_name(info.server): + info.update_record(zero_conf, time(), record) + if info.address: + break + + # Request more data if info is not complete + if not info.address: + info = zero_conf.get_service_info(service_type, name) + + if info: + type_of_device = info.properties.get(b"type", None) + if type_of_device: + if type_of_device == b"printer": + address = '.'.join(map(lambda n: str(n), info.address)) + self.addedNetworkCluster.emit(str(name), address, info.properties) + else: + Logger.log("w", "The type of the found device is '%s', not 'printer'." % type_of_device) + else: + Logger.log("w", "Could not get information about %s" % name) + return False + + return True + + ## Handler for when a ZeroConf service was removed. + def _onServiceRemoved(self, name: str) -> bool: + Logger.log("d", "ZeroConf service removed: %s" % name) + self.removedNetworkCluster.emit(str(name)) + return True diff --git a/plugins/UM3NetworkPrinting/src/Network/__init__.py b/plugins/UM3NetworkPrinting/src/Network/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py b/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py index 99b29cda0a..3ab37297b5 100644 --- a/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py +++ b/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py @@ -1,626 +1,73 @@ # Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -import json -import os -from queue import Queue -from threading import Event, Thread -from time import time -from typing import Optional, TYPE_CHECKING, Dict, Callable - -from zeroconf import Zeroconf, ServiceBrowser, ServiceStateChange, ServiceInfo - -from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManager -from PyQt5.QtCore import QUrl -from PyQt5.QtGui import QDesktopServices +from typing import Optional, Callable, Dict +from UM.Signal import Signal from cura.CuraApplication import CuraApplication -from cura.PrinterOutput.PrinterOutputDevice import ConnectionType -from UM.i18n import i18nCatalog -from UM.Logger import Logger -from UM.Message import Message from UM.OutputDevice.OutputDeviceManager import ManualDeviceAdditionAttempt from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin -from UM.PluginRegistry import PluginRegistry -from UM.Signal import Signal, signalemitter -from UM.Version import Version -from . import ClusterUM3OutputDevice, LegacyUM3OutputDevice +from .Network.LocalClusterOutputDevice import LocalClusterOutputDevice +from .Network.LocalClusterOutputDeviceManager import LocalClusterOutputDeviceManager from .Cloud.CloudOutputDeviceManager import CloudOutputDeviceManager -from .Cloud.CloudOutputDevice import CloudOutputDevice # typing - -if TYPE_CHECKING: - from PyQt5.QtNetwork import QNetworkReply - from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin - from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice - from cura.Settings.GlobalStack import GlobalStack -i18n_catalog = i18nCatalog("cura") - - -# -# Represents a request for adding a manual printer. It has the following fields: -# - address: The string of the (IP) address of the manual printer -# - callback: (Optional) Once the HTTP request to the printer to get printer information is done, whether successful -# or not, this callback will be invoked to notify about the result. The callback must have a signature of -# func(success: bool, address: str) -> None -# - network_reply: This is the QNetworkReply instance for this request if the request has been issued and still in -# progress. It is kept here so we can cancel a request when needed. -# -class ManualPrinterRequest: - def __init__(self, address: str, callback: Optional[Callable[[bool, str], None]] = None) -> None: - self.address = address - self.callback = callback - self.network_reply = None # type: Optional["QNetworkReply"] - - -## This plugin handles the connection detection & creation of output device objects for the UM3 printer. -# Zero-Conf is used to detect printers, which are saved in a dict. -# If we discover a printer that has the same key as the active machine instance a connection is made. -@signalemitter +## This plugin handles the discovery and networking for Ultimaker 3D printers that support network and cloud printing. class UM3OutputDevicePlugin(OutputDevicePlugin): - addDeviceSignal = Signal() # Called '...Signal' to avoid confusion with function-names. - removeDeviceSignal = Signal() # Ditto ^^^. + + # Signal emitted when the list of discovered devices changed. Used by printer action in this plugin. discoveredDevicesChanged = Signal() - cloudFlowIsPossible = Signal() - def __init__(self): + def __init__(self) -> None: super().__init__() - self._zero_conf = None - self._zero_conf_browser = None - self._application = CuraApplication.getInstance() - self._api = self._application.getCuraAPI() + # Create a network output device manager that abstracts all network connection logic away. + self._network_output_device_manager = LocalClusterOutputDeviceManager() + self._network_output_device_manager.discoveredDevicesChanged.connect(self.discoveredDevicesChanged) # Create a cloud output device manager that abstracts all cloud connection logic away. self._cloud_output_device_manager = CloudOutputDeviceManager() - # Because the model needs to be created in the same thread as the QMLEngine, we use a signal. - self.addDeviceSignal.connect(self._onAddDevice) - self.removeDeviceSignal.connect(self._onRemoveDevice) + # Refresh network connections when another machine was selected in Cura. + # This ensures no output devices are still connected that do not belong to the new active machine. + CuraApplication.getInstance().globalContainerStackChanged.connect(self.refreshConnections) - self._application.globalContainerStackChanged.connect(self.refreshConnections) - - self._discovered_devices = {} - - self._network_manager = QNetworkAccessManager() - self._network_manager.finished.connect(self._onNetworkRequestFinished) - - self._min_cluster_version = Version("4.0.0") - self._min_cloud_version = Version("5.2.0") - - self._api_version = "1" - self._api_prefix = "/api/v" + self._api_version + "/" - self._cluster_api_version = "1" - self._cluster_api_prefix = "/cluster-api/v" + self._cluster_api_version + "/" - - # Get list of manual instances from preferences - self._preferences = self._application.getPreferences() - self._preferences.addPreference("um3networkprinting/manual_instances", - "") # A comma-separated list of ip adresses or hostnames - - manual_instances = self._preferences.getValue("um3networkprinting/manual_instances").split(",") - self._manual_instances = {address: ManualPrinterRequest(address) - for address in manual_instances} # type: Dict[str, ManualPrinterRequest] - - # Store the last manual entry key - self._last_manual_entry_key = "" # type: str - - # The zero-conf service changed requests are handled in a separate thread, so we can re-schedule the requests - # which fail to get detailed service info. - # Any new or re-scheduled requests will be appended to the request queue, and the handling thread will pick - # them up and process them. - self._service_changed_request_queue = Queue() - self._service_changed_request_event = Event() - self._service_changed_request_thread = Thread(target=self._handleOnServiceChangedRequests, daemon=True) - self._service_changed_request_thread.start() - - self._account = self._api.account - - # Check if cloud flow is possible when user logs in - self._account.loginStateChanged.connect(self.checkCloudFlowIsPossible) - - # Check if cloud flow is possible when user switches machines - self._application.globalContainerStackChanged.connect(self._onMachineSwitched) - - # Listen for when cloud flow is possible - self.cloudFlowIsPossible.connect(self._onCloudFlowPossible) - - # Listen if cloud cluster was added - self._cloud_output_device_manager.addedCloudCluster.connect(self._onCloudPrintingConfigured) - - # Listen if cloud cluster was removed - self._cloud_output_device_manager.removedCloudCluster.connect(self.checkCloudFlowIsPossible) - - self._start_cloud_flow_message = None # type: Optional[Message] - self._cloud_flow_complete_message = None # type: Optional[Message] - - def getDiscoveredDevices(self): - return self._discovered_devices - - def getLastManualDevice(self) -> str: - return self._last_manual_entry_key - - def resetLastManualDevice(self) -> None: - self._last_manual_entry_key = "" - - ## Start looking for devices on network. + ## Start looking for devices in the network and cloud. def start(self): - self.startDiscovery() + self._network_output_device_manager.start() self._cloud_output_device_manager.start() - def startDiscovery(self): - self.stop() - if self._zero_conf_browser: - self._zero_conf_browser.cancel() - self._zero_conf_browser = None # Force the old ServiceBrowser to be destroyed. - - for instance_name in list(self._discovered_devices): - self._onRemoveDevice(instance_name) - - self._zero_conf = Zeroconf() - self._zero_conf_browser = ServiceBrowser(self._zero_conf, u'_ultimaker._tcp.local.', - [self._appendServiceChangedRequest]) - - # Look for manual instances from preference - for address in self._manual_instances: - if address: - self.addManualDevice(address) - self.resetLastManualDevice() - - # TODO: CHANGE TO HOSTNAME - def refreshConnections(self): - active_machine = self._application.getGlobalContainerStack() - if not active_machine: - return - - um_network_key = active_machine.getMetaDataEntry("um_network_key") - - for key in self._discovered_devices: - if key == um_network_key: - if not self._discovered_devices[key].isConnected(): - Logger.log("d", "Attempting to connect with [%s]" % key) - # It should already be set, but if it actually connects we know for sure it's supported! - active_machine.addConfiguredConnectionType(self._discovered_devices[key].connectionType.value) - self._discovered_devices[key].connect() - self._discovered_devices[key].connectionStateChanged.connect(self._onDeviceConnectionStateChanged) - else: - self._onDeviceConnectionStateChanged(key) - else: - if self._discovered_devices[key].isConnected(): - Logger.log("d", "Attempting to close connection with [%s]" % key) - self._discovered_devices[key].close() - self._discovered_devices[key].connectionStateChanged.disconnect(self._onDeviceConnectionStateChanged) - - def _onDeviceConnectionStateChanged(self, key): - if key not in self._discovered_devices: - return - if self._discovered_devices[key].isConnected(): - # Sometimes the status changes after changing the global container and maybe the device doesn't belong to this machine - um_network_key = self._application.getGlobalContainerStack().getMetaDataEntry("um_network_key") - if key == um_network_key: - self.getOutputDeviceManager().addOutputDevice(self._discovered_devices[key]) - self.checkCloudFlowIsPossible(None) - else: - self.getOutputDeviceManager().removeOutputDevice(key) - - def stop(self): - if self._zero_conf is not None: - Logger.log("d", "zeroconf close...") - self._zero_conf.close() + # Stop network and cloud discovery. + def stop(self) -> None: + self._network_output_device_manager.stop() self._cloud_output_device_manager.stop() + ## Restart network discovery. + def startDiscovery(self) -> None: + self._network_output_device_manager.startDiscovery() + + ## Force refreshing the network connections. + def refreshConnections(self) -> None: + self._network_output_device_manager.refreshConnections() + self._cloud_output_device_manager.refreshConnections() + + ## Indicate that this plugin supports adding networked printers manually. def canAddManualDevice(self, address: str = "") -> ManualDeviceAdditionAttempt: - # This plugin should always be the fallback option (at least try it): - return ManualDeviceAdditionAttempt.POSSIBLE - - def removeManualDevice(self, key: str, address: Optional[str] = None) -> None: - if key not in self._discovered_devices and address is not None: - key = "manual:%s" % address - - if key in self._discovered_devices: - if not address: - address = self._discovered_devices[key].ipAddress - self._onRemoveDevice(key) - self.resetLastManualDevice() - - if address in self._manual_instances: - manual_printer_request = self._manual_instances.pop(address) - self._preferences.setValue("um3networkprinting/manual_instances", ",".join(self._manual_instances.keys())) - - if manual_printer_request.network_reply is not None: - manual_printer_request.network_reply.abort() - - if manual_printer_request.callback is not None: - self._application.callLater(manual_printer_request.callback, False, address) + return ManualDeviceAdditionAttempt.PRIORITY + ## Add a networked printer manually based on its network address. def addManualDevice(self, address: str, callback: Optional[Callable[[bool, str], None]] = None) -> None: - if address in self._manual_instances: - Logger.log("i", "Manual printer with address [%s] has already been added, do nothing", address) - return + self._network_output_device_manager.addManualDevice(address, callback) - self._manual_instances[address] = ManualPrinterRequest(address, callback = callback) - self._preferences.setValue("um3networkprinting/manual_instances", ",".join(self._manual_instances.keys())) - - instance_name = "manual:%s" % address - properties = { - b"name": address.encode("utf-8"), - b"address": address.encode("utf-8"), - b"manual": b"true", - b"incomplete": b"true", - b"temporary": b"true" # Still a temporary device until all the info is retrieved in _onNetworkRequestFinished - } - - if instance_name not in self._discovered_devices: - # Add a preliminary printer instance - self._onAddDevice(instance_name, address, properties) - self._last_manual_entry_key = instance_name - - reply = self._checkManualDevice(address) - self._manual_instances[address].network_reply = reply - - def _createMachineFromDiscoveredPrinter(self, key: str) -> None: - discovered_device = self._discovered_devices.get(key) - if discovered_device is None: - Logger.log("e", "Could not find discovered device with key [%s]", key) - return - - group_name = discovered_device.getProperty("name") - machine_type_id = discovered_device.getProperty("printer_type") - - Logger.log("i", "Creating machine from network device with key = [%s], group name = [%s], printer type = [%s]", - key, group_name, machine_type_id) - - self._application.getMachineManager().addMachine(machine_type_id, group_name) + ## Remove a manually connected networked printer. + def removeManualDevice(self, key: str, address: Optional[str] = None) -> None: + self._network_output_device_manager.removeManualDevice(key, address) - # connect the new machine to that network printer - self._api.machines.addOutputDeviceToCurrentMachine(discovered_device) + ## Get the discovered devices from the local network. + def getDiscoveredDevices(self) -> Dict[str, LocalClusterOutputDevice]: + return self._network_output_device_manager.getDiscoveredDevices() - # ensure that the connection states are refreshed. - self.refreshConnections() - - def _checkManualDevice(self, address: str) -> Optional[QNetworkReply]: - # Check if a UM3 family device exists at this address. - # If a printer responds, it will replace the preliminary printer created above - # origin=manual is for tracking back the origin of the call - url = QUrl("http://" + address + self._api_prefix + "system") - name_request = QNetworkRequest(url) - return self._network_manager.get(name_request) - - ## This is the function which handles the above network request's reply when it comes back. - def _onNetworkRequestFinished(self, reply: "QNetworkReply") -> None: - reply_url = reply.url().toString() - - address = reply.url().host() - device = None - properties = {} # type: Dict[bytes, bytes] - - if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: - # Either: - # - Something went wrong with checking the firmware version! - # - Something went wrong with checking the amount of printers the cluster has! - # - Couldn't find printer at the address when trying to add it manually. - if address in self._manual_instances: - key = "manual:" + address - self.removeManualDevice(key, address) - return - - if "system" in reply_url: - try: - system_info = json.loads(bytes(reply.readAll()).decode("utf-8")) - except: - Logger.log("e", "Something went wrong converting the JSON.") - return - - if address in self._manual_instances: - manual_printer_request = self._manual_instances[address] - manual_printer_request.network_reply = None - if manual_printer_request.callback is not None: - self._application.callLater(manual_printer_request.callback, True, address) - - has_cluster_capable_firmware = Version(system_info["firmware"]) > self._min_cluster_version - instance_name = "manual:%s" % address - properties = { - b"name": (system_info["name"] + " (manual)").encode("utf-8"), - b"address": address.encode("utf-8"), - b"firmware_version": system_info["firmware"].encode("utf-8"), - b"manual": b"true", - b"machine": str(system_info['hardware']["typeid"]).encode("utf-8") - } - - if has_cluster_capable_firmware: - # Cluster needs an additional request, before it's completed. - properties[b"incomplete"] = b"true" - - # Check if the device is still in the list & re-add it with the updated - # information. - if instance_name in self._discovered_devices: - self._onRemoveDevice(instance_name) - self._onAddDevice(instance_name, address, properties) - - if has_cluster_capable_firmware: - # We need to request more info in order to figure out the size of the cluster. - cluster_url = QUrl("http://" + address + self._cluster_api_prefix + "printers/") - cluster_request = QNetworkRequest(cluster_url) - self._network_manager.get(cluster_request) - - elif "printers" in reply_url: - # So we confirmed that the device is in fact a cluster printer, and we should now know how big it is. - try: - cluster_printers_list = json.loads(bytes(reply.readAll()).decode("utf-8")) - except: - Logger.log("e", "Something went wrong converting the JSON.") - return - instance_name = "manual:%s" % address - if instance_name in self._discovered_devices: - device = self._discovered_devices[instance_name] - properties = device.getProperties().copy() - if b"incomplete" in properties: - del properties[b"incomplete"] - properties[b"cluster_size"] = str(len(cluster_printers_list)).encode("utf-8") - self._onRemoveDevice(instance_name) - self._onAddDevice(instance_name, address, properties) - - def _onRemoveDevice(self, device_id: str) -> None: - device = self._discovered_devices.pop(device_id, None) - if device: - if device.isConnected(): - device.disconnect() - try: - device.connectionStateChanged.disconnect(self._onDeviceConnectionStateChanged) - except TypeError: - # Disconnect already happened. - pass - self._application.getDiscoveredPrintersModel().removeDiscoveredPrinter(device.address) - self.discoveredDevicesChanged.emit() - - def _onAddDevice(self, name, address, properties): - # Check what kind of device we need to add; Depending on the firmware we either add a "Connect"/"Cluster" - # or "Legacy" UM3 device. - cluster_size = int(properties.get(b"cluster_size", -1)) - - printer_type = properties.get(b"machine", b"").decode("utf-8") - printer_type_identifiers = { - "9066": "ultimaker3", - "9511": "ultimaker3_extended", - "9051": "ultimaker_s5" - } - - for key, value in printer_type_identifiers.items(): - if printer_type.startswith(key): - properties[b"printer_type"] = bytes(value, encoding="utf8") - break - else: - properties[b"printer_type"] = b"Unknown" - if cluster_size >= 0: - device = ClusterUM3OutputDevice.ClusterUM3OutputDevice(name, address, properties) - else: - device = LegacyUM3OutputDevice.LegacyUM3OutputDevice(name, address, properties) - self._application.getDiscoveredPrintersModel().addDiscoveredPrinter( - address, device.getId(), properties[b"name"].decode("utf-8"), self._createMachineFromDiscoveredPrinter, - properties[b"printer_type"].decode("utf-8"), device) - self._discovered_devices[device.getId()] = device - self.discoveredDevicesChanged.emit() - - global_container_stack = self._application.getGlobalContainerStack() - if global_container_stack and device.getId() == global_container_stack.getMetaDataEntry("um_network_key"): - # Ensure that the configured connection type is set. - global_container_stack.addConfiguredConnectionType(device.connectionType.value) - device.connect() - device.connectionStateChanged.connect(self._onDeviceConnectionStateChanged) - - ## Appends a service changed request so later the handling thread will pick it up and processes it. - def _appendServiceChangedRequest(self, zeroconf, service_type, name, state_change): - # append the request and set the event so the event handling thread can pick it up - item = (zeroconf, service_type, name, state_change) - self._service_changed_request_queue.put(item) - self._service_changed_request_event.set() - - def _handleOnServiceChangedRequests(self): - while True: - # Wait for the event to be set - self._service_changed_request_event.wait(timeout = 5.0) - - # Stop if the application is shutting down - if self._application.isShuttingDown(): - return - - self._service_changed_request_event.clear() - - # Handle all pending requests - reschedule_requests = [] # A list of requests that have failed so later they will get re-scheduled - while not self._service_changed_request_queue.empty(): - request = self._service_changed_request_queue.get() - zeroconf, service_type, name, state_change = request - try: - result = self._onServiceChanged(zeroconf, service_type, name, state_change) - if not result: - reschedule_requests.append(request) - except Exception: - Logger.logException("e", "Failed to get service info for [%s] [%s], the request will be rescheduled", - service_type, name) - reschedule_requests.append(request) - - # Re-schedule the failed requests if any - if reschedule_requests: - for request in reschedule_requests: - self._service_changed_request_queue.put(request) - - ## Handler for zeroConf detection. - # Return True or False indicating if the process succeeded. - # Note that this function can take over 3 seconds to complete. Be careful - # calling it from the main thread. - def _onServiceChanged(self, zero_conf, service_type, name, state_change): - if state_change == ServiceStateChange.Added: - # First try getting info from zero-conf cache - info = ServiceInfo(service_type, name, properties = {}) - for record in zero_conf.cache.entries_with_name(name.lower()): - info.update_record(zero_conf, time(), record) - - for record in zero_conf.cache.entries_with_name(info.server): - info.update_record(zero_conf, time(), record) - if info.address: - break - - # Request more data if info is not complete - if not info.address: - info = zero_conf.get_service_info(service_type, name) - - if info: - type_of_device = info.properties.get(b"type", None) - if type_of_device: - if type_of_device == b"printer": - address = '.'.join(map(lambda n: str(n), info.address)) - self.addDeviceSignal.emit(str(name), address, info.properties) - else: - Logger.log("w", - "The type of the found device is '%s', not 'printer'! Ignoring.." % type_of_device) - else: - Logger.log("w", "Could not get information about %s" % name) - return False - - elif state_change == ServiceStateChange.Removed: - Logger.log("d", "Bonjour service removed: %s" % name) - self.removeDeviceSignal.emit(str(name)) - - return True - - ## Check if the prerequsites are in place to start the cloud flow - def checkCloudFlowIsPossible(self, cluster: Optional[CloudOutputDevice]) -> None: - Logger.log("d", "Checking if cloud connection is possible...") - - # Pre-Check: Skip if active machine already has been cloud connected or you said don't ask again - active_machine = self._application.getMachineManager().activeMachine # type: Optional[GlobalStack] - if active_machine: - # Check 1A: Printer isn't already configured for cloud - if ConnectionType.CloudConnection.value in active_machine.configuredConnectionTypes: - Logger.log("d", "Active machine was already configured for cloud.") - return - - # Check 1B: Printer isn't already configured for cloud - if active_machine.getMetaDataEntry("cloud_flow_complete", False): - Logger.log("d", "Active machine was already configured for cloud.") - return - - # Check 2: User did not already say "Don't ask me again" - if active_machine.getMetaDataEntry("do_not_show_cloud_message", False): - Logger.log("d", "Active machine shouldn't ask about cloud anymore.") - return - - # Check 3: User is logged in with an Ultimaker account - if not self._account.isLoggedIn: - Logger.log("d", "Cloud Flow not possible: User not logged in!") - return - - # Check 4: Machine is configured for network connectivity - if not self._application.getMachineManager().activeMachineHasNetworkConnection: - Logger.log("d", "Cloud Flow not possible: Machine is not connected!") - return - - # Check 5: Machine has correct firmware version - firmware_version = self._application.getMachineManager().activeMachineFirmwareVersion # type: str - if not Version(firmware_version) > self._min_cloud_version: - Logger.log("d", "Cloud Flow not possible: Machine firmware (%s) is too low! (Requires version %s)", - firmware_version, - self._min_cloud_version) - return - - Logger.log("d", "Cloud flow is possible!") - self.cloudFlowIsPossible.emit() - - def _onCloudFlowPossible(self) -> None: - # Cloud flow is possible, so show the message - if not self._start_cloud_flow_message: - self._createCloudFlowStartMessage() - if self._start_cloud_flow_message and not self._start_cloud_flow_message.visible: - self._start_cloud_flow_message.show() - - def _onCloudPrintingConfigured(self, device) -> None: - # Hide the cloud flow start message if it was hanging around already - # For example: if the user already had the browser openen and made the association themselves - if self._start_cloud_flow_message and self._start_cloud_flow_message.visible: - self._start_cloud_flow_message.hide() - - # Cloud flow is complete, so show the message - if not self._cloud_flow_complete_message: - self._createCloudFlowCompleteMessage() - if self._cloud_flow_complete_message and not self._cloud_flow_complete_message.visible: - self._cloud_flow_complete_message.show() - - # Set the machine's cloud flow as complete so we don't ask the user again and again for cloud connected printers - active_machine = self._application.getMachineManager().activeMachine - if active_machine: - - # The active machine _might_ not be the machine that was in the added cloud cluster and - # then this will hide the cloud message for the wrong machine. So we only set it if the - # host names match between the active machine and the newly added cluster - saved_host_name = active_machine.getMetaDataEntry("um_network_key", "").split('.')[0] - added_host_name = device.toDict()["host_name"] - - if added_host_name == saved_host_name: - active_machine.setMetaDataEntry("do_not_show_cloud_message", True) - - return - - def _onDontAskMeAgain(self, checked: bool) -> None: - active_machine = self._application.getMachineManager().activeMachine # type: Optional[GlobalStack] - if active_machine: - active_machine.setMetaDataEntry("do_not_show_cloud_message", checked) - if checked: - Logger.log("d", "Will not ask the user again to cloud connect for current printer.") - return - - def _onCloudFlowStarted(self, messageId: str, actionId: str) -> None: - address = self._application.getMachineManager().activeMachineAddress # type: str - if address: - QDesktopServices.openUrl(QUrl("http://" + address + "/cloud_connect")) - if self._start_cloud_flow_message: - self._start_cloud_flow_message.hide() - self._start_cloud_flow_message = None - return - - def _onReviewCloudConnection(self, messageId: str, actionId: str) -> None: - address = self._application.getMachineManager().activeMachineAddress # type: str - if address: - QDesktopServices.openUrl(QUrl("http://" + address + "/settings")) - return - - def _onMachineSwitched(self) -> None: - # Hide any left over messages - if self._start_cloud_flow_message is not None and self._start_cloud_flow_message.visible: - self._start_cloud_flow_message.hide() - if self._cloud_flow_complete_message is not None and self._cloud_flow_complete_message.visible: - self._cloud_flow_complete_message.hide() - - # Check for cloud flow again with newly selected machine - self.checkCloudFlowIsPossible(None) - - def _createCloudFlowStartMessage(self): - self._start_cloud_flow_message = Message( - text = i18n_catalog.i18nc("@info:status", "Send and monitor print jobs from anywhere using your Ultimaker account."), - lifetime = 0, - image_source = QUrl.fromLocalFile(os.path.join( - PluginRegistry.getInstance().getPluginPath("UM3NetworkPrinting"), - "resources", "svg", "cloud-flow-start.svg" - )), - image_caption = i18n_catalog.i18nc("@info:status Ultimaker Cloud is a brand name and shouldn't be translated.", "Connect to Ultimaker Cloud"), - option_text = i18n_catalog.i18nc("@action", "Don't ask me again for this printer."), - option_state = False - ) - self._start_cloud_flow_message.addAction("", i18n_catalog.i18nc("@action", "Get started"), "", "") - self._start_cloud_flow_message.optionToggled.connect(self._onDontAskMeAgain) - self._start_cloud_flow_message.actionTriggered.connect(self._onCloudFlowStarted) - - def _createCloudFlowCompleteMessage(self): - self._cloud_flow_complete_message = Message( - text = i18n_catalog.i18nc("@info:status", "You can now send and monitor print jobs from anywhere using your Ultimaker account."), - lifetime = 30, - image_source = QUrl.fromLocalFile(os.path.join( - PluginRegistry.getInstance().getPluginPath("UM3NetworkPrinting"), - "resources", "svg", "cloud-flow-completed.svg" - )), - image_caption = i18n_catalog.i18nc("@info:status", "Connected!") - ) - self._cloud_flow_complete_message.addAction("", i18n_catalog.i18nc("@action", "Review your connection"), "", "", 1) # TODO: Icon - self._cloud_flow_complete_message.actionTriggered.connect(self._onReviewCloudConnection) \ No newline at end of file + ## Connect the active machine to a device. + def associateActiveMachineWithPrinterDevice(self, device: LocalClusterOutputDevice) -> None: + self._network_output_device_manager.associateActiveMachineWithPrinterDevice(device) diff --git a/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py b/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py new file mode 100644 index 0000000000..8c5f5c12ea --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py @@ -0,0 +1,87 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional, cast + +from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty, QObject + +from UM import i18nCatalog +from cura.CuraApplication import CuraApplication +from cura.MachineAction import MachineAction + +from .UM3OutputDevicePlugin import UM3OutputDevicePlugin +from .Network.LocalClusterOutputDevice import LocalClusterOutputDevice + + +I18N_CATALOG = i18nCatalog("cura") + + +## Machine action that allows to connect the active machine to a networked devices. +# TODO: in the future this should be part of the new discovery workflow baked into Cura. +class UltimakerNetworkedPrinterAction(MachineAction): + + # Signal emitted when discovered devices have changed. + discoveredDevicesChanged = pyqtSignal() + + def __init__(self) -> None: + super().__init__("DiscoverUM3Action", I18N_CATALOG.i18nc("@action", "Connect via Network")) + self._qml_url = "resources/qml/DiscoverUM3Action.qml" + self._network_plugin = None # type: Optional[UM3OutputDevicePlugin] + + ## Override the default value. + def needsUserInteraction(self) -> bool: + return False + + ## Start listening to network discovery events via the plugin. + @pyqtSlot(name = "startDiscovery") + def startDiscovery(self) -> None: + self._networkPlugin.discoveredDevicesChanged.connect(self._onDeviceDiscoveryChanged) + self.discoveredDevicesChanged.emit() # trigger at least once to populate the list + + ## Reset the discovered devices. + @pyqtSlot(name = "reset") + def reset(self) -> None: + self.discoveredDevicesChanged.emit() # trigger to reset the list + + ## Reset the discovered devices. + @pyqtSlot(name = "restartDiscovery") + def restartDiscovery(self) -> None: + self._networkPlugin.startDiscovery() + self.discoveredDevicesChanged.emit() # trigger to reset the list + + ## Remove a manually added device. + @pyqtSlot(str, str, name = "removeManualDevice") + def removeManualDevice(self, key: str, address: str) -> None: + self._networkPlugin.removeManualDevice(key, address) + + ## Add a new manual device. Can replace an existing one by key. + @pyqtSlot(str, str, name = "setManualDevice") + def setManualDevice(self, key: str, address: str) -> None: + if key != "": + self._networkPlugin.removeManualDevice(key) + if address != "": + self._networkPlugin.addManualDevice(address) + + ## Get the devices discovered in the local network sorted by name. + @pyqtProperty("QVariantList", notify = discoveredDevicesChanged) + def foundDevices(self): + discovered_devices = list(self._networkPlugin.getDiscoveredDevices().values()) + discovered_devices.sort(key = lambda d: d.name) + return discovered_devices + + ## Connect a device selected in the list with the active machine. + @pyqtSlot(QObject, name = "associateActiveMachineWithPrinterDevice") + def associateActiveMachineWithPrinterDevice(self, device: LocalClusterOutputDevice) -> None: + self._networkPlugin.associateActiveMachineWithPrinterDevice(device) + + ## Callback for when the list of discovered devices in the plugin was changed. + def _onDeviceDiscoveryChanged(self) -> None: + self.discoveredDevicesChanged.emit() + + ## Get the network manager from the plugin. + @property + def _networkPlugin(self) -> UM3OutputDevicePlugin: + if not self._network_plugin: + output_device_manager = CuraApplication.getInstance().getOutputDeviceManager() + network_plugin = output_device_manager.getOutputDevicePlugin("UM3NetworkPrinting") + self._network_plugin = cast(UM3OutputDevicePlugin, network_plugin) + return self._network_plugin diff --git a/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterOutputDevice.py new file mode 100644 index 0000000000..73b5b456f9 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterOutputDevice.py @@ -0,0 +1,353 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import os +from time import time +from typing import List, Optional, Dict + +from PyQt5.QtCore import pyqtProperty, pyqtSignal, QObject, pyqtSlot, QUrl + +from UM.Logger import Logger +from UM.Qt.Duration import Duration, DurationFormat +from cura.CuraApplication import CuraApplication +from cura.PrinterOutput.Models.PrinterOutputModel import PrinterOutputModel +from cura.PrinterOutput.NetworkedPrinterOutputDevice import NetworkedPrinterOutputDevice, AuthState +from cura.PrinterOutput.PrinterOutputDevice import ConnectionType, ConnectionState + +from .Utils import formatTimeCompleted, formatDateCompleted +from .ClusterOutputController import ClusterOutputController +from .Messages.PrintJobUploadProgressMessage import PrintJobUploadProgressMessage +from .Messages.NotClusterHostMessage import NotClusterHostMessage +from .Models.UM3PrintJobOutputModel import UM3PrintJobOutputModel +from .Models.Http.ClusterPrinterStatus import ClusterPrinterStatus +from .Models.Http.ClusterPrintJobStatus import ClusterPrintJobStatus + + +## Output device class that forms the basis of Ultimaker networked printer output devices. +# Currently used for local networking and cloud printing using Ultimaker Connect. +# This base class primarily contains all the Qt properties and slots needed for the monitor page to work. +class UltimakerNetworkedPrinterOutputDevice(NetworkedPrinterOutputDevice): + + META_NETWORK_KEY = "um_network_key" + META_CLUSTER_ID = "um_cloud_cluster_id" + + # Signal emitted when the status of the print jobs for this cluster were changed over the network. + printJobsChanged = pyqtSignal() + + # Signal emitted when the currently visible printer card in the UI was changed by the user. + activePrinterChanged = pyqtSignal() + + # Notify can only use signals that are defined by the class that they are in, not inherited ones. + # Therefore we create a private signal used to trigger the printersChanged signal. + _clusterPrintersChanged = pyqtSignal() + + # States indicating if a print job is queued. + QUEUED_PRINT_JOBS_STATES = {"queued", "error"} + + # Time in seconds since last network response after which we consider this device offline. + # We set this a bit higher than some of the other intervals to make sure they don't overlap. + NETWORK_RESPONSE_CONSIDER_OFFLINE = 10.0 # seconds + + def __init__(self, device_id: str, address: str, properties: Dict[bytes, bytes], connection_type: ConnectionType, + parent=None) -> None: + + super().__init__(device_id=device_id, address=address, properties=properties, connection_type=connection_type, + parent=parent) + + # Trigger the printersChanged signal when the private signal is triggered. + self.printersChanged.connect(self._clusterPrintersChanged) + + # Keeps track the last network response to determine if we are still connected. + self._time_of_last_response = time() + self._time_of_last_request = time() + + # Set the display name from the properties. + self.setName(self.getProperty("name")) + + # Set the display name of the printer type. + definitions = CuraApplication.getInstance().getContainerRegistry().findContainers(id = self.printerType) + self._printer_type_name = definitions[0].getName() if definitions else "" + + # Keeps track of all printers in the cluster. + self._printers = [] # type: List[PrinterOutputModel] + self._has_received_printers = False + + # Keeps track of all print jobs in the cluster. + self._print_jobs = [] # type: List[UM3PrintJobOutputModel] + + # Keep track of the printer currently selected in the UI. + self._active_printer = None # type: Optional[PrinterOutputModel] + + # By default we are not authenticated. This state will be changed later. + self._authentication_state = AuthState.NotAuthenticated + + # Load the Monitor UI elements. + self._loadMonitorTab() + + # The job upload progress message modal. + self._progress = PrintJobUploadProgressMessage() + + ## The IP address of the printer. + @pyqtProperty(str, constant=True) + def address(self) -> str: + return self._address + + ## The display name of the printer. + @pyqtProperty(str, constant=True) + def printerTypeName(self) -> str: + return self._printer_type_name + + # Get all print jobs for this cluster. + @pyqtProperty("QVariantList", notify=printJobsChanged) + def printJobs(self) -> List[UM3PrintJobOutputModel]: + return self._print_jobs + + # Get all print jobs for this cluster that are queued. + @pyqtProperty("QVariantList", notify=printJobsChanged) + def queuedPrintJobs(self) -> List[UM3PrintJobOutputModel]: + return [print_job for print_job in self._print_jobs if print_job.state in self.QUEUED_PRINT_JOBS_STATES] + + # Get all print jobs for this cluster that are currently printing. + @pyqtProperty("QVariantList", notify=printJobsChanged) + def activePrintJobs(self) -> List[UM3PrintJobOutputModel]: + return [print_job for print_job in self._print_jobs if + print_job.assignedPrinter is not None and print_job.state not in self.QUEUED_PRINT_JOBS_STATES] + + @pyqtProperty(bool, notify=_clusterPrintersChanged) + def receivedData(self) -> bool: + return self._has_received_printers + + # Get the amount of printers in the cluster. + @pyqtProperty(int, notify=_clusterPrintersChanged) + def clusterSize(self) -> int: + if not self._has_received_printers: + discovered_size = self.getProperty("cluster_size") + if discovered_size == "": + return 1 # prevent false positives for new devices + return int(discovered_size) + return len(self._printers) + + # Get the amount of printer in the cluster per type. + @pyqtProperty("QVariantList", notify=_clusterPrintersChanged) + def connectedPrintersTypeCount(self) -> List[Dict[str, str]]: + printer_count = {} # type: Dict[str, int] + for printer in self._printers: + if printer.type in printer_count: + printer_count[printer.type] += 1 + else: + printer_count[printer.type] = 1 + result = [] + for machine_type in printer_count: + result.append({"machine_type": machine_type, "count": str(printer_count[machine_type])}) + return result + + # Get a list of all printers. + @pyqtProperty("QVariantList", notify=_clusterPrintersChanged) + def printers(self) -> List[PrinterOutputModel]: + return self._printers + + # Get the currently active printer in the UI. + @pyqtProperty(QObject, notify=activePrinterChanged) + def activePrinter(self) -> Optional[PrinterOutputModel]: + return self._active_printer + + # Set the currently active printer from the UI. + @pyqtSlot(QObject, name="setActivePrinter") + def setActivePrinter(self, printer: Optional[PrinterOutputModel]) -> None: + if self.activePrinter == printer: + return + self._active_printer = printer + self.activePrinterChanged.emit() + + ## Whether the printer that this output device represents supports print job actions via the local network. + @pyqtProperty(bool, constant=True) + def supportsPrintJobActions(self) -> bool: + return True + + ## Set the remote print job state. + def setJobState(self, print_job_uuid: str, state: str) -> None: + raise NotImplementedError("setJobState must be implemented") + + @pyqtSlot(str, name="sendJobToTop") + def sendJobToTop(self, print_job_uuid: str) -> None: + raise NotImplementedError("sendJobToTop must be implemented") + + @pyqtSlot(str, name="deleteJobFromQueue") + def deleteJobFromQueue(self, print_job_uuid: str) -> None: + raise NotImplementedError("deleteJobFromQueue must be implemented") + + @pyqtSlot(str, name="forceSendJob") + def forceSendJob(self, print_job_uuid: str) -> None: + raise NotImplementedError("forceSendJob must be implemented") + + @pyqtSlot(name="openPrintJobControlPanel") + def openPrintJobControlPanel(self) -> None: + raise NotImplementedError("openPrintJobControlPanel must be implemented") + + @pyqtSlot(name="openPrinterControlPanel") + def openPrinterControlPanel(self) -> None: + raise NotImplementedError("openPrinterControlPanel must be implemented") + + @pyqtProperty(QUrl, notify=_clusterPrintersChanged) + def activeCameraUrl(self) -> QUrl: + return QUrl() + + @pyqtSlot(QUrl, name="setActiveCameraUrl") + def setActiveCameraUrl(self, camera_url: QUrl) -> None: + pass + + @pyqtSlot(int, result=str, name="getTimeCompleted") + def getTimeCompleted(self, time_remaining: int) -> str: + return formatTimeCompleted(time_remaining) + + @pyqtSlot(int, result=str, name="getDateCompleted") + def getDateCompleted(self, time_remaining: int) -> str: + return formatDateCompleted(time_remaining) + + @pyqtSlot(int, result=str, name="formatDuration") + def formatDuration(self, seconds: int) -> str: + return Duration(seconds).getDisplayString(DurationFormat.Format.Short) + + def _update(self) -> None: + self._checkStillConnected() + super()._update() + + ## Check if we're still connected by comparing the last timestamps for network response and the current time. + # This implementation is similar to the base NetworkedPrinterOutputDevice, but is tweaked slightly. + # Re-connecting is handled automatically by the output device managers in this plugin. + # TODO: it would be nice to have this logic in the managers, but connecting those with signals causes crashes. + def _checkStillConnected(self) -> None: + time_since_last_response = time() - self._time_of_last_response + if time_since_last_response > self.NETWORK_RESPONSE_CONSIDER_OFFLINE: + self.setConnectionState(ConnectionState.Closed) + if self.key in CuraApplication.getInstance().getOutputDeviceManager().getOutputDeviceIds(): + CuraApplication.getInstance().getOutputDeviceManager().removeOutputDevice(self.key) + elif self.connectionState == ConnectionState.Closed: + self._reconnectForActiveMachine() + + ## Reconnect for the active output device. + # Does nothing if the device is not meant for the active machine. + def _reconnectForActiveMachine(self) -> None: + active_machine = CuraApplication.getInstance().getGlobalContainerStack() + if not active_machine: + return + + # Indicate this device is now connected again. + self.setConnectionState(ConnectionState.Connected) + + # If the device was already registered we don't need to register it again. + if self.key in CuraApplication.getInstance().getOutputDeviceManager().getOutputDeviceIds(): + return + + # Try for local network device. + stored_device_id = active_machine.getMetaDataEntry(self.META_NETWORK_KEY) + if self.key == stored_device_id: + CuraApplication.getInstance().getOutputDeviceManager().addOutputDevice(self) + + # Try for cloud device. + stored_cluster_id = active_machine.getMetaDataEntry(self.META_CLUSTER_ID) + if self.key == stored_cluster_id: + CuraApplication.getInstance().getOutputDeviceManager().addOutputDevice(self) + + def _responseReceived(self) -> None: + self._time_of_last_response = time() + + def _updatePrinters(self, remote_printers: List[ClusterPrinterStatus]) -> None: + self._responseReceived() + + # Keep track of the new printers to show. + # We create a new list instead of changing the existing one to get the correct order. + new_printers = [] # type: List[PrinterOutputModel] + + # Check which printers need to be created or updated. + for index, printer_data in enumerate(remote_printers): + printer = next(iter(printer for printer in self._printers if printer.key == printer_data.uuid), None) + if printer is None: + printer = printer_data.createOutputModel(ClusterOutputController(self)) + else: + printer_data.updateOutputModel(printer) + new_printers.append(printer) + + # Check which printers need to be removed (de-referenced). + remote_printers_keys = [printer_data.uuid for printer_data in remote_printers] + removed_printers = [printer for printer in self._printers if printer.key not in remote_printers_keys] + for removed_printer in removed_printers: + if self._active_printer and self._active_printer.key == removed_printer.key: + self.setActivePrinter(None) + + self._printers = new_printers + self._has_received_printers = True + if self._printers and not self.activePrinter: + self.setActivePrinter(self._printers[0]) + + self.printersChanged.emit() + self._checkIfClusterHost() + + ## Check is this device is a cluster host and takes the needed actions when it is not. + def _checkIfClusterHost(self): + if len(self._printers) < 1 and self.isConnected(): + NotClusterHostMessage(self).show() + self.close() + CuraApplication.getInstance().getOutputDeviceManager().removeOutputDevice(self.key) + + ## Updates the local list of print jobs with the list received from the cluster. + # \param remote_jobs: The print jobs received from the cluster. + def _updatePrintJobs(self, remote_jobs: List[ClusterPrintJobStatus]) -> None: + self._responseReceived() + + # Keep track of the new print jobs to show. + # We create a new list instead of changing the existing one to get the correct order. + new_print_jobs = [] + + # Check which print jobs need to be created or updated. + for index, print_job_data in enumerate(remote_jobs): + print_job = next( + iter(print_job for print_job in self._print_jobs if print_job.key == print_job_data.uuid), None) + if not print_job: + new_print_jobs.append(self._createPrintJobModel(print_job_data)) + else: + print_job_data.updateOutputModel(print_job) + if print_job_data.printer_uuid: + self._updateAssignedPrinter(print_job, print_job_data.printer_uuid) + if print_job_data.assigned_to: + self._updateAssignedPrinter(print_job, print_job_data.assigned_to) + new_print_jobs.append(print_job) + + # Check which print job need to be removed (de-referenced). + remote_job_keys = [print_job_data.uuid for print_job_data in remote_jobs] + removed_jobs = [print_job for print_job in self._print_jobs if print_job.key not in remote_job_keys] + for removed_job in removed_jobs: + if removed_job.assignedPrinter: + removed_job.assignedPrinter.updateActivePrintJob(None) + + self._print_jobs = new_print_jobs + self.printJobsChanged.emit() + + ## Create a new print job model based on the remote status of the job. + # \param remote_job: The remote print job data. + def _createPrintJobModel(self, remote_job: ClusterPrintJobStatus) -> UM3PrintJobOutputModel: + model = remote_job.createOutputModel(ClusterOutputController(self)) + if remote_job.printer_uuid: + self._updateAssignedPrinter(model, remote_job.printer_uuid) + if remote_job.assigned_to: + self._updateAssignedPrinter(model, remote_job.assigned_to) + return model + + ## Updates the printer assignment for the given print job model. + def _updateAssignedPrinter(self, model: UM3PrintJobOutputModel, printer_uuid: str) -> None: + printer = next((p for p in self._printers if printer_uuid == p.key), None) + if not printer: + return + printer.updateActivePrintJob(model) + model.updateAssignedPrinter(printer) + + ## Load Monitor tab QML. + def _loadMonitorTab(self) -> None: + plugin_registry = CuraApplication.getInstance().getPluginRegistry() + if not plugin_registry: + Logger.log("e", "Could not get plugin registry") + return + plugin_path = plugin_registry.getPluginPath("UM3NetworkPrinting") + if not plugin_path: + Logger.log("e", "Could not get plugin path") + return + self._monitor_view_qml_path = os.path.join(plugin_path, "resources", "qml", "MonitorStage.qml") diff --git a/plugins/UM3NetworkPrinting/src/Utils.py b/plugins/UM3NetworkPrinting/src/Utils.py new file mode 100644 index 0000000000..a628130416 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Utils.py @@ -0,0 +1,30 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from datetime import datetime, timedelta + +from UM import i18nCatalog + + +def formatTimeCompleted(seconds_remaining: int) -> str: + completed = datetime.now() + timedelta(seconds=seconds_remaining) + return "{hour:02d}:{minute:02d}".format(hour = completed.hour, minute = completed.minute) + + +def formatDateCompleted(seconds_remaining: int) -> str: + now = datetime.now() + completed = now + timedelta(seconds=seconds_remaining) + days = (completed.date() - now.date()).days + i18n = i18nCatalog("cura") + + # If finishing date is more than 7 days out, using "Mon Dec 3 at HH:MM" format + if days >= 7: + return completed.strftime("%a %b ") + "{day}".format(day = completed.day) + # If finishing date is within the next week, use "Monday at HH:MM" format + elif days >= 2: + return completed.strftime("%a") + # If finishing tomorrow, use "tomorrow at HH:MM" format + elif days >= 1: + return i18n.i18nc("@info:status", "tomorrow") + # If finishing today, use "today at HH:MM" format + else: + return i18n.i18nc("@info:status", "today") diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/__init__.py b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/__init__.py deleted file mode 100644 index 777afc92c2..0000000000 --- a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. -import json -import os - - -def readFixture(fixture_name: str) -> bytes: - with open("{}/{}.json".format(os.path.dirname(__file__), fixture_name), "rb") as f: - return f.read() - -def parseFixture(fixture_name: str) -> dict: - return json.loads(readFixture(fixture_name).decode()) diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusterStatusResponse.json b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusterStatusResponse.json deleted file mode 100644 index 4f9f47fc75..0000000000 --- a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusterStatusResponse.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "data": { - "generated_time": "2018-12-10T08:23:55.110Z", - "printers": [ - { - "configuration": [ - { - "extruder_index": 0, - "material": { - "material": "empty" - }, - "print_core_id": "AA 0.4" - }, - { - "extruder_index": 1, - "material": { - "material": "empty" - }, - "print_core_id": "AA 0.4" - } - ], - "enabled": true, - "firmware_version": "5.1.2.20180807", - "friendly_name": "Master-Luke", - "ip_address": "10.183.1.140", - "machine_variant": "Ultimaker 3", - "status": "maintenance", - "unique_name": "ultimakersystem-ccbdd30044ec", - "uuid": "b3a47ea3-1eeb-4323-9626-6f9c3c888f9e" - }, - { - "configuration": [ - { - "extruder_index": 0, - "material": { - "brand": "Generic", - "color": "Generic", - "guid": "506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9", - "material": "PLA" - }, - "print_core_id": "AA 0.4" - }, - { - "extruder_index": 1, - "material": { - "brand": "Ultimaker", - "color": "Red", - "guid": "9cfe5bf1-bdc5-4beb-871a-52c70777842d", - "material": "PLA" - }, - "print_core_id": "AA 0.4" - } - ], - "enabled": true, - "firmware_version": "4.3.3.20180529", - "friendly_name": "UM-Marijn", - "ip_address": "10.183.1.166", - "machine_variant": "Ultimaker 3", - "status": "idle", - "unique_name": "ultimakersystem-ccbdd30058ab", - "uuid": "6e62c40a-4601-4b0e-9fec-c7c02c59c30a" - } - ], - "print_jobs": [ - { - "assigned_to": "6e62c40a-4601-4b0e-9fec-c7c02c59c30a", - "configuration": [ - { - "extruder_index": 0, - "material": { - "brand": "Ultimaker", - "color": "Black", - "guid": "3ee70a86-77d8-4b87-8005-e4a1bc57d2ce", - "material": "PLA" - }, - "print_core_id": "AA 0.4" - } - ], - "constraints": {}, - "created_at": "2018-12-10T08:28:04.108Z", - "force": false, - "last_seen": 500165.109491861, - "machine_variant": "Ultimaker 3", - "name": "UM3_dragon", - "network_error_count": 0, - "owner": "Daniel Testing", - "started": false, - "status": "queued", - "time_elapsed": 0, - "time_total": 14145, - "uuid": "d1c8bd52-5e9f-486a-8c25-a123cc8c7702" - } - ] - } -} diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusters.json b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusters.json deleted file mode 100644 index 5200e3b971..0000000000 --- a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusters.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "data": [{ - "cluster_id": "RIZ6cZbWA_Ua7RZVJhrdVfVpf0z-MqaSHQE4v8aRTtYq", - "host_guid": "e90ae0ac-1257-4403-91ee-a44c9b7e8050", - "host_name": "ultimakersystem-ccbdd30044ec", - "host_version": "5.0.0.20170101", - "is_online": true, - "status": "active" - }, { - "cluster_id": "NWKV6vJP_LdYsXgXqAcaNCR0YcLJwar1ugh0ikEZsZs8", - "host_guid": "e0ace90a-91ee-1257-4403-e8050a44c9b7", - "host_name": "ultimakersystem-30044ecccbdd", - "host_version": "5.1.2.20180807", - "is_online": true, - "status": "active" - }] -} diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/postJobPrintResponse.json b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/postJobPrintResponse.json deleted file mode 100644 index caedcd8732..0000000000 --- a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/postJobPrintResponse.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "data": { - "cluster_job_id": "9a59d8e9-91d3-4ff6-b4cb-9db91c4094dd", - "job_id": "ABCDefGHIjKlMNOpQrSTUvYxWZ0-1234567890abcDE=", - "status": "queued", - "generated_time": "2018-12-10T08:23:55.110Z" - } -} diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/putJobUploadResponse.json b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/putJobUploadResponse.json deleted file mode 100644 index 1304f3a9f6..0000000000 --- a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/putJobUploadResponse.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "data": { - "content_type": "text/plain", - "job_id": "ABCDefGHIjKlMNOpQrSTUvYxWZ0-1234567890abcDE=", - "job_name": "Ultimaker Robot v3.0", - "status": "uploading", - "upload_url": "https://api.ultimaker.com/print-job-upload" - } -} diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Models/__init__.py b/plugins/UM3NetworkPrinting/tests/Cloud/Models/__init__.py deleted file mode 100644 index f3f6970c54..0000000000 --- a/plugins/UM3NetworkPrinting/tests/Cloud/Models/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/NetworkManagerMock.py b/plugins/UM3NetworkPrinting/tests/Cloud/NetworkManagerMock.py deleted file mode 100644 index e504509d67..0000000000 --- a/plugins/UM3NetworkPrinting/tests/Cloud/NetworkManagerMock.py +++ /dev/null @@ -1,105 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. -import json -from typing import Dict, Tuple, Union, Optional, Any -from unittest.mock import MagicMock - -from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest - -from UM.Logger import Logger -from UM.Signal import Signal - - -class FakeSignal: - def __init__(self): - self._callbacks = [] - - def connect(self, callback): - self._callbacks.append(callback) - - def disconnect(self, callback): - self._callbacks.remove(callback) - - def emit(self, *args, **kwargs): - for callback in self._callbacks: - callback(*args, **kwargs) - - -## This class can be used to mock the QNetworkManager class and test the code using it. -# After patching the QNetworkManager class, requests are prepared before they can be executed. -# Any requests not prepared beforehand will cause KeyErrors. -class NetworkManagerMock: - - # An enumeration of the supported operations and their code for the network access manager. - _OPERATIONS = { - "GET": QNetworkAccessManager.GetOperation, - "POST": QNetworkAccessManager.PostOperation, - "PUT": QNetworkAccessManager.PutOperation, - "DELETE": QNetworkAccessManager.DeleteOperation, - "HEAD": QNetworkAccessManager.HeadOperation, - } # type: Dict[str, int] - - ## Initializes the network manager mock. - def __init__(self) -> None: - # A dict with the prepared replies, using the format {(http_method, url): reply} - self.replies = {} # type: Dict[Tuple[str, str], MagicMock] - self.request_bodies = {} # type: Dict[Tuple[str, str], bytes] - - # Signals used in the network manager. - self.finished = Signal() - self.authenticationRequired = Signal() - - ## Mock implementation of the get, post, put, delete and head methods from the network manager. - # Since the methods are very simple and the same it didn't make sense to repeat the code. - # \param method: The method being called. - # \return The mocked function, if the method name is known. Defaults to the standard getattr function. - def __getattr__(self, method: str) -> Any: - ## This mock implementation will simply return the reply from the prepared ones. - # it raises a KeyError if requests are done without being prepared. - def doRequest(request: QNetworkRequest, body: Optional[bytes] = None, *_): - key = method.upper(), request.url().toString() - if body: - self.request_bodies[key] = body - return self.replies[key] - - operation = self._OPERATIONS.get(method.upper()) - if operation: - return doRequest - - # the attribute is not one of the implemented methods, default to the standard implementation. - return getattr(super(), method) - - ## Prepares a server reply for the given parameters. - # \param method: The HTTP method. - # \param url: The URL being requested. - # \param status_code: The HTTP status code for the response. - # \param response: The response body from the server (generally json-encoded). - def prepareReply(self, method: str, url: str, status_code: int, response: Union[bytes, dict]) -> None: - reply_mock = MagicMock() - reply_mock.url().toString.return_value = url - reply_mock.operation.return_value = self._OPERATIONS[method] - reply_mock.attribute.return_value = status_code - reply_mock.finished = FakeSignal() - reply_mock.isFinished.return_value = False - reply_mock.readAll.return_value = response if isinstance(response, bytes) else json.dumps(response).encode() - self.replies[method, url] = reply_mock - Logger.log("i", "Prepared mock {}-response to {} {}", status_code, method, url) - - ## Gets the request that was sent to the network manager for the given method and URL. - # \param method: The HTTP method. - # \param url: The URL. - def getRequestBody(self, method: str, url: str) -> Optional[bytes]: - return self.request_bodies.get((method.upper(), url)) - - ## Emits the signal that the reply is ready to all prepared replies. - def flushReplies(self) -> None: - for key, reply in self.replies.items(): - Logger.log("i", "Flushing reply to {} {}", *key) - reply.isFinished.return_value = True - reply.finished.emit() - self.finished.emit(reply) - self.reset() - - ## Deletes all prepared replies - def reset(self) -> None: - self.replies.clear() diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudApiClient.py b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudApiClient.py deleted file mode 100644 index b79d009c31..0000000000 --- a/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudApiClient.py +++ /dev/null @@ -1,117 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. -from typing import List -from unittest import TestCase -from unittest.mock import patch, MagicMock - -from cura.UltimakerCloudAuthentication import CuraCloudAPIRoot -from ...src.Cloud import CloudApiClient -from ...src.Cloud.Models.CloudClusterResponse import CloudClusterResponse -from ...src.Cloud.Models.CloudClusterStatus import CloudClusterStatus -from ...src.Cloud.Models.CloudPrintJobResponse import CloudPrintJobResponse -from ...src.Cloud.Models.CloudPrintJobUploadRequest import CloudPrintJobUploadRequest -from ...src.Cloud.Models.CloudError import CloudError -from .Fixtures import readFixture, parseFixture -from .NetworkManagerMock import NetworkManagerMock - - -class TestCloudApiClient(TestCase): - maxDiff = None - - def _errorHandler(self, errors: List[CloudError]): - raise Exception("Received unexpected error: {}".format(errors)) - - def setUp(self): - super().setUp() - self.account = MagicMock() - self.account.isLoggedIn.return_value = True - - self.network = NetworkManagerMock() - with patch.object(CloudApiClient, 'QNetworkAccessManager', return_value = self.network): - self.api = CloudApiClient.CloudApiClient(self.account, self._errorHandler) - - def test_getClusters(self): - result = [] - - response = readFixture("getClusters") - data = parseFixture("getClusters")["data"] - - self.network.prepareReply("GET", CuraCloudAPIRoot + "/connect/v1/clusters", 200, response) - # The callback is a function that adds the result of the call to getClusters to the result list - self.api.getClusters(lambda clusters: result.extend(clusters)) - - self.network.flushReplies() - - self.assertEqual([CloudClusterResponse(**data[0]), CloudClusterResponse(**data[1])], result) - - def test_getClusterStatus(self): - result = [] - - response = readFixture("getClusterStatusResponse") - data = parseFixture("getClusterStatusResponse")["data"] - - url = CuraCloudAPIRoot + "/connect/v1/clusters/R0YcLJwar1ugh0ikEZsZs8NWKV6vJP_LdYsXgXqAcaNC/status" - self.network.prepareReply("GET", url, 200, response) - self.api.getClusterStatus("R0YcLJwar1ugh0ikEZsZs8NWKV6vJP_LdYsXgXqAcaNC", lambda s: result.append(s)) - - self.network.flushReplies() - - self.assertEqual([CloudClusterStatus(**data)], result) - - def test_requestUpload(self): - - results = [] - - response = readFixture("putJobUploadResponse") - - self.network.prepareReply("PUT", CuraCloudAPIRoot + "/cura/v1/jobs/upload", 200, response) - request = CloudPrintJobUploadRequest(job_name = "job name", file_size = 143234, content_type = "text/plain") - self.api.requestUpload(request, lambda r: results.append(r)) - self.network.flushReplies() - - self.assertEqual(["text/plain"], [r.content_type for r in results]) - self.assertEqual(["uploading"], [r.status for r in results]) - - def test_uploadToolPath(self): - - results = [] - progress = MagicMock() - - data = parseFixture("putJobUploadResponse")["data"] - upload_response = CloudPrintJobResponse(**data) - - # Network client doesn't look into the reply - self.network.prepareReply("PUT", upload_response.upload_url, 200, b'{}') - - mesh = ("1234" * 100000).encode() - self.api.uploadToolPath(upload_response, mesh, lambda: results.append("sent"), progress.advance, progress.error) - - for _ in range(10): - self.network.flushReplies() - self.network.prepareReply("PUT", upload_response.upload_url, 200, b'{}') - - self.assertEqual(["sent"], results) - - def test_requestPrint(self): - - results = [] - - response = readFixture("postJobPrintResponse") - - cluster_id = "NWKV6vJP_LdYsXgXqAcaNCR0YcLJwar1ugh0ikEZsZs8" - cluster_job_id = "9a59d8e9-91d3-4ff6-b4cb-9db91c4094dd" - job_id = "ABCDefGHIjKlMNOpQrSTUvYxWZ0-1234567890abcDE=" - - self.network.prepareReply("POST", - CuraCloudAPIRoot + "/connect/v1/clusters/{}/print/{}" - .format(cluster_id, job_id), - 200, response) - - self.api.requestPrint(cluster_id, job_id, lambda r: results.append(r)) - - self.network.flushReplies() - - self.assertEqual([job_id], [r.job_id for r in results]) - self.assertEqual([cluster_job_id], [r.cluster_job_id for r in results]) - self.assertEqual(["queued"], [r.status for r in results]) diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDevice.py b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDevice.py deleted file mode 100644 index d11cfa8a0e..0000000000 --- a/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDevice.py +++ /dev/null @@ -1,157 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. -import json -from unittest import TestCase -from unittest.mock import patch, MagicMock - -from UM.Scene.SceneNode import SceneNode -from cura.UltimakerCloudAuthentication import CuraCloudAPIRoot -from cura.PrinterOutput.Models.PrinterOutputModel import PrinterOutputModel -from ...src.Cloud import CloudApiClient -from ...src.Cloud.CloudOutputDevice import CloudOutputDevice -from ...src.Cloud.Models.CloudClusterResponse import CloudClusterResponse -from .Fixtures import readFixture, parseFixture -from .NetworkManagerMock import NetworkManagerMock - - -class TestCloudOutputDevice(TestCase): - maxDiff = None - - CLUSTER_ID = "RIZ6cZbWA_Ua7RZVJhrdVfVpf0z-MqaSHQE4v8aRTtYq" - JOB_ID = "ABCDefGHIjKlMNOpQrSTUvYxWZ0-1234567890abcDE=" - HOST_NAME = "ultimakersystem-ccbdd30044ec" - HOST_GUID = "e90ae0ac-1257-4403-91ee-a44c9b7e8050" - HOST_VERSION = "5.2.0" - FRIENDLY_NAME = "My Friendly Printer" - - STATUS_URL = "{}/connect/v1/clusters/{}/status".format(CuraCloudAPIRoot, CLUSTER_ID) - PRINT_URL = "{}/connect/v1/clusters/{}/print/{}".format(CuraCloudAPIRoot, CLUSTER_ID, JOB_ID) - REQUEST_UPLOAD_URL = "{}/cura/v1/jobs/upload".format(CuraCloudAPIRoot) - - def setUp(self): - super().setUp() - self.app = MagicMock() - - self.patches = [patch("UM.Qt.QtApplication.QtApplication.getInstance", return_value=self.app), - patch("UM.Application.Application.getInstance", return_value=self.app)] - for patched_method in self.patches: - patched_method.start() - - self.cluster = CloudClusterResponse(self.CLUSTER_ID, self.HOST_GUID, self.HOST_NAME, is_online=True, - status="active", host_version=self.HOST_VERSION, - friendly_name=self.FRIENDLY_NAME) - - self.network = NetworkManagerMock() - self.account = MagicMock(isLoggedIn=True, accessToken="TestAccessToken") - self.onError = MagicMock() - with patch.object(CloudApiClient, "QNetworkAccessManager", return_value = self.network): - self._api = CloudApiClient.CloudApiClient(self.account, self.onError) - - self.device = CloudOutputDevice(self._api, self.cluster) - self.cluster_status = parseFixture("getClusterStatusResponse") - self.network.prepareReply("GET", self.STATUS_URL, 200, readFixture("getClusterStatusResponse")) - - def tearDown(self): - try: - super().tearDown() - self.network.flushReplies() - finally: - for patched_method in self.patches: - patched_method.stop() - - # We test for these in order to make sure the correct file type is selected depending on the firmware version. - def test_properties(self): - self.assertEqual(self.device.firmwareVersion, self.HOST_VERSION) - self.assertEqual(self.device.name, self.FRIENDLY_NAME) - - def test_status(self): - self.device._update() - self.network.flushReplies() - - self.assertEqual([PrinterOutputModel, PrinterOutputModel], [type(printer) for printer in self.device.printers]) - - controller_fields = { - "_output_device": self.device, - "can_abort": False, - "can_control_manually": False, - "can_pause": False, - "can_pre_heat_bed": False, - "can_pre_heat_hotends": False, - "can_send_raw_gcode": False, - "can_update_firmware": False, - } - - self.assertEqual({printer["uuid"] for printer in self.cluster_status["data"]["printers"]}, - {printer.key for printer in self.device.printers}) - self.assertEqual([controller_fields, controller_fields], - [printer.getController().__dict__ for printer in self.device.printers]) - - self.assertEqual(["UM3PrintJobOutputModel"], [type(printer).__name__ for printer in self.device.printJobs]) - self.assertEqual({job["uuid"] for job in self.cluster_status["data"]["print_jobs"]}, - {job.key for job in self.device.printJobs}) - self.assertEqual({job["owner"] for job in self.cluster_status["data"]["print_jobs"]}, - {job.owner for job in self.device.printJobs}) - self.assertEqual({job["name"] for job in self.cluster_status["data"]["print_jobs"]}, - {job.name for job in self.device.printJobs}) - - def test_remove_print_job(self): - self.device._update() - self.network.flushReplies() - self.assertEqual(1, len(self.device.printJobs)) - - self.cluster_status["data"]["print_jobs"].clear() - self.network.prepareReply("GET", self.STATUS_URL, 200, self.cluster_status) - - self.device._last_request_time = None - self.device._update() - self.network.flushReplies() - self.assertEqual([], self.device.printJobs) - - def test_remove_printers(self): - self.device._update() - self.network.flushReplies() - self.assertEqual(2, len(self.device.printers)) - - self.cluster_status["data"]["printers"].clear() - self.network.prepareReply("GET", self.STATUS_URL, 200, self.cluster_status) - - self.device._last_request_time = None - self.device._update() - self.network.flushReplies() - self.assertEqual([], self.device.printers) - - def test_print_to_cloud(self): - active_machine_mock = self.app.getGlobalContainerStack.return_value - active_machine_mock.getMetaDataEntry.side_effect = {"file_formats": "application/x-ufp"}.get - - request_upload_response = parseFixture("putJobUploadResponse") - request_print_response = parseFixture("postJobPrintResponse") - self.network.prepareReply("PUT", self.REQUEST_UPLOAD_URL, 201, request_upload_response) - self.network.prepareReply("PUT", request_upload_response["data"]["upload_url"], 201, b"{}") - self.network.prepareReply("POST", self.PRINT_URL, 200, request_print_response) - - file_handler = MagicMock() - file_handler.getSupportedFileTypesWrite.return_value = [{ - "extension": "ufp", - "mime_type": "application/x-ufp", - "mode": 2 - }, { - "extension": "gcode.gz", - "mime_type": "application/gzip", - "mode": 2, - }] - file_handler.getWriterByMimeType.return_value.write.side_effect = \ - lambda stream, nodes: stream.write(str(nodes).encode()) - - scene_nodes = [SceneNode()] - expected_mesh = str(scene_nodes).encode() - self.device.requestWrite(scene_nodes, file_handler=file_handler, file_name="FileName") - - self.network.flushReplies() - self.assertEqual( - {"data": {"content_type": "application/x-ufp", "file_size": len(expected_mesh), "job_name": "FileName"}}, - json.loads(self.network.getRequestBody("PUT", self.REQUEST_UPLOAD_URL).decode()) - ) - self.assertEqual(expected_mesh, - self.network.getRequestBody("PUT", request_upload_response["data"]["upload_url"])) - self.assertIsNone(self.network.getRequestBody("POST", self.PRINT_URL)) diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDeviceManager.py deleted file mode 100644 index 869b39440c..0000000000 --- a/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDeviceManager.py +++ /dev/null @@ -1,126 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. -from unittest import TestCase -from unittest.mock import patch, MagicMock - -from UM.OutputDevice.OutputDeviceManager import OutputDeviceManager -from cura.UltimakerCloudAuthentication import CuraCloudAPIRoot -from ...src.Cloud import CloudApiClient -from ...src.Cloud import CloudOutputDeviceManager -from ...src.Cloud.Models.CloudClusterResponse import CloudClusterResponse -from .Fixtures import parseFixture, readFixture -from .NetworkManagerMock import NetworkManagerMock, FakeSignal - - -class TestCloudOutputDeviceManager(TestCase): - maxDiff = None - - URL = CuraCloudAPIRoot + "/connect/v1/clusters" - - def setUp(self): - super().setUp() - self.app = MagicMock() - self.device_manager = OutputDeviceManager() - self.app.getOutputDeviceManager.return_value = self.device_manager - - self.patches = [patch("UM.Qt.QtApplication.QtApplication.getInstance", return_value=self.app), - patch("UM.Application.Application.getInstance", return_value=self.app)] - for patched_method in self.patches: - patched_method.start() - - self.network = NetworkManagerMock() - self.timer = MagicMock(timeout = FakeSignal()) - with patch.object(CloudApiClient, "QNetworkAccessManager", return_value = self.network), \ - patch.object(CloudOutputDeviceManager, "QTimer", return_value = self.timer): - self.manager = CloudOutputDeviceManager.CloudOutputDeviceManager() - self.clusters_response = parseFixture("getClusters") - self.network.prepareReply("GET", self.URL, 200, readFixture("getClusters")) - - def tearDown(self): - try: - self._beforeTearDown() - - self.network.flushReplies() - self.manager.stop() - for patched_method in self.patches: - patched_method.stop() - finally: - super().tearDown() - - ## Before tear down method we check whether the state of the output device manager is what we expect based on the - # mocked API response. - def _beforeTearDown(self): - # let the network send replies - self.network.flushReplies() - # get the created devices - devices = self.device_manager.getOutputDevices() - # TODO: Check active device - - response_clusters = [] - for cluster in self.clusters_response.get("data", []): - response_clusters.append(CloudClusterResponse(**cluster).toDict()) - manager_clusters = sorted([device.clusterData.toDict() for device in self.manager._remote_clusters.values()], - key=lambda cluster: cluster['cluster_id'], reverse=True) - self.assertEqual(response_clusters, manager_clusters) - - ## Runs the initial request to retrieve the clusters. - def _loadData(self): - self.manager.start() - self.network.flushReplies() - - def test_device_is_created(self): - # just create the cluster, it is checked at tearDown - self._loadData() - - def test_device_is_updated(self): - self._loadData() - - # update the cluster from member variable, which is checked at tearDown - self.clusters_response["data"][0]["host_name"] = "New host name" - self.network.prepareReply("GET", self.URL, 200, self.clusters_response) - - self.manager._update_timer.timeout.emit() - - def test_device_is_removed(self): - self._loadData() - - # delete the cluster from member variable, which is checked at tearDown - del self.clusters_response["data"][1] - self.network.prepareReply("GET", self.URL, 200, self.clusters_response) - - self.manager._update_timer.timeout.emit() - - def test_device_connects_by_cluster_id(self): - active_machine_mock = self.app.getGlobalContainerStack.return_value - cluster1, cluster2 = self.clusters_response["data"] - cluster_id = cluster1["cluster_id"] - active_machine_mock.getMetaDataEntry.side_effect = {"um_cloud_cluster_id": cluster_id}.get - - self._loadData() - - self.assertTrue(self.device_manager.getOutputDevice(cluster1["cluster_id"]).isConnected()) - self.assertIsNone(self.device_manager.getOutputDevice(cluster2["cluster_id"])) - self.assertEqual([], active_machine_mock.setMetaDataEntry.mock_calls) - - def test_device_connects_by_network_key(self): - active_machine_mock = self.app.getGlobalContainerStack.return_value - - cluster1, cluster2 = self.clusters_response["data"] - network_key = cluster2["host_name"] + ".ultimaker.local" - active_machine_mock.getMetaDataEntry.side_effect = {"um_network_key": network_key}.get - - self._loadData() - - self.assertIsNone(self.device_manager.getOutputDevice(cluster1["cluster_id"])) - self.assertTrue(self.device_manager.getOutputDevice(cluster2["cluster_id"]).isConnected()) - - active_machine_mock.setMetaDataEntry.assert_called_with("um_cloud_cluster_id", cluster2["cluster_id"]) - - @patch.object(CloudOutputDeviceManager, "Message") - def test_api_error(self, message_mock): - self.clusters_response = { - "errors": [{"id": "notFound", "title": "Not found!", "http_status": "404", "code": "notFound"}] - } - self.network.prepareReply("GET", self.URL, 200, self.clusters_response) - self._loadData() - message_mock.return_value.show.assert_called_once_with() diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/__init__.py b/plugins/UM3NetworkPrinting/tests/Cloud/__init__.py deleted file mode 100644 index f3f6970c54..0000000000 --- a/plugins/UM3NetworkPrinting/tests/Cloud/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. diff --git a/plugins/UM3NetworkPrinting/tests/TestSendMaterialJob.py b/plugins/UM3NetworkPrinting/tests/TestSendMaterialJob.py deleted file mode 100644 index 2cab110861..0000000000 --- a/plugins/UM3NetworkPrinting/tests/TestSendMaterialJob.py +++ /dev/null @@ -1,244 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. -import io -import json -from unittest import TestCase, mock -from unittest.mock import patch, call, MagicMock - -from PyQt5.QtCore import QByteArray - -from UM.Application import Application - -from cura.Machines.MaterialGroup import MaterialGroup -from cura.Machines.MaterialNode import MaterialNode - -from ..src.SendMaterialJob import SendMaterialJob - -_FILES_MAP = {"generic_pla_white": "/materials/generic_pla_white.xml.fdm_material", - "generic_pla_black": "/materials/generic_pla_black.xml.fdm_material", - } - - -@patch("builtins.open", lambda _, __: io.StringIO("")) -class TestSendMaterialJob(TestCase): - # version 1 - _LOCAL_MATERIAL_WHITE = {"type": "material", "status": "unknown", "id": "generic_pla_white", - "base_file": "generic_pla_white", "setting_version": "5", "name": "White PLA", - "brand": "Generic", "material": "PLA", "color_name": "White", - "GUID": "badb0ee7-87c8-4f3f-9398-938587b67dce", "version": "1", "color_code": "#ffffff", - "description": "Test PLA White", "adhesion_info": "Use glue.", "approximate_diameter": "3", - "properties": {"density": "1.00", "diameter": "2.85", "weight": "750"}, - "definition": "fdmprinter", "compatible": True} - - # version 2 - _LOCAL_MATERIAL_WHITE_NEWER = {"type": "material", "status": "unknown", "id": "generic_pla_white", - "base_file": "generic_pla_white", "setting_version": "5", "name": "White PLA", - "brand": "Generic", "material": "PLA", "color_name": "White", - "GUID": "badb0ee7-87c8-4f3f-9398-938587b67dce", "version": "2", - "color_code": "#ffffff", - "description": "Test PLA White", "adhesion_info": "Use glue.", - "approximate_diameter": "3", - "properties": {"density": "1.00", "diameter": "2.85", "weight": "750"}, - "definition": "fdmprinter", "compatible": True} - - # invalid version: "one" - _LOCAL_MATERIAL_WHITE_INVALID_VERSION = {"type": "material", "status": "unknown", "id": "generic_pla_white", - "base_file": "generic_pla_white", "setting_version": "5", "name": "White PLA", - "brand": "Generic", "material": "PLA", "color_name": "White", - "GUID": "badb0ee7-87c8-4f3f-9398-938587b67dce", "version": "one", - "color_code": "#ffffff", - "description": "Test PLA White", "adhesion_info": "Use glue.", - "approximate_diameter": "3", - "properties": {"density": "1.00", "diameter": "2.85", "weight": "750"}, - "definition": "fdmprinter", "compatible": True} - - _LOCAL_MATERIAL_WHITE_ALL_RESULT = {"generic_pla_white": MaterialGroup("generic_pla_white", - MaterialNode(_LOCAL_MATERIAL_WHITE))} - - _LOCAL_MATERIAL_WHITE_NEWER_ALL_RESULT = {"generic_pla_white": MaterialGroup("generic_pla_white", - MaterialNode(_LOCAL_MATERIAL_WHITE_NEWER))} - - _LOCAL_MATERIAL_WHITE_INVALID_VERSION_ALL_RESULT = {"generic_pla_white": MaterialGroup("generic_pla_white", - MaterialNode(_LOCAL_MATERIAL_WHITE_INVALID_VERSION))} - - _LOCAL_MATERIAL_BLACK = {"type": "material", "status": "unknown", "id": "generic_pla_black", - "base_file": "generic_pla_black", "setting_version": "5", "name": "Yellow CPE", - "brand": "Ultimaker", "material": "CPE", "color_name": "Black", - "GUID": "5fbb362a-41f9-4818-bb43-15ea6df34aa4", "version": "1", "color_code": "#000000", - "description": "Test PLA Black", "adhesion_info": "Use glue.", "approximate_diameter": "3", - "properties": {"density": "1.01", "diameter": "2.85", "weight": "750"}, - "definition": "fdmprinter", "compatible": True} - - _LOCAL_MATERIAL_BLACK_ALL_RESULT = {"generic_pla_black": MaterialGroup("generic_pla_black", - MaterialNode(_LOCAL_MATERIAL_BLACK))} - - _REMOTE_MATERIAL_WHITE = { - "guid": "badb0ee7-87c8-4f3f-9398-938587b67dce", - "material": "PLA", - "brand": "Generic", - "version": 1, - "color": "White", - "density": 1.00 - } - - _REMOTE_MATERIAL_BLACK = { - "guid": "5fbb362a-41f9-4818-bb43-15ea6df34aa4", - "material": "PLA", - "brand": "Generic", - "version": 2, - "color": "Black", - "density": 1.00 - } - - def test_run(self): - device_mock = MagicMock() - job = SendMaterialJob(device_mock) - job.run() - - # We expect the materials endpoint to be called when the job runs. - device_mock.get.assert_called_with("materials/", on_finished = job._onGetRemoteMaterials) - - def test__onGetRemoteMaterials_withFailedRequest(self): - reply_mock = MagicMock() - device_mock = MagicMock() - reply_mock.attribute.return_value = 404 - job = SendMaterialJob(device_mock) - job._onGetRemoteMaterials(reply_mock) - - # We expect the device not to be called for any follow up. - self.assertEqual(0, device_mock.createFormPart.call_count) - - def test__onGetRemoteMaterials_withWrongEncoding(self): - reply_mock = MagicMock() - device_mock = MagicMock() - reply_mock.attribute.return_value = 200 - reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_WHITE]).encode("cp500")) - job = SendMaterialJob(device_mock) - job._onGetRemoteMaterials(reply_mock) - - # Given that the parsing fails we do no expect the device to be called for any follow up. - self.assertEqual(0, device_mock.createFormPart.call_count) - - def test__onGetRemoteMaterials_withBadJsonAnswer(self): - reply_mock = MagicMock() - device_mock = MagicMock() - reply_mock.attribute.return_value = 200 - reply_mock.readAll.return_value = QByteArray(b"Six sick hicks nick six slick bricks with picks and sticks.") - job = SendMaterialJob(device_mock) - job._onGetRemoteMaterials(reply_mock) - - # Given that the parsing fails we do no expect the device to be called for any follow up. - self.assertEqual(0, device_mock.createFormPart.call_count) - - def test__onGetRemoteMaterials_withMissingGuidInRemoteMaterial(self): - reply_mock = MagicMock() - device_mock = MagicMock() - reply_mock.attribute.return_value = 200 - remote_material_without_guid = self._REMOTE_MATERIAL_WHITE.copy() - del remote_material_without_guid["guid"] - reply_mock.readAll.return_value = QByteArray(json.dumps([remote_material_without_guid]).encode("ascii")) - job = SendMaterialJob(device_mock) - job._onGetRemoteMaterials(reply_mock) - - # Given that parsing fails we do not expect the device to be called for any follow up. - self.assertEqual(0, device_mock.createFormPart.call_count) - - @patch("cura.Machines.MaterialManager.MaterialManager") - @patch("cura.Settings.CuraContainerRegistry") - @patch("UM.Application") - def test__onGetRemoteMaterials_withInvalidVersionInLocalMaterial(self, application_mock, container_registry_mock, - material_manager_mock): - reply_mock = MagicMock() - device_mock = MagicMock() - application_mock.getContainerRegistry.return_value = container_registry_mock - application_mock.getMaterialManager.return_value = material_manager_mock - - reply_mock.attribute.return_value = 200 - reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_WHITE]).encode("ascii")) - - material_manager_mock.getAllMaterialGroups.return_value = self._LOCAL_MATERIAL_WHITE_INVALID_VERSION_ALL_RESULT.copy() - - with mock.patch.object(Application, "getInstance", new = lambda: application_mock): - job = SendMaterialJob(device_mock) - job._onGetRemoteMaterials(reply_mock) - - self.assertEqual(0, device_mock.createFormPart.call_count) - - @patch("UM.Application.Application.getInstance") - def test__onGetRemoteMaterials_withNoUpdate(self, application_mock): - reply_mock = MagicMock() - device_mock = MagicMock() - container_registry_mock = application_mock.getContainerRegistry.return_value - material_manager_mock = application_mock.getMaterialManager.return_value - - device_mock.createFormPart.return_value = "_xXx_" - - material_manager_mock.getAllMaterialGroups.return_value = self._LOCAL_MATERIAL_WHITE_ALL_RESULT.copy() - - reply_mock.attribute.return_value = 200 - reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_WHITE]).encode("ascii")) - - with mock.patch.object(Application, "getInstance", new = lambda: application_mock): - job = SendMaterialJob(device_mock) - job._onGetRemoteMaterials(reply_mock) - - self.assertEqual(0, device_mock.createFormPart.call_count) - self.assertEqual(0, device_mock.postFormWithParts.call_count) - - @patch("UM.Application.Application.getInstance") - def test__onGetRemoteMaterials_withUpdatedMaterial(self, get_instance_mock): - reply_mock = MagicMock() - device_mock = MagicMock() - application_mock = get_instance_mock.return_value - container_registry_mock = application_mock.getContainerRegistry.return_value - material_manager_mock = application_mock.getMaterialManager.return_value - - container_registry_mock.getContainerFilePathById = lambda x: _FILES_MAP.get(x) - - device_mock.createFormPart.return_value = "_xXx_" - - material_manager_mock.getAllMaterialGroups.return_value = self._LOCAL_MATERIAL_WHITE_NEWER_ALL_RESULT.copy() - - reply_mock.attribute.return_value = 200 - reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_WHITE]).encode("ascii")) - - job = SendMaterialJob(device_mock) - job._onGetRemoteMaterials(reply_mock) - - self.assertEqual(1, device_mock.createFormPart.call_count) - self.assertEqual(1, device_mock.postFormWithParts.call_count) - self.assertEqual( - [call.createFormPart("name=\"file\"; filename=\"generic_pla_white.xml.fdm_material\"", ""), - call.postFormWithParts(target = "materials/", parts = ["_xXx_"], on_finished = job.sendingFinished)], - device_mock.method_calls) - - @patch("UM.Application.Application.getInstance") - def test__onGetRemoteMaterials_withNewMaterial(self, application_mock): - reply_mock = MagicMock() - device_mock = MagicMock() - container_registry_mock = application_mock.getContainerRegistry.return_value - material_manager_mock = application_mock.getMaterialManager.return_value - - container_registry_mock.getContainerFilePathById = lambda x: _FILES_MAP.get(x) - - device_mock.createFormPart.return_value = "_xXx_" - - all_results = self._LOCAL_MATERIAL_WHITE_ALL_RESULT.copy() - for key, value in self._LOCAL_MATERIAL_BLACK_ALL_RESULT.items(): - all_results[key] = value - material_manager_mock.getAllMaterialGroups.return_value = all_results - - reply_mock.attribute.return_value = 200 - reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_BLACK]).encode("ascii")) - - with mock.patch.object(Application, "getInstance", new = lambda: application_mock): - job = SendMaterialJob(device_mock) - job._onGetRemoteMaterials(reply_mock) - - self.assertEqual(1, device_mock.createFormPart.call_count) - self.assertEqual(1, device_mock.postFormWithParts.call_count) - self.assertEqual( - [call.createFormPart("name=\"file\"; filename=\"generic_pla_white.xml.fdm_material\"", ""), - call.postFormWithParts(target = "materials/", parts = ["_xXx_"], on_finished = job.sendingFinished)], - device_mock.method_calls) diff --git a/plugins/UM3NetworkPrinting/tests/__init__.py b/plugins/UM3NetworkPrinting/tests/__init__.py deleted file mode 100644 index f3f6970c54..0000000000 --- a/plugins/UM3NetworkPrinting/tests/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -# Copyright (c) 2018 Ultimaker B.V. -# Cura is released under the terms of the LGPLv3 or higher. diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py index 6ce042f32d..4930835f58 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -6,6 +6,7 @@ import os from UM.i18n import i18nCatalog from UM.Logger import Logger from UM.Mesh.MeshWriter import MeshWriter #To get the g-code output. +from UM.Message import Message #Show an error when already printing. from UM.PluginRegistry import PluginRegistry #To get the g-code output. from UM.Qt.Duration import DurationFormat @@ -23,11 +24,15 @@ from queue import Queue from serial import Serial, SerialException, SerialTimeoutException from threading import Thread, Event from time import time -from typing import Union, Optional, List, cast +from typing import Union, Optional, List, cast, TYPE_CHECKING import re import functools # Used for reduce +if TYPE_CHECKING: + from UM.FileHandler.FileHandler import FileHandler + from UM.Scene.SceneNode import SceneNode + catalog = i18nCatalog("cura") @@ -112,16 +117,20 @@ class USBPrinterOutputDevice(PrinterOutputDevice): ## Request the current scene to be sent to a USB-connected printer. # # \param nodes A collection of scene nodes to send. This is ignored. - # \param file_name \type{string} A suggestion for a file name to write. + # \param file_name A suggestion for a file name to write. # \param filter_by_machine Whether to filter MIME types by machine. This # is ignored. # \param kwargs Keyword arguments. - def requestWrite(self, nodes, file_name = None, filter_by_machine = False, file_handler = None, **kwargs): + def requestWrite(self, nodes: List["SceneNode"], file_name: Optional[str] = None, limit_mimetypes: bool = False, + file_handler: Optional["FileHandler"] = None, filter_by_machine: bool = False, **kwargs) -> None: if self._is_printing: + message = Message(text = catalog.i18nc("@message", "A print is still in progress. Cura cannot start another print via USB until the previous print has completed."), title = catalog.i18nc("@message", "Print in Progress")) + message.show() return # Already printing self.writeStarted.emit(self) # cancel any ongoing preheat timer before starting a print - self._printers[0].getController().stopPreheatTimers() + controller = cast(GenericOutputController, self._printers[0].getController()) + controller.stopPreheatTimers() CuraApplication.getInstance().getController().setActiveStage("MonitorStage") @@ -181,7 +190,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): try: self._serial = Serial(str(self._serial_port), self._baud_rate, timeout=self._timeout, writeTimeout=self._timeout) except SerialException: - Logger.log("w", "An exception occured while trying to create serial connection") + Logger.log("w", "An exception occurred while trying to create serial connection") return CuraApplication.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerStackChanged) self._onGlobalContainerStackChanged() @@ -319,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/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/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py index 9d7c7646cc..45cdaebe87 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/tests/TestVersionUpgrade25to26.py @@ -1,5 +1,8 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +import os.path +import sys +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) import configparser #To check whether the appropriate exceptions are raised. import pytest #To register tests with. 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/VersionUpgrade26to27/tests/TestVersionUpgrade26to27.py b/plugins/VersionUpgrade/VersionUpgrade26to27/tests/TestVersionUpgrade26to27.py index eebaca23c6..6235578238 100644 --- a/plugins/VersionUpgrade/VersionUpgrade26to27/tests/TestVersionUpgrade26to27.py +++ b/plugins/VersionUpgrade/VersionUpgrade26to27/tests/TestVersionUpgrade26to27.py @@ -3,7 +3,9 @@ import configparser #To check whether the appropriate exceptions are raised. import pytest #To register tests with. - +import os.path +import sys +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) import VersionUpgrade26to27 #The module we're testing. ## Creates an instance of the upgrader to test with. 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/VersionUpgrade27to30/tests/TestVersionUpgrade27to30.py b/plugins/VersionUpgrade/VersionUpgrade27to30/tests/TestVersionUpgrade27to30.py index cae08ebcfd..8ac6616511 100644 --- a/plugins/VersionUpgrade/VersionUpgrade27to30/tests/TestVersionUpgrade27to30.py +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/tests/TestVersionUpgrade27to30.py @@ -1,6 +1,8 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. - +import os.path +import sys +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) import configparser #To parse the resulting config files. import pytest #To register tests with. 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/VersionUpgrade34to35/tests/TestVersionUpgrade34to35.py b/plugins/VersionUpgrade/VersionUpgrade34to35/tests/TestVersionUpgrade34to35.py index b74e6f35ac..9f306e74fa 100644 --- a/plugins/VersionUpgrade/VersionUpgrade34to35/tests/TestVersionUpgrade34to35.py +++ b/plugins/VersionUpgrade/VersionUpgrade34to35/tests/TestVersionUpgrade34to35.py @@ -1,6 +1,8 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. - +import os.path +import sys +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) import configparser #To parse the resulting config files. import pytest #To register tests with. 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/VersionUpgrade40to41.py b/plugins/VersionUpgrade/VersionUpgrade40to41/VersionUpgrade40to41.py index 845e9cbb8c..b63d1842b7 100644 --- a/plugins/VersionUpgrade/VersionUpgrade40to41/VersionUpgrade40to41.py +++ b/plugins/VersionUpgrade/VersionUpgrade40to41/VersionUpgrade40to41.py @@ -52,7 +52,7 @@ class VersionUpgrade40to41(VersionUpgrade): parser["metadata"]["setting_version"] = "7" # Limit Maximum Deviation instead of Maximum Resolution. This should have approximately the same effect as before the algorithm change, only more consistent. - if "meshfix_maximum_resolution" in parser["values"]: + if "values" in parser and "meshfix_maximum_resolution" in parser["values"]: resolution = parser["values"]["meshfix_maximum_resolution"] if resolution.startswith("="): resolution = resolution[1:] diff --git a/plugins/VersionUpgrade/VersionUpgrade40to41/__init__.py b/plugins/VersionUpgrade/VersionUpgrade40to41/__init__.py index 7f39bb9d39..09be805147 100644 --- a/plugins/VersionUpgrade/VersionUpgrade40to41/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade40to41/__init__.py @@ -14,7 +14,7 @@ def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function - ("preferences", 6000006): ("preferences", 6000007, upgrade.upgradePreferences), + ("preferences", 6000006): ("preferences", 6000007, upgrade.upgradePreferences), ("machine_stack", 4000006): ("machine_stack", 4000007, upgrade.upgradeStack), ("extruder_train", 4000006): ("extruder_train", 4000007, upgrade.upgradeStack), ("definition_changes", 4000006): ("definition_changes", 4000007, upgrade.upgradeInstanceContainer), 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 new file mode 100644 index 0000000000..a5a77a91e0 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py @@ -0,0 +1,338 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import configparser +import io +import os.path # To get the file ID. +from typing import Dict, List, Tuple + +from UM.VersionUpgrade import VersionUpgrade + +_renamed_settings = { + "support_minimal_diameter": "support_tower_maximum_supported_diameter" +} # type: Dict[str, str] +_removed_settings = ["prime_tower_circular", "max_feedrate_z_override"] # type: List[str] +_renamed_profiles = { + # Include CreawsomeMod profiles here as well for the people who installed that. + # Definitions. + "creawsome_base": "creality_base", + "creawsome_cr10": "creality_cr10", + "creawsome_cr10mini": "creality_cr10mini", + "creawsome_cr10s": "creality_cr10s", + "creawsome_cr10s4": "creality_cr10s4", + "creawsome_cr10s5": "creality_cr10s5", + "creawsome_cr10spro": "creality_cr10spro", + "creawsome_cr20": "creality_cr20", + "creawsome_cr20pro": "creality_cr20pro", + "creawsome_ender2": "creality_ender2", + "creawsome_ender3": "creality_ender3", + "creawsome_ender4": "creality_ender4", + "creawsome_ender5": "creality_ender5", + + # Extruder definitions. + "creawsome_base_extruder_0": "creality_base_extruder_0", + + # Variants. + "creawsome_base_0.2": "creality_base_0.2", + "creawsome_base_0.3": "creality_base_0.3", + "creawsome_base_0.4": "creality_base_0.4", + "creawsome_base_0.5": "creality_base_0.5", + "creawsome_base_0.6": "creality_base_0.6", + "creawsome_base_0.8": "creality_base_0.8", + "creawsome_base_1.0": "creality_base_1.0", + "creawsome_cr10_0.2": "creality_cr10_0.2", + "creawsome_cr10_0.3": "creality_cr10_0.3", + "creawsome_cr10_0.4": "creality_cr10_0.4", + "creawsome_cr10_0.5": "creality_cr10_0.5", + "creawsome_cr10_0.6": "creality_cr10_0.6", + "creawsome_cr10_0.8": "creality_cr10_0.8", + "creawsome_cr10_1.0": "creality_cr10_1.0", + "creawsome_cr10mini_0.2": "creality_cr10mini_0.2", + "creawsome_cr10mini_0.3": "creality_cr10mini_0.3", + "creawsome_cr10mini_0.4": "creality_cr10mini_0.4", + "creawsome_cr10mini_0.5": "creality_cr10mini_0.5", + "creawsome_cr10mini_0.6": "creality_cr10mini_0.6", + "creawsome_cr10mini_0.8": "creality_cr10mini_0.8", + "creawsome_cr10mini_1.0": "creality_cr10mini_1.0", + "creawsome_cr10s4_0.2": "creality_cr10s4_0.2", + "creawsome_cr10s4_0.3": "creality_cr10s4_0.3", + "creawsome_cr10s4_0.4": "creality_cr10s4_0.4", + "creawsome_cr10s4_0.5": "creality_cr10s4_0.5", + "creawsome_cr10s4_0.6": "creality_cr10s4_0.6", + "creawsome_cr10s4_0.8": "creality_cr10s4_0.8", + "creawsome_cr10s4_1.0": "creality_cr10s4_1.0", + "creawsome_cr10s5_0.2": "creality_cr10s5_0.2", + "creawsome_cr10s5_0.3": "creality_cr10s5_0.3", + "creawsome_cr10s5_0.4": "creality_cr10s5_0.4", + "creawsome_cr10s5_0.5": "creality_cr10s5_0.5", + "creawsome_cr10s5_0.6": "creality_cr10s5_0.6", + "creawsome_cr10s5_0.8": "creality_cr10s5_0.8", + "creawsome_cr10s5_1.0": "creality_cr10s5_1.0", + "creawsome_cr10s_0.2": "creality_cr10s_0.2", + "creawsome_cr10s_0.3": "creality_cr10s_0.3", + "creawsome_cr10s_0.4": "creality_cr10s_0.4", + "creawsome_cr10s_0.5": "creality_cr10s_0.5", + "creawsome_cr10s_0.6": "creality_cr10s_0.6", + "creawsome_cr10s_0.8": "creality_cr10s_0.8", + "creawsome_cr10s_1.0": "creality_cr10s_1.0", + "creawsome_cr10spro_0.2": "creality_cr10spro_0.2", + "creawsome_cr10spro_0.3": "creality_cr10spro_0.3", + "creawsome_cr10spro_0.4": "creality_cr10spro_0.4", + "creawsome_cr10spro_0.5": "creality_cr10spro_0.5", + "creawsome_cr10spro_0.6": "creality_cr10spro_0.6", + "creawsome_cr10spro_0.8": "creality_cr10spro_0.8", + "creawsome_cr10spro_1.0": "creality_cr10spro_1.0", + "creawsome_cr20_0.2": "creality_cr20_0.2", + "creawsome_cr20_0.3": "creality_cr20_0.3", + "creawsome_cr20_0.4": "creality_cr20_0.4", + "creawsome_cr20_0.5": "creality_cr20_0.5", + "creawsome_cr20_0.6": "creality_cr20_0.6", + "creawsome_cr20_0.8": "creality_cr20_0.8", + "creawsome_cr20_1.0": "creality_cr20_1.0", + "creawsome_cr20pro_0.2": "creality_cr20pro_0.2", + "creawsome_cr20pro_0.3": "creality_cr20pro_0.3", + "creawsome_cr20pro_0.4": "creality_cr20pro_0.4", + "creawsome_cr20pro_0.5": "creality_cr20pro_0.5", + "creawsome_cr20pro_0.6": "creality_cr20pro_0.6", + "creawsome_cr20pro_0.8": "creality_cr20pro_0.8", + "creawsome_cr20pro_1.0": "creality_cr20pro_1.0", + "creawsome_ender2_0.2": "creality_ender2_0.2", + "creawsome_ender2_0.3": "creality_ender2_0.3", + "creawsome_ender2_0.4": "creality_ender2_0.4", + "creawsome_ender2_0.5": "creality_ender2_0.5", + "creawsome_ender2_0.6": "creality_ender2_0.6", + "creawsome_ender2_0.8": "creality_ender2_0.8", + "creawsome_ender2_1.0": "creality_ender2_1.0", + "creawsome_ender3_0.2": "creality_ender3_0.2", + "creawsome_ender3_0.3": "creality_ender3_0.3", + "creawsome_ender3_0.4": "creality_ender3_0.4", + "creawsome_ender3_0.5": "creality_ender3_0.5", + "creawsome_ender3_0.6": "creality_ender3_0.6", + "creawsome_ender3_0.8": "creality_ender3_0.8", + "creawsome_ender3_1.0": "creality_ender3_1.0", + "creawsome_ender4_0.2": "creality_ender4_0.2", + "creawsome_ender4_0.3": "creality_ender4_0.3", + "creawsome_ender4_0.4": "creality_ender4_0.4", + "creawsome_ender4_0.5": "creality_ender4_0.5", + "creawsome_ender4_0.6": "creality_ender4_0.6", + "creawsome_ender4_0.8": "creality_ender4_0.8", + "creawsome_ender4_1.0": "creality_ender4_1.0", + "creawsome_ender5_0.2": "creality_ender5_0.2", + "creawsome_ender5_0.3": "creality_ender5_0.3", + "creawsome_ender5_0.4": "creality_ender5_0.4", + "creawsome_ender5_0.5": "creality_ender5_0.5", + "creawsome_ender5_0.6": "creality_ender5_0.6", + "creawsome_ender5_0.8": "creality_ender5_0.8", + "creawsome_ender5_1.0": "creality_ender5_1.0", + + # Upgrade for people who had the original Creality profiles from 4.1 and earlier. + "creality_cr10_extruder_0": "creality_base_extruder_0", + "creality_cr10s4_extruder_0": "creality_base_extruder_0", + "creality_cr10s5_extruder_0": "creality_base_extruder_0", + "creality_ender3_extruder_0": "creality_base_extruder_0" +} + +# For legacy Creality printers, select the correct quality profile depending on the material. +_creality_quality_per_material = { + # Since legacy Creality printers didn't have different variants, we always pick the 0.4mm variant. + "generic_abs_175": { + "high": "base_0.4_ABS_super", + "normal": "base_0.4_ABS_super", + "fast": "base_0.4_ABS_super", + "draft": "base_0.4_ABS_standard", + "extra_fast": "base_0.4_ABS_low", + "coarse": "base_0.4_ABS_low", + "extra_coarse": "base_0.4_ABS_low" + }, + "generic_petg_175": { + "high": "base_0.4_PETG_super", + "normal": "base_0.4_PETG_super", + "fast": "base_0.4_PETG_super", + "draft": "base_0.4_PETG_standard", + "extra_fast": "base_0.4_PETG_low", + "coarse": "base_0.4_PETG_low", + "extra_coarse": "base_0.4_PETG_low" + }, + "generic_pla_175": { + "high": "base_0.4_PLA_super", + "normal": "base_0.4_PLA_super", + "fast": "base_0.4_PLA_super", + "draft": "base_0.4_PLA_standard", + "extra_fast": "base_0.4_PLA_low", + "coarse": "base_0.4_PLA_low", + "extra_coarse": "base_0.4_PLA_low" + }, + "generic_tpu_175": { + "high": "base_0.4_TPU_super", + "normal": "base_0.4_TPU_super", + "fast": "base_0.4_TPU_super", + "draft": "base_0.4_TPU_standard", + "extra_fast": "base_0.4_TPU_standard", + "coarse": "base_0.4_TPU_standard", + "extra_coarse": "base_0.4_TPU_standard" + }, + "empty_material": { # For the global stack. + "high": "base_global_super", + "normal": "base_global_super", + "fast": "base_global_super", + "draft": "base_global_standard", + "extra_fast": "base_global_low", + "coarse": "base_global_low", + "extra_coarse": "base_global_low" + } +} + +# Default variant to select for legacy Creality printers, now that we have variants. +_default_variants = { + "creality_cr10_extruder_0": "creality_cr10_0.4", + "creality_cr10s4_extruder_0": "creality_cr10s4_0.4", + "creality_cr10s5_extruder_0": "creality_cr10s5_0.4", + "creality_ender3_extruder_0": "creality_ender3_0.4" +} + +# Whether the quality changes profile belongs to one of the upgraded printers can only be recognised by how they start. +# If they are, they must use the creality base definition so that they still belong to those printers. +_quality_changes_to_creality_base = { + "creality_cr10_extruder_0", + "creality_cr10s4_extruder_0", + "creality_cr10s5_extruder_0", + "creality_ender3_extruder_0", + "creality_cr10", + "creality_cr10s", + "creality_cr10s4", + "creality_cr10s5", + "creality_ender3", +} +_creality_limited_quality_type = { + "high": "super", + "normal": "super", + "fast": "super", + "draft": "draft", + "extra_fast": "draft", + "coarse": "draft", + "extra_coarse": "draft" +} + +## Upgrades configurations from the state they were in at version 4.1 to the +# state they should be in at version 4.2. +class VersionUpgrade41to42(VersionUpgrade): + ## Gets the version number from a CFG file in Uranium's 4.1 format. + # + # Since the format may change, this is implemented for the 4.1 format only + # and needs to be included in the version upgrade system rather than + # globally in Uranium. + # + # \param serialised The serialised form of a CFG file. + # \return The version number stored in the CFG file. + # \raises ValueError The format of the version number in the file is + # incorrect. + # \raises KeyError The format of the file is incorrect. + def getCfgVersion(self, serialised: 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 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) + parser.read_string(serialized) + + # Update version number. + parser["metadata"]["setting_version"] = "8" + + # Certain instance containers (such as definition changes) reference to a certain definition container + # Since a number of those changed name, we also need to update those. + old_definition = parser["general"]["definition"] + if old_definition in _renamed_profiles: + parser["general"]["definition"] = _renamed_profiles[old_definition] + + # Rename settings. + if "values" in parser: + for old_name, new_name in _renamed_settings.items(): + if old_name in parser["values"]: + parser["values"][new_name] = parser["values"][old_name] + del parser["values"][old_name] + # Remove settings. + for key in _removed_settings: + if key in parser["values"]: + del parser["values"][key] + + # For quality-changes profiles made for Creality printers, change the definition to the creality_base and make sure that the quality is something we have a profile for. + if parser["metadata"].get("type", "") == "quality_changes": + for possible_printer in _quality_changes_to_creality_base: + if os.path.basename(filename).startswith(possible_printer + "_"): + parser["general"]["definition"] = "creality_base" + parser["metadata"]["quality_type"] = _creality_limited_quality_type.get(parser["metadata"]["quality_type"], "draft") + break + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + ## 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"] = "8" + + # Renamed settings. + if "visible_settings" in parser["general"]: + visible_settings = parser["general"]["visible_settings"] + visible_setting_set = set(visible_settings.split(";")) + for old_name, new_name in _renamed_settings.items(): + if old_name in visible_setting_set: + visible_setting_set.remove(old_name) + visible_setting_set.add(new_name) + for removed_key in _removed_settings: + if removed_key in visible_setting_set: + visible_setting_set.remove(removed_key) + parser["general"]["visible_settings"] = ";".join(visible_setting_set) + + 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. + parser["metadata"]["setting_version"] = "8" + + # Change renamed profiles. + if "containers" in parser: + # For legacy Creality printers, change the variant to 0.4. + definition_id = parser["containers"]["6"] + if parser["metadata"].get("type", "machine") == "extruder_train": + if parser["containers"]["4"] == "empty_variant": # Necessary for people entering from CreawsomeMod who already had a variant. + if definition_id in _default_variants: + parser["containers"]["4"] = _default_variants[definition_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"]["4"] = "creality_cr10s_0.4" + + # Also change the quality to go along with it. + 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] + + 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"]) + for position, profile_id in stack_copy.items(): + if profile_id in _renamed_profiles: + parser["containers"][position] = _renamed_profiles[profile_id] + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] diff --git a/plugins/VersionUpgrade/VersionUpgrade41to42/__init__.py b/plugins/VersionUpgrade/VersionUpgrade41to42/__init__.py new file mode 100644 index 0000000000..8fe718ca83 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade41to42/__init__.py @@ -0,0 +1,59 @@ +# 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 VersionUpgrade41to42 + +if TYPE_CHECKING: + from UM.Application import Application + +upgrade = VersionUpgrade41to42.VersionUpgrade41to42() + +def getMetaData() -> Dict[str, Any]: + return { + "version_upgrade": { + # From To Upgrade function + ("preferences", 6000007): ("preferences", 6000008, upgrade.upgradePreferences), + ("machine_stack", 4000007): ("machine_stack", 4000008, upgrade.upgradeStack), + ("extruder_train", 4000007): ("extruder_train", 4000008, upgrade.upgradeStack), + ("definition_changes", 4000007): ("definition_changes", 4000008, upgrade.upgradeInstanceContainer), + ("quality_changes", 4000007): ("quality_changes", 4000008, upgrade.upgradeInstanceContainer), + ("quality", 4000007): ("quality", 4000008, upgrade.upgradeInstanceContainer), + ("user", 4000007): ("user", 4000008, 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/VersionUpgrade41to42/plugin.json b/plugins/VersionUpgrade/VersionUpgrade41to42/plugin.json new file mode 100644 index 0000000000..506000aae9 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade41to42/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Version Upgrade 4.1 to 4.2", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Upgrades configurations from Cura 4.1 to Cura 4.2.", + "api": "7.0", + "i18n-catalog": "cura" +} diff --git a/plugins/VersionUpgrade/VersionUpgrade42to43/VersionUpgrade42to43.py b/plugins/VersionUpgrade/VersionUpgrade42to43/VersionUpgrade42to43.py new file mode 100644 index 0000000000..c15f1e0468 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade42to43/VersionUpgrade42to43.py @@ -0,0 +1,160 @@ +import configparser +import io +from typing import Dict, Tuple, List + +from UM.VersionUpgrade import VersionUpgrade + +_renamed_profiles = {"generic_pla_0.4_coarse": "jbo_generic_pla_0.4_coarse", + "generic_pla_0.4_fine": "jbo_generic_pla_fine", + "generic_pla_0.4_medium": "jbo_generic_pla_medium", + "generic_pla_0.4_ultrafine": "jbo_generic_pla_ultrafine", + + "generic_petg_0.4_coarse": "jbo_generic_petg_0.4_coarse", + "generic_petg_0.4_fine": "jbo_generic_petg_fine", + "generic_petg_0.4_medium": "jbo_generic_petg_medium", + } + +# - The variant "imade3d jellybox 0.4 mm 2-fans" for machine definition "imade3d_jellybox" +# is now "0.4 mm" for machine definition "imade3d jellybox_2". +# - Materials "imade3d_petg_green" and "imade3d_petg_pink" are now "imade3d_petg_175". +# - Materials "imade3d_pla_green" and "imade3d_pla_pink" are now "imade3d_petg_175". +# +# Note: Theoretically, the old material profiles with "_2-fans" at the end should be updated to: +# - machine definition: imade3d_jellybox_2 +# - variant: 0.4 mm (for jellybox 2) +# - material: (as an example) imade3d_petg_175_imade3d_jellybox_2_0.4_mm +# +# But this involves changing the definition of the global stack and the extruder stacks, which can cause more trouble +# than what we can fix. So, here, we update all material variants, regardless of having "_2-fans" at the end or not, to +# jellybox_0.4_mm. +# +_renamed_material_profiles = { # PETG + "imade3d_petg_green": "imade3d_petg_175", + "imade3d_petg_green_imade3d_jellybox": "imade3d_petg_175_imade3d_jellybox", + "imade3d_petg_green_imade3d_jellybox_0.4_mm": "imade3d_petg_175_imade3d_jellybox_0.4_mm", + "imade3d_petg_green_imade3d_jellybox_0.4_mm_2-fans": "imade3d_petg_175_imade3d_jellybox_0.4_mm", + "imade3d_petg_pink": "imade3d_petg_175", + "imade3d_petg_pink_imade3d_jellybox": "imade3d_petg_175_imade3d_jellybox", + "imade3d_petg_pink_imade3d_jellybox_0.4_mm": "imade3d_petg_175_imade3d_jellybox_0.4_mm", + "imade3d_petg_pink_imade3d_jellybox_0.4_mm_2-fans": "imade3d_petg_175_imade3d_jellybox_0.4_mm", + # PLA + "imade3d_pla_green": "imade3d_pla_175", + "imade3d_pla_green_imade3d_jellybox": "imade3d_pla_175_imade3d_jellybox", + "imade3d_pla_green_imade3d_jellybox_0.4_mm": "imade3d_pla_175_imade3d_jellybox_0.4_mm", + "imade3d_pla_green_imade3d_jellybox_0.4_mm_2-fans": "imade3d_pla_175_imade3d_jellybox_0.4_mm", + "imade3d_pla_pink": "imade3d_pla_175", + "imade3d_pla_pink_imade3d_jellybox": "imade3d_pla_175_imade3d_jellybox", + "imade3d_pla_pink_imade3d_jellybox_0.4_mm": "imade3d_pla_175_imade3d_jellybox_0.4_mm", + "imade3d_pla_pink_imade3d_jellybox_0.4_mm_2-fans": "imade3d_pla_175_imade3d_jellybox_0.4_mm", + } + +_removed_settings = { + "start_layers_at_same_position" +} + +_renamed_settings = { + "support_infill_angle": "support_infill_angles" +} # type: Dict[str, str] + +## Upgrades configurations from the state they were in at version 4.2 to the +# state they should be in at version 4.3. +class VersionUpgrade42to43(VersionUpgrade): + ## Gets the version number from a CFG file in Uranium's 4.2 format. + # + # Since the format may change, this is implemented for the 4.2 format only + # and needs to be included in the version upgrade system rather than + # globally in Uranium. + # + # \param serialised The serialised form of a CFG file. + # \return The version number stored in the CFG file. + # \raises ValueError The format of the version number in the file is + # incorrect. + # \raises KeyError The format of the file is incorrect. + def getCfgVersion(self, serialised: 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 + + def upgradePreferences(self, serialized: str, filename: str): + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + if "camera_perspective_mode" in parser["general"] and parser["general"]["camera_perspective_mode"] == "orthogonal": + parser["general"]["camera_perspective_mode"] = "orthographic" + + # Fix renamed settings for visibility + if "visible_settings" in parser["general"]: + all_setting_keys = parser["general"]["visible_settings"].strip().split(";") + if all_setting_keys: + for idx, key in enumerate(all_setting_keys): + if key in _renamed_settings: + all_setting_keys[idx] = _renamed_settings[key] + parser["general"]["visible_settings"] = ";".join(all_setting_keys) + + parser["metadata"]["setting_version"] = "9" + + 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) + parser.read_string(serialized) + + # Update version number. + parser["metadata"]["setting_version"] = "9" + + if "values" in parser: + for old_name, new_name in _renamed_settings.items(): + if old_name in parser["values"]: + parser["values"][new_name] = parser["values"][old_name] + del parser["values"][old_name] + for key in _removed_settings: + if key in parser["values"]: + del parser["values"][key] + + if "support_infill_angles" in parser["values"]: + old_value = float(parser["values"]["support_infill_angles"]) + new_value = [int(round(old_value))] + parser["values"]["support_infill_angles"] = str(new_value) + + 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. + parser["metadata"]["setting_version"] = "9" + # Handle changes for the imade3d jellybox. The machine was split up into parts (eg; a 2 fan version and a single + # fan version. Perviously it used variants for this. The only upgrade we can do here is strip that variant. + # This is because we only upgrade per stack (and to fully do these changes, we'd need to switch out something + # in the global container based on changes made to the extruder stack) + if parser["containers"]["6"] == "imade3d_jellybox_extruder_0": + quality_id = parser["containers"]["2"] + if quality_id.endswith("_2-fans"): + parser["containers"]["2"] = quality_id.replace("_2-fans", "") + + if parser["containers"]["2"] in _renamed_profiles: + parser["containers"]["2"] = _renamed_profiles[parser["containers"]["2"]] + + material_id = parser["containers"]["3"] + if material_id in _renamed_material_profiles: + parser["containers"]["3"] = _renamed_material_profiles[material_id] + variant_id = parser["containers"]["4"] + + if variant_id.endswith("_2-fans"): + parser["containers"]["4"] = variant_id.replace("_2-fans", "") + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] diff --git a/plugins/VersionUpgrade/VersionUpgrade42to43/__init__.py b/plugins/VersionUpgrade/VersionUpgrade42to43/__init__.py new file mode 100644 index 0000000000..7400bbb989 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade42to43/__init__.py @@ -0,0 +1,59 @@ +# 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 VersionUpgrade42to43 + +if TYPE_CHECKING: + from UM.Application import Application + +upgrade = VersionUpgrade42to43.VersionUpgrade42to43() + +def getMetaData() -> Dict[str, Any]: + return { + "version_upgrade": { + # From To Upgrade function + ("preferences", 6000008): ("preferences", 6000009, upgrade.upgradePreferences), + ("machine_stack", 4000008): ("machine_stack", 4000009, upgrade.upgradeStack), + ("extruder_train", 4000008): ("extruder_train", 4000009, upgrade.upgradeStack), + ("definition_changes", 4000008): ("definition_changes", 4000009, upgrade.upgradeInstanceContainer), + ("quality_changes", 4000008): ("quality_changes", 4000009, upgrade.upgradeInstanceContainer), + ("quality", 4000008): ("quality", 4000009, upgrade.upgradeInstanceContainer), + ("user", 4000008): ("user", 4000009, 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 } \ No newline at end of file diff --git a/plugins/VersionUpgrade/VersionUpgrade42to43/plugin.json b/plugins/VersionUpgrade/VersionUpgrade42to43/plugin.json new file mode 100644 index 0000000000..8a5e838668 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade42to43/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Version Upgrade 4.2 to 4.3", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Upgrades configurations from Cura 4.2 to Cura 4.3.", + "api": "7.0", + "i18n-catalog": "cura" +} diff --git a/plugins/VersionUpgrade/VersionUpgrade43to44/VersionUpgrade43to44.py b/plugins/VersionUpgrade/VersionUpgrade43to44/VersionUpgrade43to44.py new file mode 100644 index 0000000000..e8eefb1bb0 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade43to44/VersionUpgrade43to44.py @@ -0,0 +1,115 @@ +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", + "hms434_global_Ultra_Coarse_Quality": "hms434_global_Normal_Quality", + # HMS434 "0.25", "0.6", "1.2", and "1.5" nozzles are removed. + "hms434_0.25tpnozzle": "hms434_0.4tpnozzle", + "hms434_0.6tpnozzle": "hms434_0.4tpnozzle", + "hms434_1.2tpnozzle": "hms434_0.4tpnozzle", + "hms434_1.5tpnozzle": "hms434_0.4tpnozzle", +} + + +class VersionUpgrade43to44(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"] = "10" + + 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) + 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]" + + 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"] = "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: + parser["containers"][key] = _renamed_container_id_map[value] + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] diff --git a/plugins/VersionUpgrade/VersionUpgrade43to44/__init__.py b/plugins/VersionUpgrade/VersionUpgrade43to44/__init__.py new file mode 100644 index 0000000000..506ec6c03d --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade43to44/__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 VersionUpgrade43to44 + + +if TYPE_CHECKING: + from UM.Application import Application + +upgrade = VersionUpgrade43to44.VersionUpgrade43to44() + + +def getMetaData() -> Dict[str, Any]: + return { + "version_upgrade": { + # From To Upgrade function + ("preferences", 6000009): ("preferences", 6000010, upgrade.upgradePreferences), + ("machine_stack", 4000009): ("machine_stack", 4000010, upgrade.upgradeStack), + ("extruder_train", 4000009): ("extruder_train", 4000010, upgrade.upgradeStack), + ("definition_changes", 4000009): ("definition_changes", 4000010, upgrade.upgradeInstanceContainer), + ("quality_changes", 4000009): ("quality_changes", 4000010, upgrade.upgradeInstanceContainer), + ("quality", 4000009): ("quality", 4000010, upgrade.upgradeInstanceContainer), + ("user", 4000009): ("user", 4000010, 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/VersionUpgrade43to44/plugin.json b/plugins/VersionUpgrade/VersionUpgrade43to44/plugin.json new file mode 100644 index 0000000000..37575396e3 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade43to44/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Version Upgrade 4.3 to 4.4", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Upgrades configurations from Cura 4.3 to Cura 4.4.", + "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/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 f057585cb5..093638d594 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -6,7 +6,7 @@ import io import json #To parse the product-to-id mapping file. import os.path #To find the product-to-id mapping. import sys -from typing import Any, Dict, List, Optional, Tuple, cast, Set +from typing import Any, Dict, List, Optional, Tuple, cast, Set, Union import xml.etree.ElementTree as ET from UM.Resources import Resources @@ -17,9 +17,13 @@ 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 -from .XmlMaterialValidator import XmlMaterialValidator +try: + from .XmlMaterialValidator import XmlMaterialValidator +except (ImportError, SystemError): + import XmlMaterialValidator # type: ignore # This fixes the tests not being able to import. ## Handles serializing and deserializing material containers from an XML file @@ -40,11 +44,11 @@ class XmlMaterialProfile(InstanceContainer): # # \param xml_version: The version number found in an XML file. # \return The corresponding setting_version. - @classmethod - def xmlVersionToSettingVersion(cls, xml_version: str) -> int: + @staticmethod + def xmlVersionToSettingVersion(xml_version: str) -> int: if xml_version == "1.3": return CuraApplication.SettingVersion - return 0 #Older than 1.3. + return 0 # Older than 1.3. def getInheritedFiles(self): return self._inherited_files @@ -63,28 +67,28 @@ class XmlMaterialProfile(InstanceContainer): Logger.log("w", "Can't change metadata {key} of material {material_id} because it's read-only.".format(key = key, material_id = self.getId())) return - # Prevent recursion - if not apply_to_all: - super().setMetaDataEntry(key, value) - return + # Some metadata such as diameter should also be instantiated to be a setting. Go though all values for the + # "properties" field and apply the new values to SettingInstances as well. + new_setting_values_dict = {} + if key == "properties": + for k, v in value.items(): + if k in self.__material_properties_setting_map: + new_setting_values_dict[self.__material_properties_setting_map[k]] = v - # 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) - 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) + 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")) - # 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 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) ## Overridden from InstanceContainer, similar to setMetaDataEntry. # without this function the setName would only set the name of the specific nozzle / material / machine combination container @@ -174,13 +178,16 @@ class XmlMaterialProfile(InstanceContainer): ## End Name Block for key, value in metadata.items(): - builder.start(key) # type: ignore + key_to_use = key + if key in self._metadata_tags_that_have_cura_namespace: + key_to_use = "cura:" + key_to_use + builder.start(key_to_use) # type: ignore if value is not None: #Nones get handled well by the builder. #Otherwise the builder always expects a string. #Deserialize expects the stringified version. value = str(value) builder.data(value) - builder.end(key) + builder.end(key_to_use) builder.end("metadata") ## End Metadata Block @@ -203,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) @@ -223,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() @@ -262,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}) @@ -326,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") @@ -390,7 +394,8 @@ class XmlMaterialProfile(InstanceContainer): self._combineElement(self._expandMachinesXML(result), self._expandMachinesXML(second)) return result - def _createKey(self, element): + @staticmethod + def _createKey(element): key = element.tag.split("}")[-1] if "key" in element.attrib: key += " key:" + element.attrib["key"] @@ -406,15 +411,15 @@ class XmlMaterialProfile(InstanceContainer): # Recursively merges XML elements. Updates either the text or children if another element is found in first. # If it does not exist, copies it from second. - def _combineElement(self, first, second): + @staticmethod + def _combineElement(first, second): # Create a mapping from tag name to element. - mapping = {} for element in first: - key = self._createKey(element) + key = XmlMaterialProfile._createKey(element) mapping[key] = element for element in second: - key = self._createKey(element) + key = XmlMaterialProfile._createKey(element) if len(element): # Check if element has children. try: if "setting" in element.tag and not "settings" in element.tag: @@ -424,7 +429,7 @@ class XmlMaterialProfile(InstanceContainer): for child in element: mapping[key].append(child) else: - self._combineElement(mapping[key], element) # Multiple elements, handle those. + XmlMaterialProfile._combineElement(mapping[key], element) # Multiple elements, handle those. except KeyError: mapping[key] = element first.append(element) @@ -676,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 @@ -709,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) @@ -737,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) @@ -751,61 +722,6 @@ class XmlMaterialProfile(InstanceContainer): if is_new_material: 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 @@ -814,9 +730,9 @@ class XmlMaterialProfile(InstanceContainer): ContainerRegistry.getInstance().addContainer(container_to_add) @classmethod - def _getSettingsDictForNode(cls, node) -> Tuple[dict, dict]: - node_mapped_settings_dict = dict() - node_unmapped_settings_dict = dict() + def _getSettingsDictForNode(cls, node) -> Tuple[Dict[str, Any], Dict[str, Any]]: + node_mapped_settings_dict = dict() # type: Dict[str, Any] + node_unmapped_settings_dict = dict() # type: Dict[str, Any] # Fetch settings in the "um" namespace um_settings = node.iterfind("./um:setting", cls.__namespaces) @@ -950,7 +866,7 @@ class XmlMaterialProfile(InstanceContainer): machine_compatibility = cls._parseCompatibleValue(entry.text) for identifier in machine.iterfind("./um:machine_identifier", cls.__namespaces): - machine_id_list = product_id_map.get(identifier.get("product"), []) + machine_id_list = product_id_map.get(identifier.get("product", ""), []) if not machine_id_list: machine_id_list = cls.getPossibleDefinitionIDsFromName(identifier.get("product")) @@ -982,7 +898,7 @@ class XmlMaterialProfile(InstanceContainer): result_metadata.append(new_material_metadata) buildplates = machine.iterfind("./um:buildplate", cls.__namespaces) - buildplate_map = {} # type: Dict[str, Dict[str, bool]] + buildplate_map = {} # type: Dict[str, Dict[str, bool]] buildplate_map["buildplate_compatible"] = {} buildplate_map["buildplate_recommended"] = {} for buildplate in buildplates: @@ -1111,8 +1027,8 @@ class XmlMaterialProfile(InstanceContainer): builder.data(data) builder.end(tag_name) - @classmethod - def _profile_name(cls, material_name, color_name): + @staticmethod + def _profile_name(material_name, color_name): if material_name is None: return "Unknown Material" if color_name != "Generic": @@ -1120,8 +1036,8 @@ class XmlMaterialProfile(InstanceContainer): else: return material_name - @classmethod - def getPossibleDefinitionIDsFromName(cls, name): + @staticmethod + def getPossibleDefinitionIDsFromName(name): name_parts = name.lower().split(" ") merged_name_parts = [] for part in name_parts: @@ -1159,14 +1075,16 @@ class XmlMaterialProfile(InstanceContainer): return product_to_id_map ## Parse the value of the "material compatible" property. - @classmethod - def _parseCompatibleValue(cls, value: str): + @staticmethod + def _parseCompatibleValue(value: str): return value in {"yes", "unknown"} ## Small string representation for debugging. def __str__(self): return "".format(my_id = self.getId(), name = self.getName(), base_file = self.getMetaDataEntry("base_file")) + _metadata_tags_that_have_cura_namespace = {"pva_compatible", "breakaway_compatible"} + # Map XML file setting names to internal names __material_settings_setting_map = { "print temperature": "default_material_print_temperature", @@ -1180,7 +1098,14 @@ class XmlMaterialProfile(InstanceContainer): "surface energy": "material_surface_energy", "shrinkage percentage": "material_shrinkage_percentage", "build volume temperature": "build_volume_temperature", - } + "anti ooze retract position": "material_anti_ooze_retracted_position", + "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 position": "material_break_retracted_position", + "break speed": "material_break_speed", + "break temperature": "material_break_temperature" + } # type: Dict[str, str] __unmapped_settings = [ "hardware compatible", "hardware recommended" 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/plugins/XmlMaterialProfile/product_to_id.json b/plugins/XmlMaterialProfile/product_to_id.json index 6b78d3fe64..a48eb20a18 100644 --- a/plugins/XmlMaterialProfile/product_to_id.json +++ b/plugins/XmlMaterialProfile/product_to_id.json @@ -6,6 +6,7 @@ "Ultimaker 2+": "ultimaker2_plus", "Ultimaker 3": "ultimaker3", "Ultimaker 3 Extended": "ultimaker3_extended", + "Ultimaker S3": "ultimaker_s3", "Ultimaker S5": "ultimaker_s5", "Ultimaker Original": "ultimaker_original", "Ultimaker Original+": "ultimaker_original_plus", diff --git a/plugins/XmlMaterialProfile/tests/TestXmlMaterialProfile.py b/plugins/XmlMaterialProfile/tests/TestXmlMaterialProfile.py new file mode 100644 index 0000000000..1bc19f773a --- /dev/null +++ b/plugins/XmlMaterialProfile/tests/TestXmlMaterialProfile.py @@ -0,0 +1,79 @@ +from unittest.mock import patch, MagicMock +import sys +import os + +# Prevents error: "PyCapsule_GetPointer called with incorrect name" with conflicting SIP configurations between Arcus and PyQt: Import Arcus and Savitar first! +import Savitar # Dont remove this line +import Arcus # No really. Don't. It needs to be there! +from UM.Qt.QtApplication import QtApplication # QtApplication import is required, even though it isn't used. + +import pytest +import XmlMaterialProfile + +def createXmlMaterialProfile(material_id): + try: + return XmlMaterialProfile.XmlMaterialProfile.XmlMaterialProfile(material_id) + except AttributeError: + return XmlMaterialProfile.XmlMaterialProfile(material_id) + + +def test_setName(): + material_1 = createXmlMaterialProfile("herpderp") + material_2 = createXmlMaterialProfile("OMGZOMG") + + material_1.getMetaData()["base_file"] = "herpderp" + material_2.getMetaData()["base_file"] = "herpderp" + + container_registry = MagicMock() + container_registry.isReadOnly = MagicMock(return_value = False) + container_registry.findInstanceContainers = MagicMock(return_value = [material_1, material_2]) + + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + material_1.setName("beep!") + + assert material_1.getName() == "beep!" + assert material_2.getName() == "beep!" + + +def test_setDirty(): + material_1 = createXmlMaterialProfile("herpderp") + material_2 = createXmlMaterialProfile("OMGZOMG") + + material_1.getMetaData()["base_file"] = "herpderp" + material_2.getMetaData()["base_file"] = "herpderp" + + container_registry = MagicMock() + container_registry.isReadOnly = MagicMock(return_value=False) + container_registry.findContainers = MagicMock(return_value=[material_1, material_2]) + + # Sanity check. Since we did a hacky thing to set the metadata, the container should not be dirty. + # But this test assumes that it works like that, so we need to validate that. + assert not material_1.isDirty() + assert not material_2.isDirty() + + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + material_2.setDirty(True) + + assert material_1.isDirty() + assert material_2.isDirty() + + # Setting the base material dirty does not set it's child as dirty. + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + material_1.setDirty(False) + + assert not material_1.isDirty() + assert material_2.isDirty() + + +def test_serializeNonBaseMaterial(): + material_1 = createXmlMaterialProfile("herpderp") + material_1.getMetaData()["base_file"] = "omgzomg" + + container_registry = MagicMock() + container_registry.isReadOnly = MagicMock(return_value=False) + container_registry.findContainers = MagicMock(return_value=[material_1]) + + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + with pytest.raises(NotImplementedError): + # This material is not a base material, so it can't be serialized! + material_1.serialize() diff --git a/resources/bundled_packages/cura.json b/resources/bundled_packages/cura.json index 259ac05201..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,24 @@ "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", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "TrimeshReader": { + "package_info": { + "package_id": "TrimeshReader", + "package_type": "plugin", + "display_name": "Trimesh Reader", + "description": "Provides support for reading model files.", + "package_version": "1.0.0", + "sdk_version": "7.0.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -482,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", @@ -499,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", @@ -516,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", @@ -533,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", @@ -550,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", @@ -567,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", @@ -584,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", @@ -601,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", @@ -618,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", @@ -635,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", @@ -652,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", @@ -669,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", @@ -686,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", @@ -703,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", @@ -720,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", @@ -737,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", @@ -754,7 +771,58 @@ "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", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "VersionUpgrade41to42": { + "package_info": { + "package_id": "VersionUpgrade41to42", + "package_type": "plugin", + "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": "7.0.0", + "website": "https://ultimaker.com", + "author": { + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "VersionUpgrade42to43": { + "package_info": { + "package_id": "VersionUpgrade42to43", + "package_type": "plugin", + "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": "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", @@ -771,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", @@ -788,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", @@ -805,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", @@ -822,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", @@ -840,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", @@ -858,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", @@ -876,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", @@ -894,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", @@ -912,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", @@ -930,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", @@ -948,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", @@ -966,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", @@ -984,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", @@ -1002,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", @@ -1020,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", @@ -1038,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", @@ -1056,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", @@ -1074,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", @@ -1092,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", @@ -1110,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", @@ -1128,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", @@ -1145,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", @@ -1162,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", @@ -1179,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", @@ -1196,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", @@ -1213,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", @@ -1230,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", @@ -1247,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", @@ -1264,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", @@ -1281,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", @@ -1298,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", @@ -1315,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", @@ -1332,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", @@ -1349,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", @@ -1366,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", @@ -1385,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", @@ -1404,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", @@ -1423,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", @@ -1442,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", @@ -1461,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", @@ -1480,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", @@ -1499,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", @@ -1518,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", @@ -1537,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", @@ -1556,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", @@ -1575,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", @@ -1592,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", @@ -1609,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", @@ -1626,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 effca0926e..1aca2a3844 100644 --- a/resources/definitions/Mark2_for_Ultimaker2.def.json +++ b/resources/definitions/Mark2_for_Ultimaker2.def.json @@ -1,5 +1,4 @@ { - "id": "Mark2_for_Ultimaker2", "version": 2, "name": "Mark2 for Ultimaker2", "inherits": "ultimaker2_plus", @@ -11,9 +10,7 @@ "weight": 0, "has_variants": true, "has_materials": true, - "has_machine_materials": false, "has_machine_quality": false, - "has_variant_materials": false, "file_formats": "text/x-gcode", "icon": "icon_ultimaker.png", "platform": "ultimaker2_platform.obj", @@ -82,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" }, @@ -110,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 }, @@ -145,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": { @@ -161,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" }, @@ -186,7 +172,6 @@ }, "jerk_travel": { - "default_value": 20, "value": "jerk_print if magic_spiralize else 20" }, "jerk_layer_0": { "value": "jerk_topbottom" }, @@ -201,12 +186,6 @@ "extruder_prime_pos_x": { "default_value": 0.0, "enabled": false }, "extruder_prime_pos_y": { "default_value": 0.0, "enabled": false }, "extruder_prime_pos_z": { "default_value": 0.0, "enabled": false }, - "start_layers_at_same_position": - { - "default_value": false, - "enabled": false, - "value": false - }, "layer_start_x": { "default_value": 105.0, @@ -218,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/anycubic_i3_mega.def.json b/resources/definitions/anycubic_i3_mega.def.json index cc9832cf09..18005f0e12 100644 --- a/resources/definitions/anycubic_i3_mega.def.json +++ b/resources/definitions/anycubic_i3_mega.def.json @@ -54,7 +54,7 @@ }, "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 F{speed_travel} ;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 F{speed_travel}\nM117 Printing...\nG5" + "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 F{speed_travel} ;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 F{speed_travel}\nG0 Y20 F{speed_travel}\nM117 Printing...\nG5" }, "machine_end_gcode": { 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 d897a76133..a644185915 100644 --- a/resources/definitions/bibo2_dual.def.json +++ b/resources/definitions/bibo2_dual.def.json @@ -1,11 +1,10 @@ { - "id": "BIBO2 dual", "version": 2, "name": "BIBO2 dual", "inherits": "fdmprinter", "metadata": { "visible": true, - "author": "na", + "author": "unknown", "manufacturer": "BIBO", "category": "Other", "file_formats": "text/x-gcode", @@ -78,14 +77,17 @@ "machine_end_gcode": { "default_value": ";End GCode\nM104 T0 S0 ;extruder heater off\nM104 T1 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91\nG1 Z1 F100 ;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-2 X-20 Y-20 F300 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" }, + "speed_print": { + "default_value": 40 + }, "machine_extruder_count": { "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..e5411027e3 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,8 +83,6 @@ "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" }, diff --git a/resources/definitions/builder_premium_medium.def.json b/resources/definitions/builder_premium_medium.def.json index 5f608ba2a8..1817dfe7db 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,8 +83,6 @@ "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" }, diff --git a/resources/definitions/builder_premium_small.def.json b/resources/definitions/builder_premium_small.def.json index a19773ec05..f126da7752 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,8 +82,6 @@ "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" }, diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index 1d83363684..e7a005682d 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -10,7 +10,6 @@ "has_machine_quality": true, "has_materials": true, - "has_machine_materials": true, "has_variants": true, "variants_name": "Tool", @@ -45,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 new file mode 100644 index 0000000000..7e91fb4989 --- /dev/null +++ b/resources/definitions/creality_base.def.json @@ -0,0 +1,267 @@ +{ + "name": "Creawsome Base Printer", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": false, + "author": "trouch.com", + "manufacturer": "Creality3D", + "file_formats": "text/x-gcode", + "first_start_actions": ["MachineSettingsAction"], + + "machine_extruder_trains": { + "0": "creality_base_extruder_0" + }, + + "has_materials": true, + "has_variants": true, + "has_machine_quality": true, + "variants_name": "Nozzle Size", + + "preferred_variant_name": "0.4mm Nozzle", + "preferred_quality_type": "standard", + "preferred_material": "generic_pla", + "exclude_materials": [ + "Vertex_Delta_ABS", + "Vertex_Delta_PET", + "Vertex_Delta_PLA", + "Vertex_Delta_TPU", + "chromatik_pla", + "dsm_arnitel2045_175", + "dsm_novamid1070_175", + "fabtotum_abs", + "fabtotum_nylon", + "fabtotum_pla", + "fabtotum_tpu", + "fiberlogy_hd_pla", + "filo3d_pla", + "filo3d_pla_green", + "filo3d_pla_red", + "generic_abs", + "generic_bam", + "generic_cffcpe", + "generic_cffpa", + "generic_cpe", + "generic_cpe_plus", + "generic_gffcpe", + "generic_gffpa", + "generic_hips", + "generic_nylon", + "generic_pc", + "generic_petg", + "generic_pla", + "generic_pp", + "generic_pva", + "generic_tough_pla", + "generic_tpu", + "imade3d_petg_green", + "imade3d_petg_pink", + "imade3d_pla_green", + "imade3d_pla_pink", + "innofill_innoflex60_175", + "octofiber_pla", + "polyflex_pla", + "polymax_pla", + "polyplus_pla", + "polywood_pla", + "structur3d_dap100silicone", + "tizyx_abs", + "tizyx_pla", + "tizyx_pla_bois", + "ultimaker_abs_black", + "ultimaker_abs_blue", + "ultimaker_abs_green", + "ultimaker_abs_grey", + "ultimaker_abs_orange", + "ultimaker_abs_pearl-gold", + "ultimaker_abs_red", + "ultimaker_abs_silver-metallic", + "ultimaker_abs_white", + "ultimaker_abs_yellow", + "ultimaker_bam", + "ultimaker_cpe_black", + "ultimaker_cpe_blue", + "ultimaker_cpe_dark-grey", + "ultimaker_cpe_green", + "ultimaker_cpe_light-grey", + "ultimaker_cpe_plus_black", + "ultimaker_cpe_plus_transparent", + "ultimaker_cpe_plus_white", + "ultimaker_cpe_red", + "ultimaker_cpe_transparent", + "ultimaker_cpe_white", + "ultimaker_cpe_yellow", + "ultimaker_nylon_black", + "ultimaker_nylon_transparent", + "ultimaker_pc_black", + "ultimaker_pc_transparent", + "ultimaker_pc_white", + "ultimaker_pla_black", + "ultimaker_pla_blue", + "ultimaker_pla_green", + "ultimaker_pla_magenta", + "ultimaker_pla_orange", + "ultimaker_pla_pearl-white", + "ultimaker_pla_red", + "ultimaker_pla_silver-metallic", + "ultimaker_pla_transparent", + "ultimaker_pla_white", + "ultimaker_pla_yellow", + "ultimaker_pp_transparent", + "ultimaker_pva", + "ultimaker_tough_pla_black", + "ultimaker_tough_pla_green", + "ultimaker_tough_pla_red", + "ultimaker_tough_pla_white", + "ultimaker_tpu_black", + "ultimaker_tpu_blue", + "ultimaker_tpu_red", + "ultimaker_tpu_white", + "verbatim_bvoh_175", + "zyyx_pro_flex", + "zyyx_pro_pla" + ] + }, + "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 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 }, + "machine_max_feedrate_z": { "value": 10 }, + "machine_max_feedrate_e": { "value": 50 }, + + "machine_max_acceleration_x": { "value": 500 }, + "machine_max_acceleration_y": { "value": 500 }, + "machine_max_acceleration_z": { "value": 100 }, + "machine_max_acceleration_e": { "value": 5000 }, + "machine_acceleration": { "value": 500 }, + + "machine_max_jerk_xy": { "value": 10 }, + "machine_max_jerk_z": { "value": 0.4 }, + "machine_max_jerk_e": { "value": 5 }, + + "machine_heated_bed": { "default_value": true }, + + "material_diameter": { "default_value": 1.75 }, + + "acceleration_print": { "value": 500 }, + "acceleration_travel": { "value": 500 }, + "acceleration_travel_layer_0": { "value": "acceleration_travel" }, + "acceleration_roofing": { "enabled": "acceleration_enabled and roofing_layer_count > 0 and top_layers > 0" }, + + "jerk_print": { "value": 8 }, + "jerk_travel": { "value": "jerk_print" }, + "jerk_travel_layer_0": { "value": "jerk_travel" }, + + "acceleration_enabled": { "value": false }, + "jerk_enabled": { "value": false }, + + "speed_print": { "value": 50.0 } , + "speed_infill": { "value": "speed_print" }, + "speed_wall": { "value": "speed_print / 2" }, + "speed_wall_0": { "value": "speed_wall" }, + "speed_wall_x": { "value": "speed_wall" }, + "speed_topbottom": { "value": "speed_print / 2" }, + "speed_roofing": { "value": "speed_topbottom" }, + "speed_travel": { "value": "150.0 if speed_print < 60 else 250.0 if speed_print > 100 else speed_print * 2.5" }, + "speed_layer_0": { "value": 20.0 }, + "speed_print_layer_0": { "value": "speed_layer_0" }, + "speed_travel_layer_0": { "value": "100 if speed_layer_0 < 20 else 150 if speed_layer_0 > 30 else speed_layer_0 * 5" }, + "speed_prime_tower": { "value": "speed_topbottom" }, + "speed_support": { "value": "speed_wall_0" }, + "speed_support_interface": { "value": "speed_topbottom" }, + "speed_z_hop": { "value": 5 }, + + "skirt_brim_speed": { "value": "speed_layer_0" }, + + "line_width": { "value": "machine_nozzle_size" }, + + "optimize_wall_printing_order": { "value": "True" }, + + "material_initial_print_temperature": { "value": "material_print_temperature" }, + "material_final_print_temperature": { "value": "material_print_temperature" }, + "material_flow": { "value": 100 }, + "travel_compensate_overlapping_walls_0_enabled": { "value": "False" }, + + "z_seam_type": { "value": "'back'" }, + "z_seam_corner": { "value": "'z_seam_corner_weighted'" }, + + "infill_sparse_density": { "value": "20" }, + "infill_pattern": { "value": "'lines' if infill_sparse_density > 50 else 'cubic'" }, + "infill_before_walls": { "value": false }, + "infill_overlap": { "value": 30.0 }, + "skin_overlap": { "value": 10.0 }, + "infill_wipe_dist": { "value": 0.0 }, + "wall_0_wipe_dist": { "value": 0.0 }, + + "fill_perimeter_gaps": { "value": "'everywhere'" }, + "fill_outline_gaps": { "value": false }, + "filter_out_tiny_gaps": { "value": false }, + + "retraction_speed": { + "maximum_value_warning": "machine_max_feedrate_e if retraction_enable else float('inf')", + "maximum_value": 200 + }, + "retraction_retract_speed": { + "maximum_value_warning": "machine_max_feedrate_e if retraction_enable else float('inf')", + "maximum_value": 200 + }, + "retraction_prime_speed": { + "maximum_value_warning": "machine_max_feedrate_e if retraction_enable else float('inf')", + "maximum_value": 200 + }, + + "retraction_hop_enabled": { "value": "False" }, + "retraction_hop": { "value": 0.2 }, + "retraction_combing": { "value": "'off' if retraction_hop_enabled else 'noskin'" }, + "retraction_combing_max_distance": { "value": 30 }, + "travel_avoid_other_parts": { "value": true }, + "travel_avoid_supports": { "value": true }, + "travel_retract_before_outer_wall": { "value": true }, + + "retraction_enable": { "value": true }, + "retraction_count_max": { "value": 100 }, + "retraction_extrusion_window": { "value": 10 }, + "retraction_min_travel": { "value": 1.5 }, + + "cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" }, + "cool_fan_enabled": { "value": true }, + "cool_min_layer_time": { "value": 10 }, + + "adhesion_type": { "value": "'skirt'" }, + "brim_replaces_support": { "value": false }, + "skirt_gap": { "value": 10.0 }, + "skirt_line_count": { "value": 3 }, + + "adaptive_layer_height_variation": { "value": 0.04 }, + "adaptive_layer_height_variation_step": { "value": 0.04 }, + + "meshfix_maximum_resolution": { "value": "0.05" }, + "meshfix_maximum_travel_resolution": { "value": "meshfix_maximum_resolution" }, + + "support_angle": { "value": "math.floor(math.degrees(math.atan(line_width/2.0/layer_height)))" }, + "support_pattern": { "value": "'zigzag'" }, + "support_infill_rate": { "value": "0 if support_tree_enable else 20" }, + "support_use_towers": { "value": false }, + "support_xy_distance": { "value": "wall_line_width_0 * 2" }, + "support_xy_distance_overhang": { "value": "wall_line_width_0" }, + "support_z_distance": { "value": "layer_height if layer_height >= 0.16 else layer_height*2" }, + "support_xy_overrides_z": { "value": "'xy_overrides_z'" }, + "support_wall_count": { "value": 1 }, + "support_brim_enable": { "value": true }, + "support_brim_width": { "value": 4 }, + + "support_interface_enable": { "value": true }, + "support_interface_height": { "value": "layer_height * 4" }, + "support_interface_density": { "value": 33.333 }, + "support_interface_pattern": { "value": "'grid'" }, + "support_interface_skip_height": { "value": 0.2 }, + "minimum_support_area": { "value": 5 }, + "minimum_interface_area": { "value": 10 }, + "top_bottom_thickness": {"value": "layer_height_0 + layer_height * 3" }, + "wall_thickness": {"value": "line_width * 2" } + + } +} \ No newline at end of file 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 d0bca54b73..0a08c56cc6 100644 --- a/resources/definitions/creality_cr10.def.json +++ b/resources/definitions/creality_cr10.def.json @@ -1,95 +1,32 @@ { "name": "Creality CR-10", "version": 2, - "inherits": "fdmprinter", - "metadata": { - "visible": true, - "author": "Michael Wildermuth", - "manufacturer": "Creality3D", - "file_formats": "text/x-gcode", - "preferred_quality_type": "draft", - "machine_extruder_trains": - { - "0": "creality_cr10_extruder_0" - } - }, + "inherits": "creality_base", "overrides": { - "machine_width": { - "default_value": 300 - }, - "machine_height": { - "default_value": 400 - }, - "machine_depth": { - "default_value": 300 - }, - "machine_head_polygon": { - "default_value": [ - [-30, 34], - [-30, -32], - [30, -32], - [30, 34] + "machine_name": { "default_value": "Creality CR-10" }, + "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] ] }, - "layer_height_0": { - "default_value": 0.2 + "machine_head_with_fans_polygon": { "default_value": [ + [-26, 34], + [-26, -32], + [32, -32], + [32, 34] + ] }, - "top_bottom_thickness": { - "default_value": 0.6 - }, - "top_bottom_pattern_0": { - "default_value": "concentric" - }, - "infill_pattern": { - "value": "'triangles'" - }, - "retraction_enable": { - "default_value": true - }, - "retraction_amount": { - "default_value": 5 - }, - "retraction_speed": { - "default_value": 40 - }, - "cool_min_layer_time": { - "default_value": 10 - }, - "adhesion_type": { - "default_value": "skirt" - }, - "skirt_line_count": { - "default_value": 4 - }, - "skirt_gap": { - "default_value": 5 - }, - "machine_end_gcode": { - "default_value": "G91\nG1 F1800 E-3\nG1 F3000 Z10\nG90\nG28 X0 Y0 ; home x and y axis\nM106 S0 ; turn off cooling fan\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors" - }, - "machine_heated_bed": { - "default_value": true - }, - "gantry_height": { - "value": "30" - }, - "acceleration_enabled": { - "default_value": true - }, - "acceleration_print": { - "default_value": 500 - }, - "acceleration_travel": { - "default_value": 500 - }, - "jerk_enabled": { - "default_value": true - }, - "jerk_print": { - "default_value": 20 - }, - "jerk_travel": { - "default_value": 20 - } + + "gantry_height": { "value": 25 } + + }, + "metadata": { + "quality_definition": "creality_base", + "visible": true } } \ No newline at end of file diff --git a/resources/definitions/creality_cr10max.def.json b/resources/definitions/creality_cr10max.def.json new file mode 100644 index 0000000000..cc7dfa6faf --- /dev/null +++ b/resources/definitions/creality_cr10max.def.json @@ -0,0 +1,33 @@ +{ + "name": "Creality CR-10 Max", + "version": 2, + "inherits": "creality_base", + "overrides": { + "machine_name": { "default_value": "Creality CR-10 Max" }, + "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_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], + [38, -34], + [38, 34] + ] + }, + + "gantry_height": { "value": 30 } + + }, + "metadata": { + "quality_definition": "creality_base", + "visible": true + } +} \ No newline at end of file diff --git a/resources/definitions/creality_cr10mini.def.json b/resources/definitions/creality_cr10mini.def.json new file mode 100644 index 0000000000..bdc0d4406e --- /dev/null +++ b/resources/definitions/creality_cr10mini.def.json @@ -0,0 +1,32 @@ +{ + "name": "Creality CR-10 Mini", + "version": 2, + "inherits": "creality_base", + "overrides": { + "machine_name": { "default_value": "Creality CR-10 Mini" }, + "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], + [32, -32], + [32, 34] + ] + }, + + "gantry_height": { "value": 25 } + + }, + "metadata": { + "quality_definition": "creality_base", + "visible": true + } +} \ No newline at end of file diff --git a/resources/definitions/creality_cr10s.def.json b/resources/definitions/creality_cr10s.def.json index c368269a46..9884b95cb4 100644 --- a/resources/definitions/creality_cr10s.def.json +++ b/resources/definitions/creality_cr10s.def.json @@ -1,5 +1,11 @@ { "name": "Creality CR-10S", "version": 2, - "inherits": "creality_cr10" + "inherits": "creality_cr10", + "overrides": { + "machine_name": { "default_value": "Creality CR-10S" } + }, + "metadata": { + "quality_definition": "creality_base" + } } \ No newline at end of file diff --git a/resources/definitions/creality_cr10s4.def.json b/resources/definitions/creality_cr10s4.def.json index 7145083674..593a526fc3 100644 --- a/resources/definitions/creality_cr10s4.def.json +++ b/resources/definitions/creality_cr10s4.def.json @@ -1,26 +1,32 @@ { - "name": "Creality CR-10 S4", + "name": "Creality CR-10S4", "version": 2, - "inherits": "creality_cr10", - "metadata": { - "visible": true, - "author": "Michael Wildermuth", - "manufacturer": "Creality3D", - "file_formats": "text/x-gcode", - "machine_extruder_trains": - { - "0": "creality_cr10s4_extruder_0" - } - }, + "inherits": "creality_base", "overrides": { - "machine_width": { - "default_value": 400 + "machine_name": { "default_value": "Creality CR-10S4" }, + "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_height": { - "default_value": 400 + "machine_head_with_fans_polygon": { "default_value": [ + [-26, 34], + [-26, -32], + [32, -32], + [32, 34] + ] }, - "machine_depth": { - "default_value": 400 - } + + "gantry_height": { "value": 25 } + + }, + "metadata": { + "quality_definition": "creality_base", + "visible": true } } \ No newline at end of file diff --git a/resources/definitions/creality_cr10s5.def.json b/resources/definitions/creality_cr10s5.def.json index b082894a16..91469deb7f 100644 --- a/resources/definitions/creality_cr10s5.def.json +++ b/resources/definitions/creality_cr10s5.def.json @@ -1,26 +1,32 @@ { - "name": "Creality CR-10 S5", + "name": "Creality CR-10S5", "version": 2, - "inherits": "creality_cr10", - "metadata": { - "visible": true, - "author": "Michael Wildermuth", - "manufacturer": "Creality3D", - "file_formats": "text/x-gcode", - "machine_extruder_trains": - { - "0": "creality_cr10s5_extruder_0" - } - }, + "inherits": "creality_base", "overrides": { - "machine_width": { - "default_value": 500 + "machine_name": { "default_value": "Creality CR-10S5" }, + "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_height": { - "default_value": 500 + "machine_head_with_fans_polygon": { "default_value": [ + [-26, 34], + [-26, -32], + [32, -32], + [32, 34] + ] }, - "machine_depth": { - "default_value": 500 - } + + "gantry_height": { "value": 25 } + + }, + "metadata": { + "quality_definition": "creality_base", + "visible": true } } \ No newline at end of file diff --git a/resources/definitions/creality_cr10spro.def.json b/resources/definitions/creality_cr10spro.def.json new file mode 100644 index 0000000000..86897e711a --- /dev/null +++ b/resources/definitions/creality_cr10spro.def.json @@ -0,0 +1,31 @@ +{ + "name": "Creality CR-10S Pro", + "version": 2, + "inherits": "creality_cr10", + "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], + [38, -34], + [38, 34] + ] + }, + + "gantry_height": { "value": 30 } + + }, + "metadata": { + "quality_definition": "creality_base", + "platform": "creality_cr10spro.stl", + "platform_offset": [ -150, 0, 150] + } +} \ No newline at end of file diff --git a/resources/definitions/creality_cr20.def.json b/resources/definitions/creality_cr20.def.json new file mode 100644 index 0000000000..af027f2452 --- /dev/null +++ b/resources/definitions/creality_cr20.def.json @@ -0,0 +1,32 @@ +{ + "name": "Creality CR-20", + "version": 2, + "inherits": "creality_base", + "overrides": { + "machine_name": { "default_value": "Creality CR-20" }, + "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], + [32, -32], + [32, 34] + ] + }, + + "gantry_height": { "value": 25 } + + }, + "metadata": { + "quality_definition": "creality_base", + "visible": true + } +} \ No newline at end of file diff --git a/resources/definitions/creality_cr20pro.def.json b/resources/definitions/creality_cr20pro.def.json new file mode 100644 index 0000000000..4e676bcb74 --- /dev/null +++ b/resources/definitions/creality_cr20pro.def.json @@ -0,0 +1,13 @@ +{ + "name": "Creality CR-20 Pro", + "version": 2, + "inherits": "creality_cr20", + "overrides": { + "machine_name": { "default_value": "Creality CR-20 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"} + + }, + "metadata": { + "quality_definition": "creality_base" + } +} \ No newline at end of file diff --git a/resources/definitions/creality_ender2.def.json b/resources/definitions/creality_ender2.def.json new file mode 100644 index 0000000000..55b2e88478 --- /dev/null +++ b/resources/definitions/creality_ender2.def.json @@ -0,0 +1,33 @@ +{ + "name": "Creality Ender-2", + "version": 2, + "inherits": "creality_base", + "overrides": { + "machine_name": { "default_value": "Creality Ender-2" }, + "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 Y100.0 Z0.28 F1500.0 E8 ;Draw the first line\nG1 X10.4 Y100.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E15 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\n"}, + "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], + [32, -32], + [32, 34] + ] + }, + + "gantry_height": { "value": 25 } + + }, + "metadata": { + "quality_definition": "creality_base", + "visible": true + } +} \ No newline at end of file diff --git a/resources/definitions/creality_ender3.def.json b/resources/definitions/creality_ender3.def.json old mode 100755 new mode 100644 index 3581af158f..645be52bc8 --- a/resources/definitions/creality_ender3.def.json +++ b/resources/definitions/creality_ender3.def.json @@ -1,96 +1,32 @@ { "name": "Creality Ender-3", "version": 2, - "inherits": "fdmprinter", + "inherits": "creality_base", "metadata": { + "quality_definition": "creality_base", "visible": true, - "author": "Sacha Telgenhof", - "manufacturer": "Creality3D", - "file_formats": "text/x-gcode", - "platform": "creality_ender3_platform.stl", - "preferred_quality_type": "draft", - "machine_extruder_trains": - { - "0": "creality_ender3_extruder_0" - } + "platform": "creality_ender3.stl" }, "overrides": { - "machine_name": { - "default_value": "Creality Ender-3" - }, - "machine_width": { - "default_value": 235 - }, - "machine_height": { - "default_value": 250 - }, - "machine_depth": { - "default_value": 235 - }, - "machine_heated_bed": { - "default_value": true - }, - "gantry_height": { - "value": "30" - }, - "machine_head_polygon": { - "default_value": [ - [-30, 34], - [-30, -32], - [30, -32], - [30, 34] + "machine_name": { "default_value": "Creality Ender-3" }, + "machine_width": { "default_value": 220 }, + "machine_depth": { "default_value": 220 }, + "machine_height": { "default_value": 250 }, + "machine_head_polygon": { "default_value": [ + [-1, 1], + [-1, -1], + [1, -1], + [1, 1] ] }, - "material_diameter": { - "default_value": 1.75 + "machine_head_with_fans_polygon": { "default_value": [ + [-26, 34], + [-26, -32], + [32, -32], + [32, 34] + ] }, - "acceleration_enabled": { - "default_value": true - }, - "acceleration_print": { - "default_value": 500 - }, - "acceleration_travel": { - "value": "acceleration_print" - }, - "jerk_enabled": { - "default_value": true - }, - "jerk_travel": { - "value": "jerk_print" - }, - "machine_max_jerk_z": { - "default_value": 0.3 - }, - "layer_height_0": { - "default_value": 0.2 - }, - "adhesion_type": { - "default_value": "skirt" - }, - "top_bottom_thickness": { - "default_value": 0.6 - }, - "retraction_amount": { - "default_value": 6 - }, - "retraction_speed": { - "default_value": 25 - }, - "cool_min_layer_time": { - "default_value": 10 - }, - "skirt_line_count": { - "default_value": 4 - }, - "skirt_gap": { - "default_value": 5 - }, - "machine_start_gcode": { - "default_value": "; Ender 3 Custom Start G-code\nG28 ; Home all axes\nG92 E0 ; Reset Extruder\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\n; End of custom start GCode" - }, - "machine_end_gcode": { - "default_value": "; Ender 3 Custom End G-code\nG4 ; Wait\nM220 S100 ; Reset Speed factor override percentage to default (100%)\nM221 S100 ; Reset Extrude factor override percentage to default (100%)\nG91 ; Set coordinates to relative\nG1 F1800 E-3 ; Retract filament 3 mm to prevent oozing\nG1 F3000 Z20 ; Move Z Axis up 20 mm to allow filament ooze freely\nG90 ; Set coordinates to absolute\nG1 X0 Y{machine_depth} F1000 ; Move Heat Bed to the front for easy print removal\nM84 ; Disable stepper motors\n; End of custom end GCode" - } + + "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 new file mode 100644 index 0000000000..6962be558e --- /dev/null +++ b/resources/definitions/creality_ender4.def.json @@ -0,0 +1,34 @@ +{ + "name": "Creality Ender-4", + "version": 2, + "inherits": "creality_base", + "overrides": { + "machine_name": { "default_value": "Creality Ender-4" }, + "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], + [32, -32], + [32, 34] + ] + }, + + "gantry_height": { "value": 25 }, + + "speed_print": { "value": 80.0 } + + }, + "metadata": { + "quality_definition": "creality_base", + "visible": true + } +} \ No newline at end of file diff --git a/resources/definitions/creality_ender5.def.json b/resources/definitions/creality_ender5.def.json new file mode 100644 index 0000000000..c1511884ae --- /dev/null +++ b/resources/definitions/creality_ender5.def.json @@ -0,0 +1,35 @@ +{ + "name": "Creality Ender-5", + "version": 2, + "inherits": "creality_base", + "overrides": { + "machine_name": { "default_value": "Creality Ender-5" }, + "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], + [32, -32], + [32, 34] + ] + }, + + "gantry_height": { "value": 25 }, + + "speed_print": { "value": 80.0 } + + }, + "metadata": { + "quality_definition": "creality_base", + "visible": true + } +} \ No newline at end of file diff --git a/resources/definitions/creality_ender5plus.def.json b/resources/definitions/creality_ender5plus.def.json new file mode 100644 index 0000000000..da4e2af635 --- /dev/null +++ b/resources/definitions/creality_ender5plus.def.json @@ -0,0 +1,35 @@ +{ + "name": "Creality Ender-5 Plus", + "version": 2, + "inherits": "creality_base", + "overrides": { + "machine_name": { "default_value": "Creality Ender-5 Plus" }, + "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_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], + [32, -32], + [32, 34] + ] + }, + + "gantry_height": { "value": 25 }, + + "speed_print": { "value": 80.0 } + + }, + "metadata": { + "quality_definition": "creality_base", + "visible": true + } +} \ No newline at end of file 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/cubicon_dual_pro_a30.def.json b/resources/definitions/cubicon_dual_pro_a30.def.json new file mode 100644 index 0000000000..6431c917a5 --- /dev/null +++ b/resources/definitions/cubicon_dual_pro_a30.def.json @@ -0,0 +1,44 @@ +{ + "version": 2, + "name": "Cubicon Dual Pro-A30", + "inherits": "cubicon_common", + "metadata": { + "author": "Cubicon R&D Center", + "manufacturer": "Cubicon", + "visible": true, + "file_formats": "text/x-gcode", + "supports_usb_connection": false, + "machine_extruder_trains": { + "0": "cubicon_dual_pro_a30_extruder_0", + "1": "cubicon_dual_pro_a30_extruder_1" + }, + "platform_offset": [ + 0, + 0, + 0 + ] + }, + "overrides": { + "machine_name": { + "default_value": "Cubicon Dual Pro-A30" + }, + "machine_start_gcode": { + "default_value": "M911 Dual Pro-A30C\nM201 X400 Y400\nM202 X400 Y400\nG28 ; Home\nG1 Z15.0 F6000 ;move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0" + }, + "machine_width": { + "default_value": 300 + }, + "machine_depth": { + "default_value": 300 + }, + "machine_height": { + "default_value": 300 + }, + "material_bed_temp_wait":{ + "default_value": false + }, + "machine_extruder_count": { + "default_value": 2 + } + } +} diff --git a/resources/definitions/cubicon_style_plus_a15.def.json b/resources/definitions/cubicon_style_plus_a15.def.json new file mode 100644 index 0000000000..a55d5aa791 --- /dev/null +++ b/resources/definitions/cubicon_style_plus_a15.def.json @@ -0,0 +1,40 @@ +{ + "version": 2, + "name": "Cubicon Style Plus-A15", + "inherits": "cubicon_common", + "metadata": { + "author": "Cubicon R&D Center", + "manufacturer": "Cubicon", + "visible": true, + "file_formats": "text/x-gcode", + "supports_usb_connection": false, + "machine_extruder_trains": { + "0": "cubicon_style_plus_a15_extruder_0" + }, + "platform_offset": [ + 0, + 0, + 0 + ] + }, + "overrides": { + "machine_name": { + "default_value": "Cubicon Style Plus-A15" + }, + "machine_start_gcode": { + "default_value": "M911 Style Plus-A15\nM201 X400 Y400\nM202 X400 Y400\nG28 ; Home\nG1 Z15.0 F6000 ;move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0" + }, + "machine_width": { + "default_value": 150 + }, + "machine_depth": { + "default_value": 150 + }, + "machine_height": { + "default_value": 150 + }, + "material_bed_temp_wait":{ + "default_value": false + } + } +} 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 95435f659d..ad6a207bb2 100644 --- a/resources/definitions/deltabot.def.json +++ b/resources/definitions/deltabot.def.json @@ -5,7 +5,7 @@ "metadata": { "visible": true, "author": "Ultimaker", - "manufacturer": "Danny Lu", + "manufacturer": "Custom", "file_formats": "text/x-gcode", "platform_offset": [ 0, 0, 0], "machine_extruder_trains": @@ -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 026dfca9ed..ac2ea5abe1 100755 --- a/resources/definitions/deltacomb.def.json +++ b/resources/definitions/deltacomb.def.json @@ -13,7 +13,6 @@ "platform": "deltacomb.stl", "has_machine_quality": true, "has_materials": true, - "has_machine_materials": false, "has_variants": true, "variants_name": "Head", "preferred_variant_name": "E3D 0.40mm", @@ -38,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)" }, @@ -46,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 }, @@ -58,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 5655d0a795..18d73a3531 100644 --- a/resources/definitions/easyarts_ares.def.json +++ b/resources/definitions/easyarts_ares.def.json @@ -5,7 +5,7 @@ "metadata": { "visible": true, "author": "nliaudat", - "manufacturer": "EasyArts (discontinued)", + "manufacturer": "EasyArts", "file_formats": "text/x-gcode", "machine_extruder_trains": { @@ -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 new file mode 100644 index 0000000000..875aea708e --- /dev/null +++ b/resources/definitions/erzay3d.def.json @@ -0,0 +1,81 @@ +{ + "name": "Erzay3D", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Alexander Kirsanov", + "manufacturer": "Robokinetika", + "category": "Other", + "file_formats": "text/x-gcode", + "machine_extruder_trains": + { + "0": "erzay3d_extruder_0" + } + }, + + "overrides": { + "machine_start_gcode" : { "default_value": "G28\nG1 Z15.0 F6000\nG92 E0" }, + "machine_shape": { "default_value": "elliptic"}, + "machine_name": { "default_value": "Erzay3D" }, + "machine_depth": { "default_value": 210 }, + "machine_width": { "default_value": 210 }, + "machine_height": { "default_value": 230 }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, + "machine_center_is_zero": { "default_value": true }, + "machine_extruder_count": { "default_value": 1 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_heated_bed": { "default_value": true }, + "material_bed_temp_wait": { "default_value": true }, + "material_print_temp_wait": { "default_value": true }, + "material_print_temp_prepend": { "default_value": true }, + "machine_buildplate_type": { "default_value": "glass" }, + "machine_nozzle_head_distance": { "default_value": 2.5 }, + "machine_heat_zone_length": { "default_value": 12.5 }, + "machine_max_feedrate_x": { "default_value": 200 }, + "machine_max_feedrate_y": { "default_value": 200 }, + "machine_max_feedrate_z": { "default_value": 200 }, + "machine_max_feedrate_e": { "default_value": 50 }, + "machine_max_acceleration_x": { "default_value": 3000 }, + "machine_max_acceleration_y": { "default_value": 3000 }, + "machine_max_acceleration_z": { "default_value": 3000 }, + "machine_max_acceleration_e": { "default_value": 3000 }, + "machine_acceleration": { "default_value": 1000 }, + "machine_max_jerk_xy": { "default_value": 10 }, + "machine_max_jerk_z": { "default_value": 10 }, + "machine_max_jerk_e": { "default_value": 10 }, + "machine_steps_per_mm_x": { "default_value": 1600 }, + "machine_steps_per_mm_y": { "default_value": 1600 }, + "machine_steps_per_mm_z": { "default_value": 1600 }, + "machine_steps_per_mm_e": { "default_value": 174 }, + "machine_feeder_wheel_diameter": { "default_value": 12 }, + + "layer_height": { "default_value": 0.2 }, + "layer_height_0": { "default_value": 0.2 }, + + "ironing_pattern": { "default_value": "concentric" }, + "ironing_flow": { "default_value": 7.0 }, + + "infill_sparse_density": { "default_value": 20 }, + + "default_material_print_temperature": { "default_value": 220 }, + "retraction_amount": { "default_value": 6.5 }, + + "speed_print": { "default_value": 40 }, + "speed_equalize_flow_enabled": { "default_value": true }, + "speed_equalize_flow_max": { "default_value": 100 }, + + "acceleration_print": { "default_value": 1000 }, + + "jerk_print": { "default_value": 10 }, + + "support_angle": { "default_value": 65 }, + "support_brim_enable": { "default_value": true }, + + "adhesion_type": { "default_value": "skirt" }, + "brim_outside_only": { "default_value": false }, + + "meshfix_maximum_resolution": { "default_value": 0.05 } + } +} 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 ac50884888..fcde530ebf 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": 7, + "setting_version": 10, "visible": false, "position": "0" }, diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 5357a5a3bc..ca0057adb4 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": 7, + "setting_version": 10, "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": @@ -204,6 +206,16 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, + "machine_heated_build_volume": + { + "label": "Has Build Volume Temperature Stabilization", + "description": "Whether the machine is able to stabilize the build volume temperature.", + "default_value": false, + "type": "bool", + "settable_per_mesh": false, + "settable_per_extruder": false, + "settable_per_meshgroup": false + }, "machine_center_is_zero": { "label": "Is Center Origin", @@ -344,7 +356,7 @@ }, "machine_gcode_flavor": { - "label": "G-code Flavour", + "label": "G-code Flavor", "description": "The type of g-code to be generated.", "type": "enum", "options": @@ -892,7 +904,7 @@ "maximum_value_warning": "3 * machine_nozzle_size", "default_value": 0.4, "type": "float", - "enabled": "support_enable", + "enabled": "(support_enable or support_tree_enable)", "value": "line_width", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, @@ -908,7 +920,7 @@ "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size", "maximum_value_warning": "2 * machine_nozzle_size", "type": "float", - "enabled": "support_enable and support_interface_enable", + "enabled": "(support_enable or support_tree_enable) and support_interface_enable", "limit_to_extruder": "support_interface_extruder_nr", "value": "line_width", "settable_per_mesh": false, @@ -925,7 +937,7 @@ "minimum_value_warning": "0.4 * machine_nozzle_size", "maximum_value_warning": "2 * machine_nozzle_size", "type": "float", - "enabled": "support_enable and support_roof_enable", + "enabled": "(support_enable or support_tree_enable) and support_roof_enable", "limit_to_extruder": "support_roof_extruder_nr", "value": "extruderValue(support_roof_extruder_nr, 'support_interface_line_width')", "settable_per_mesh": false, @@ -941,7 +953,7 @@ "minimum_value_warning": "0.4 * machine_nozzle_size", "maximum_value_warning": "2 * machine_nozzle_size", "type": "float", - "enabled": "support_enable and support_bottom_enable", + "enabled": "(support_enable or support_tree_enable) and support_bottom_enable", "limit_to_extruder": "support_bottom_extruder_nr", "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_line_width')", "settable_per_mesh": false, @@ -963,20 +975,20 @@ "maximum_value_warning": "2 * machine_nozzle_size", "settable_per_mesh": false, "settable_per_extruder": true - }, - "initial_layer_line_width_factor": - { - "label": "Initial Layer Line Width", - "description": "Multiplier of the line width on the first layer. Increasing this could improve bed adhesion.", - "type": "float", - "unit": "%", - "default_value": 100.0, - "minimum_value": "0.001", - "maximum_value_warning": "150", - "settable_per_mesh": false, - "settable_per_extruder": true } } + }, + "initial_layer_line_width_factor": + { + "label": "Initial Layer Line Width", + "description": "Multiplier of the line width on the first layer. Increasing this could improve bed adhesion.", + "type": "float", + "unit": "%", + "default_value": 100.0, + "minimum_value": "0.001", + "maximum_value_warning": "150", + "settable_per_mesh": false, + "settable_per_extruder": true } } }, @@ -1178,6 +1190,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 } } } @@ -1399,34 +1423,58 @@ "limit_to_extruder": "wall_0_extruder_nr", "settable_per_mesh": true }, - "z_seam_x": + "z_seam_position": { - "label": "Z Seam X", - "description": "The X coordinate of the position near where to start printing each part in a layer.", - "unit": "mm", - "type": "float", - "default_value": 100.0, - "value": "machine_width / 2", + "label": "Z Seam Position", + "description": "The position near where to start printing each part in a layer.", + "type": "enum", + "options": + { + "backleft": "Back Left", + "back": "Back", + "backright": "Back Right", + "right": "Right", + "frontright": "Front Right", + "front": "Front", + "frontleft": "Front Left", + "left": "Left" + }, "enabled": "z_seam_type == 'back'", + "default_value": "back", "limit_to_extruder": "wall_0_extruder_nr", - "settable_per_mesh": true - }, - "z_seam_y": - { - "label": "Z Seam Y", - "description": "The Y coordinate of the position near where to start printing each part in a layer.", - "unit": "mm", - "type": "float", - "default_value": 100.0, - "value": "machine_depth * 3", - "enabled": "z_seam_type == 'back'", - "limit_to_extruder": "wall_0_extruder_nr", - "settable_per_mesh": true + "settable_per_mesh": true, + "children": + { + "z_seam_x": + { + "label": "Z Seam X", + "description": "The X coordinate of the position near where to start printing each part in a layer.", + "unit": "mm", + "type": "float", + "default_value": 100.0, + "value": "(0 if (z_seam_position == 'frontleft' or z_seam_position == 'left' or z_seam_position == 'backleft') else machine_width / 2 if (z_seam_position == 'front' or z_seam_position == 'back') else machine_width) - (machine_width / 2 if z_seam_relative or machine_center_is_zero else 0)", + "enabled": "z_seam_type == 'back'", + "limit_to_extruder": "wall_0_extruder_nr", + "settable_per_mesh": true + }, + "z_seam_y": + { + "label": "Z Seam Y", + "description": "The Y coordinate of the position near where to start printing each part in a layer.", + "unit": "mm", + "type": "float", + "default_value": 100.0, + "value": "(0 if (z_seam_position == 'frontleft' or z_seam_position == 'front' or z_seam_position == 'frontright') else machine_depth / 2 if (z_seam_position == 'left' or z_seam_position == 'right') else machine_depth) - (machine_depth / 2 if z_seam_relative or machine_center_is_zero else 0)", + "enabled": "z_seam_type == 'back'", + "limit_to_extruder": "wall_0_extruder_nr", + "settable_per_mesh": true + } + } }, "z_seam_corner": { "label": "Seam Corner Preference", - "description": "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner.", + "description": "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate.", "type": "enum", "options": { @@ -1454,8 +1502,8 @@ }, "skin_no_small_gaps_heuristic": { - "label": "Ignore Small Z Gaps", - "description": "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting.", + "label": "No Skin in Z Gaps", + "description": "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air.", "type": "bool", "default_value": false, "enabled": "top_layers > 0 or bottom_layers > 0", @@ -1477,7 +1525,7 @@ "ironing_enabled": { "label": "Enable Ironing", - "description": "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.", + "description": "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.", "type": "bool", "default_value": false, "limit_to_extruder": "top_bottom_extruder_nr", @@ -1591,6 +1639,36 @@ "enabled": "resolveOrValue('jerk_enabled') and ironing_enabled", "limit_to_extruder": "top_bottom_extruder_nr", "settable_per_mesh": true + }, + "skin_overlap": + { + "label": "Skin Overlap Percentage", + "description": "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall.", + "unit": "%", + "type": "float", + "default_value": 5, + "minimum_value_warning": "-50", + "maximum_value_warning": "100", + "value": "5 if top_bottom_pattern != 'concentric' else 0", + "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'", + "limit_to_extruder": "top_bottom_extruder_nr", + "settable_per_mesh": true, + "children": + { + "skin_overlap_mm": + { + "label": "Skin Overlap", + "description": "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall.", + "unit": "mm", + "type": "float", + "default_value": 0.02, + "minimum_value_warning": "-0.5 * machine_nozzle_size", + "maximum_value_warning": "machine_nozzle_size", + "value": "0.5 * (skin_line_width + (wall_line_width_x if wall_line_count > 1 else wall_line_width_0)) * skin_overlap / 100 if top_bottom_pattern != 'concentric' else 0", + "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'", + "settable_per_mesh": true + } + } } } }, @@ -1723,6 +1801,17 @@ "limit_to_extruder": "infill_extruder_nr", "settable_per_mesh": true }, + "infill_randomize_start_location": + { + "label": "Randomize Infill Start", + "description": "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.", + "type": "bool", + "default_value": false, + "warning_value": "True if infill_pattern not in ('grid', 'triangles', 'trihexagon', 'cubic', 'cubicsubdiv', 'tetrahedral', 'quarter_cubic') else None", + "enabled": "not ((infill_pattern == 'cross' and connect_infill_polygons) or infill_pattern == 'concentric')", + "limit_to_extruder": "infill_extruder_nr", + "settable_per_mesh": true + }, "infill_multiplier": { "label": "Infill Line Multiplier", @@ -1790,36 +1879,6 @@ } } }, - "skin_overlap": - { - "label": "Skin Overlap Percentage", - "description": "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall.", - "unit": "%", - "type": "float", - "default_value": 5, - "minimum_value_warning": "-50", - "maximum_value_warning": "100", - "value": "5 if top_bottom_pattern != 'concentric' else 0", - "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'", - "limit_to_extruder": "top_bottom_extruder_nr", - "settable_per_mesh": true, - "children": - { - "skin_overlap_mm": - { - "label": "Skin Overlap", - "description": "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall.", - "unit": "mm", - "type": "float", - "default_value": 0.02, - "minimum_value_warning": "-0.5 * machine_nozzle_size", - "maximum_value_warning": "machine_nozzle_size", - "value": "0.5 * (skin_line_width + (wall_line_width_x if wall_line_count > 1 else wall_line_width_0)) * skin_overlap / 100 if top_bottom_pattern != 'concentric' else 0", - "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'", - "settable_per_mesh": true - } - } - }, "infill_wipe_dist": { "label": "Infill Wipe Distance", @@ -1841,7 +1900,7 @@ "unit": "mm", "type": "float", "default_value": 0.1, - "minimum_value": "resolveOrValue('layer_height') if infill_line_distance > 0 else -999999", + "minimum_value": "resolveOrValue('layer_height') / 2 if infill_line_distance > 0 else -999999", "maximum_value_warning": "0.75 * machine_nozzle_size", "maximum_value": "resolveOrValue('layer_height') * (1.45 if spaghetti_infill_enabled else 8) if infill_line_distance > 0 else 999999", "value": "resolveOrValue('layer_height')", @@ -1925,7 +1984,7 @@ "description": "The largest width of skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top/bottom skin at slanted surfaces in the model.", "unit": "mm", "type": "float", - "default_value": 0, + "default_value": 1, "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x", "minimum_value": "0", "enabled": "top_layers > 0 or bottom_layers > 0", @@ -1939,7 +1998,7 @@ "description": "The largest width of top skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top skin at slanted surfaces in the model.", "unit": "mm", "type": "float", - "default_value": 0, + "default_value": 1, "value": "skin_preshrink", "minimum_value": "0", "enabled": "top_layers > 0 or bottom_layers > 0", @@ -1952,7 +2011,7 @@ "description": "The largest width of bottom skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing bottom skin at slanted surfaces in the model.", "unit": "mm", "type": "float", - "default_value": 0, + "default_value": 1, "value": "skin_preshrink", "minimum_value": "0", "enabled": "top_layers > 0 or bottom_layers > 0", @@ -1967,7 +2026,7 @@ "description": "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used.", "unit": "mm", "type": "float", - "default_value": 2.8, + "default_value": 1, "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x", "minimum_value": "-skin_preshrink", "limit_to_extruder": "top_bottom_extruder_nr", @@ -1981,7 +2040,7 @@ "description": "The distance the top skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on the layer above adhere better to the skin. Lower values save amount of material used.", "unit": "mm", "type": "float", - "default_value": 2.8, + "default_value": 1, "value": "expand_skins_expand_distance", "minimum_value": "-top_skin_preshrink", "enabled": "top_layers > 0 or bottom_layers > 0", @@ -1994,7 +2053,7 @@ "description": "The distance the bottom skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the skin adhere better to the walls on the layer below. Lower values save amount of material used.", "unit": "mm", "type": "float", - "default_value": 2.8, + "default_value": 1, "value": "expand_skins_expand_distance", "minimum_value": "-bottom_skin_preshrink", "enabled": "top_layers > 0 or bottom_layers > 0", @@ -2052,7 +2111,7 @@ "default_value": 210, "minimum_value_warning": "0", "maximum_value_warning": "285", - "enabled": "machine_nozzle_temp_enabled", + "enabled": false, "settable_per_extruder": true, "settable_per_mesh": false, "minimum_value": "-273.15" @@ -2060,17 +2119,17 @@ "build_volume_temperature": { "label": "Build Volume Temperature", - "description": "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted.", + "description": "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted.", "unit": "°C", "type": "float", - "default_value": 35, + "default_value": 0, "resolve": "min(extruderValues('build_volume_temperature'))", "minimum_value": "-273.15", "minimum_value_warning": "0", "maximum_value_warning": "285", - "enabled": true, + "enabled": "machine_heated_build_volume", "settable_per_mesh": false, - "settable_per_extruder": true + "settable_per_extruder": false }, "material_print_temperature": { @@ -2155,9 +2214,9 @@ "resolve": "max(extruderValues('default_material_bed_temperature'))", "default_value": 60, "minimum_value": "-273.15", - "minimum_value_warning": "0", + "minimum_value_warning": "build_volume_temperature", "maximum_value_warning": "130", - "enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"", + "enabled": false, "settable_per_mesh": false, "settable_per_extruder": false, "settable_per_meshgroup": false @@ -2172,7 +2231,7 @@ "value": "default_material_bed_temperature", "resolve": "max(extruderValues('material_bed_temperature'))", "minimum_value": "-273.15", - "minimum_value_warning": "0", + "minimum_value_warning": "build_volume_temperature", "maximum_value_warning": "130", "enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"", "settable_per_mesh": false, @@ -2189,7 +2248,7 @@ "default_value": 60, "value": "resolveOrValue('material_bed_temperature')", "minimum_value": "-273.15", - "minimum_value_warning": "max(extruderValues('material_bed_temperature'))", + "minimum_value_warning": "max(build_volume_temperature, max(extruderValues('material_bed_temperature')))", "maximum_value_warning": "130", "enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"", "settable_per_mesh": false, @@ -2234,6 +2293,107 @@ "settable_per_mesh": false, "settable_per_extruder": true }, + "material_crystallinity": + { + "label": "Crystalline Material", + "description": "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?", + "type": "bool", + "default_value": false, + "enabled": false, + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "material_anti_ooze_retracted_position": + { + "label": "Anti-ooze Retracted Position", + "description": "How far the material needs to be retracted before it stops oozing.", + "type": "float", + "unit": "mm", + "default_value": -4, + "enabled": false, + "minimum_value_warning": "-retraction_amount", + "maximum_value_warning": "0", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "material_anti_ooze_retraction_speed": + { + "label": "Anti-ooze Retraction Speed", + "description": "How fast the material needs to be retracted during a filament switch to prevent oozing.", + "type": "float", + "unit": "mm/s", + "default_value": 5, + "enabled": false, + "minimum_value": "0", + "maximum_value": "machine_max_feedrate_e", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "material_break_preparation_retracted_position": + { + "label": "Break Preparation Retracted Position", + "description": "How far the filament can be stretched before it breaks, while heated.", + "type": "float", + "unit": "mm", + "default_value": -16, + "enabled": false, + "minimum_value_warning": "-retraction_amount * 4", + "maximum_value_warning": "0", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "material_break_preparation_speed": + { + "label": "Break Preparation Retraction Speed", + "description": "How fast the filament needs to be retracted just before breaking it off in a retraction.", + "type": "float", + "unit": "mm/s", + "default_value": 2, + "enabled": false, + "minimum_value": "0", + "maximum_value": "machine_max_feedrate_e", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "material_break_retracted_position": + { + "label": "Break Retracted Position", + "description": "How far to retract the filament in order to break it cleanly.", + "type": "float", + "unit": "mm", + "default_value": -50, + "enabled": false, + "minimum_value_warning": "-100", + "maximum_value_warning": "0", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "material_break_speed": + { + "label": "Break Retraction Speed", + "description": "The speed at which to retract the filament in order to break it cleanly.", + "type": "float", + "unit": "mm/s", + "default_value": 25, + "enabled": false, + "minimum_value": "0", + "maximum_value": "machine_max_feedrate_e", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "material_break_temperature": + { + "label": "Break Temperature", + "description": "The temperature at which the filament is broken for a clean break.", + "type": "float", + "unit": "°C", + "default_value": 50, + "enabled": false, + "minimum_value": "-273.15", + "maximum_value_warning": "300", + "settable_per_mesh": false, + "settable_per_extruder": true + }, "material_flow": { "label": "Flow", @@ -2245,7 +2405,196 @@ "minimum_value_warning": "50", "maximum_value_warning": "150", "enabled": "machine_gcode_flavor != \"UltiGCode\"", - "settable_per_mesh": true + "settable_per_mesh": true, + "children": + { + "wall_material_flow": + { + "label": "Wall Flow", + "description": "Flow compensation on wall lines.", + "unit": "%", + "type": "float", + "default_value": 100, + "value": "material_flow", + "minimum_value": "5", + "minimum_value_warning": "50", + "maximum_value_warning": "150", + "limit_to_extruder": "wall_0_extruder_nr if wall_x_extruder_nr == wall_0_extruder_nr else -1", + "settable_per_mesh": true, + "children": + { + "wall_0_material_flow": + { + "label": "Outer Wall Flow", + "description": "Flow compensation on the outermost wall line.", + "unit": "%", + "type": "float", + "default_value": 100, + "value": "wall_material_flow", + "minimum_value": "5", + "minimum_value_warning": "50", + "maximum_value_warning": "150", + "limit_to_extruder": "wall_0_extruder_nr", + "settable_per_mesh": true + }, + "wall_x_material_flow": + { + "label": "Inner Wall(s) Flow", + "description": "Flow compensation on wall lines for all wall lines except the outermost one.", + "unit": "%", + "type": "float", + "default_value": 100, + "value": "wall_material_flow", + "minimum_value": "5", + "minimum_value_warning": "50", + "maximum_value_warning": "150", + "limit_to_extruder": "wall_x_extruder_nr", + "settable_per_mesh": true + } + } + }, + "skin_material_flow": + { + "label": "Top/Bottom Flow", + "description": "Flow compensation on top/bottom lines.", + "unit": "%", + "type": "float", + "default_value": 100, + "value": "material_flow", + "minimum_value": "5", + "minimum_value_warning": "50", + "maximum_value_warning": "150", + "enabled": "top_layers > 0 or bottom_layers > 0", + "limit_to_extruder": "top_bottom_extruder_nr", + "settable_per_mesh": true + }, + "roofing_material_flow": + { + "label": "Top Surface Skin Flow", + "description": "Flow compensation on lines of the areas at the top of the print.", + "unit": "%", + "type": "float", + "default_value": 100, + "value": "skin_material_flow", + "minimum_value": "5", + "minimum_value_warning": "50", + "maximum_value_warning": "150", + "limit_to_extruder": "roofing_extruder_nr", + "settable_per_mesh": true, + "enabled": "roofing_layer_count > 0 and top_layers > 0" + }, + "infill_material_flow": + { + "label": "Infill Flow", + "description": "Flow compensation on infill lines.", + "unit": "%", + "type": "float", + "default_value": 100, + "value": "material_flow", + "minimum_value": "5", + "minimum_value_warning": "50", + "maximum_value_warning": "150", + "enabled": "infill_sparse_density > 0", + "limit_to_extruder": "infill_extruder_nr", + "settable_per_mesh": true + }, + "skirt_brim_material_flow": + { + "label": "Skirt/Brim Flow", + "description": "Flow compensation on skirt or brim lines.", + "unit": "%", + "type": "float", + "default_value": 100, + "value": "material_flow", + "minimum_value": "5", + "minimum_value_warning": "50", + "maximum_value_warning": "150", + "enabled": "resolveOrValue('adhesion_type') == 'skirt' or resolveOrValue('adhesion_type') == 'brim'", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "support_material_flow": + { + "label": "Support Flow", + "description": "Flow compensation on support structure lines.", + "unit": "%", + "type": "float", + "default_value": 100, + "value": "material_flow", + "minimum_value": "5", + "minimum_value_warning": "50", + "maximum_value_warning": "150", + "enabled": "support_enable", + "limit_to_extruder": "support_infill_extruder_nr", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "support_interface_material_flow": + { + "label": "Support Interface Flow", + "description": "Flow compensation on lines of support roof or floor.", + "unit": "%", + "type": "float", + "default_value": 100, + "value": "material_flow", + "minimum_value": "5", + "minimum_value_warning": "50", + "maximum_value_warning": "150", + "enabled": "support_enable and support_interface_enable", + "limit_to_extruder": "support_interface_extruder_nr", + "settable_per_mesh": false, + "settable_per_extruder": true, + "children": + { + "support_roof_material_flow": + { + "label": "Support Roof Flow", + "description": "Flow compensation on support roof lines.", + "unit": "%", + "type": "float", + "default_value": 100, + "value": "extruderValue(support_roof_extruder_nr, 'support_interface_material_flow')", + "minimum_value": "5", + "minimum_value_warning": "50", + "maximum_value_warning": "150", + "enabled": "support_enable and support_roof_enable", + "limit_to_extruder": "support_roof_extruder_nr", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "support_bottom_material_flow": + { + "label": "Support Floor Flow", + "description": "Flow compensation on support floor lines.", + "unit": "%", + "type": "float", + "default_value": 100, + "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_material_flow')", + "minimum_value": "5", + "minimum_value_warning": "50", + "maximum_value_warning": "150", + "enabled": "support_enable and support_bottom_enable", + "limit_to_extruder": "support_bottom_extruder_nr", + "settable_per_mesh": false, + "settable_per_extruder": true + } + } + }, + "prime_tower_flow": + { + "label": "Prime Tower Flow", + "description": "Flow compensation on prime tower lines.", + "unit": "%", + "type": "float", + "default_value": 100, + "value": "material_flow", + "minimum_value": "5", + "minimum_value_warning": "50", + "maximum_value_warning": "150", + "settable_per_mesh": false, + "settable_per_extruder": true + } + } }, "material_flow_layer_0": { @@ -2253,7 +2602,6 @@ "description": "Flow compensation for the first layer: the amount of material extruded on the initial layer is multiplied by this value.", "unit": "%", "default_value": 100, - "value": "material_flow", "type": "float", "minimum_value": "0.0001", "minimum_value_warning": "50", @@ -2365,7 +2713,7 @@ "minimum_value": "0", "minimum_value_warning": "line_width * 1.5", "maximum_value_warning": "10", - "enabled": "retraction_enable", + "enabled": false, "settable_per_mesh": false, "settable_per_extruder": true }, @@ -2398,10 +2746,10 @@ "limit_support_retractions": { "label": "Limit Support Retractions", - "description": "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure.", + "description": "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure.", "type": "bool", "default_value": true, - "enabled": "retraction_enable and support_enable", + "enabled": "retraction_enable and (support_enable or support_tree_enable)", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -2482,6 +2830,19 @@ "settable_per_extruder": true } } + }, + "switch_extruder_extra_prime_amount": + { + "label": "Nozzle Switch Extra Prime Amount", + "description": "Extra material to prime after nozzle switching.", + "type": "float", + "unit": "mm³", + "default_value": 0, + "minimum_value_warning": "0", + "maximum_value_warning": "100", + "enabled": "retraction_enable", + "settable_per_mesh": false, + "settable_per_extruder": true } } }, @@ -2606,7 +2967,7 @@ "maximum_value_warning": "150", "default_value": 60, "value": "speed_print", - "enabled": "support_enable", + "enabled": "support_enable or support_tree_enable", "settable_per_mesh": false, "limit_to_extruder": "support_extruder_nr", "settable_per_extruder": true, @@ -2623,7 +2984,7 @@ "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "150", "value": "speed_support", - "enabled": "support_enable", + "enabled": "support_enable or support_tree_enable", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -2638,7 +2999,7 @@ "minimum_value": "0.1", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "150", - "enabled": "support_interface_enable and support_enable", + "enabled": "support_interface_enable and (support_enable or support_tree_enable)", "limit_to_extruder": "support_interface_extruder_nr", "value": "speed_support / 1.5", "settable_per_mesh": false, @@ -2655,7 +3016,7 @@ "minimum_value": "0.1", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "150", - "enabled": "support_roof_enable and support_enable", + "enabled": "support_roof_enable and (support_enable or support_tree_enable)", "limit_to_extruder": "support_roof_extruder_nr", "value": "extruderValue(support_roof_extruder_nr, 'speed_support_interface')", "settable_per_mesh": false, @@ -2671,7 +3032,7 @@ "minimum_value": "0.1", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "150", - "enabled": "support_bottom_enable and support_enable", + "enabled": "support_bottom_enable and (support_enable or support_tree_enable)", "limit_to_extruder": "support_bottom_extruder_nr", "value": "extruderValue(support_bottom_extruder_nr, 'speed_support_interface')", "settable_per_mesh": false, @@ -2771,16 +3132,16 @@ "settable_per_extruder": true, "limit_to_extruder": "adhesion_extruder_nr" }, - "max_feedrate_z_override": + "speed_z_hop": { - "label": "Maximum Z Speed", - "description": "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed.", + "label": "Z Hop Speed", + "description": "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move.", "unit": "mm/s", "type": "float", - "default_value": 0, + "default_value": 10, "minimum_value": "0", - "maximum_value": "299792458000", - "maximum_value_warning": "machine_max_feedrate_z", + "maximum_value": "machine_max_feedrate_z", + "enabled": "retraction_enable and retraction_hop_enabled", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -2946,7 +3307,7 @@ "maximum_value_warning": "10000", "default_value": 3000, "value": "acceleration_print", - "enabled": "resolveOrValue('acceleration_enabled') and support_enable", + "enabled": "resolveOrValue('acceleration_enabled') and (support_enable or support_tree_enable)", "settable_per_mesh": false, "limit_to_extruder": "support_extruder_nr", "settable_per_extruder": true, @@ -2963,7 +3324,7 @@ "minimum_value": "0.1", "minimum_value_warning": "100", "maximum_value_warning": "10000", - "enabled": "resolveOrValue('acceleration_enabled') and support_enable", + "enabled": "resolveOrValue('acceleration_enabled') and (support_enable or support_tree_enable)", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -2979,7 +3340,7 @@ "minimum_value": "0.1", "minimum_value_warning": "100", "maximum_value_warning": "10000", - "enabled": "resolveOrValue('acceleration_enabled') and support_interface_enable and support_enable", + "enabled": "resolveOrValue('acceleration_enabled') and support_interface_enable and (support_enable or support_tree_enable)", "limit_to_extruder": "support_interface_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true, @@ -2996,7 +3357,7 @@ "minimum_value": "0.1", "minimum_value_warning": "100", "maximum_value_warning": "10000", - "enabled": "acceleration_enabled and support_roof_enable and support_enable", + "enabled": "acceleration_enabled and support_roof_enable and (support_enable or support_tree_enable)", "limit_to_extruder": "support_roof_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3012,7 +3373,7 @@ "minimum_value": "0.1", "minimum_value_warning": "100", "maximum_value_warning": "10000", - "enabled": "acceleration_enabled and support_bottom_enable and support_enable", + "enabled": "acceleration_enabled and support_bottom_enable and (support_enable or support_tree_enable)", "limit_to_extruder": "support_bottom_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3231,7 +3592,7 @@ "maximum_value_warning": "50", "default_value": 20, "value": "jerk_print", - "enabled": "resolveOrValue('jerk_enabled') and support_enable", + "enabled": "resolveOrValue('jerk_enabled') and (support_enable or support_tree_enable)", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "support_extruder_nr", @@ -3247,7 +3608,7 @@ "value": "jerk_support", "minimum_value": "0", "maximum_value_warning": "50", - "enabled": "resolveOrValue('jerk_enabled') and support_enable", + "enabled": "resolveOrValue('jerk_enabled') and (support_enable or support_tree_enable)", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3262,7 +3623,7 @@ "value": "jerk_support", "minimum_value": "0", "maximum_value_warning": "50", - "enabled": "resolveOrValue('jerk_enabled') and support_interface_enable and support_enable", + "enabled": "resolveOrValue('jerk_enabled') and support_interface_enable and (support_enable or support_tree_enable)", "limit_to_extruder": "support_interface_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true, @@ -3278,7 +3639,7 @@ "value": "extruderValue(support_roof_extruder_nr, 'jerk_support_interface')", "minimum_value": "0", "maximum_value_warning": "50", - "enabled": "resolveOrValue('jerk_enabled') and support_roof_enable and support_enable", + "enabled": "resolveOrValue('jerk_enabled') and support_roof_enable and (support_enable or support_tree_enable)", "limit_to_extruder": "support_roof_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3293,7 +3654,7 @@ "value": "extruderValue(support_roof_extruder_nr, 'jerk_support_interface')", "minimum_value": "0", "maximum_value_warning": "50", - "enabled": "resolveOrValue('jerk_enabled') and support_bottom_enable and support_enable", + "enabled": "resolveOrValue('jerk_enabled') and support_bottom_enable and (support_enable or support_tree_enable)", "limit_to_extruder": "support_bottom_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3471,17 +3832,6 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "start_layers_at_same_position": - { - "label": "Start Layers with the Same Part", - "description": "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time.", - "type": "bool", - "default_value": false, - "enabled": false, - "settable_per_mesh": false, - "settable_per_extruder": false, - "settable_per_meshgroup": true - }, "layer_start_x": { "label": "Layer Start X", @@ -3555,7 +3905,7 @@ "value": "retraction_hop", "minimum_value_warning": "0", "maximum_value_warning": "10", - "enabled": "retraction_enable and retraction_hop_after_extruder_switch", + "enabled": "retraction_enable and retraction_hop_after_extruder_switch and extruders_enabled_count > 1", "settable_per_mesh": false, "settable_per_extruder": true } @@ -3733,7 +4083,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, @@ -3871,7 +4221,7 @@ "type": "bool", "default_value": false, "value": "support_pattern == 'cross' or support_pattern == 'gyroid'", - "enabled": "support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'cross' or support_pattern == 'gyroid'", + "enabled": "(support_enable or support_tree_enable) and (support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'cross' or support_pattern == 'gyroid')", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3935,16 +4285,13 @@ } } }, - "support_infill_angle": + "support_infill_angles": { - "label": "Support Infill Line Direction", - "description": "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane.", - "unit": "°", - "type": "float", - "minimum_value": "-180", - "maximum_value": "180", - "default_value": 0, - "enabled": "support_enable and support_pattern != 'concentric' and support_infill_rate > 0", + "label": "Support Infill Line Directions", + "description": "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.", + "type": "[int]", + "default_value": "[ ]", + "enabled": "(support_enable or support_tree_enable) and support_pattern != 'concentric' and support_infill_rate > 0", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3969,7 +4316,7 @@ "default_value": 8.0, "minimum_value": "0.0", "maximum_value_warning": "50.0", - "enabled": "support_enable", + "enabled": "(support_enable or support_tree_enable) and support_brim_enable", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "support_infill_extruder_nr", @@ -3984,7 +4331,7 @@ "minimum_value": "0", "maximum_value_warning": "50 / skirt_brim_line_width", "value": "math.ceil(support_brim_width / (skirt_brim_line_width * initial_layer_line_width_factor / 100.0))", - "enabled": "support_enable", + "enabled": "(support_enable or support_tree_enable) and support_brim_enable", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "support_infill_extruder_nr" @@ -4070,6 +4417,7 @@ "unit": "mm", "type": "float", "minimum_value": "0", + "minimum_value_warning": "support_xy_distance - support_line_width * 2", "maximum_value_warning": "support_xy_distance", "default_value": 0.2, "value": "machine_nozzle_size / 2", @@ -4106,7 +4454,7 @@ "support_join_distance": { "label": "Support Join Distance", - "description": "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one.", + "description": "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one.", "unit": "mm", "type": "float", "default_value": 2.0, @@ -4273,7 +4621,7 @@ "minimum_value": "0", "maximum_value_warning": "support_interface_height", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "support_interface_enable and support_enable", + "enabled": "support_interface_enable and (support_enable or support_tree_enable)", "settable_per_mesh": true }, "support_interface_density": @@ -4424,21 +4772,21 @@ "minimum_interface_area": { "label": "Minimum Support Interface Area", - "description": "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated.", + "description": "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will be printed as normal support.", "unit": "mm²", "type": "float", "default_value": 1.0, "minimum_value": "0", "minimum_value_warning": "minimum_support_area", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "support_interface_enable and support_enable", + "enabled": "support_interface_enable and (support_enable or support_tree_enable)", "settable_per_mesh": true, "children": { "minimum_roof_area": { "label": "Minimum Support Roof Area", - "description": "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated.", + "description": "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will be printed as normal support.", "unit": "mm²", "type": "float", "default_value": 1.0, @@ -4446,13 +4794,13 @@ "minimum_value": "0", "minimum_value_warning": "minimum_support_area", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "support_roof_enable and support_enable", + "enabled": "support_roof_enable and (support_enable or support_tree_enable)", "settable_per_mesh": true }, "minimum_bottom_area": { "label": "Minimum Support Floor Area", - "description": "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated.", + "description": "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will be printed as normal support.", "unit": "mm²", "type": "float", "default_value": 1.0, @@ -4460,7 +4808,7 @@ "minimum_value": "0", "minimum_value_warning": "minimum_support_area", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "support_bottom_enable and support_enable", + "enabled": "support_bottom_enable and (support_enable or support_tree_enable)", "settable_per_mesh": true } } @@ -4509,13 +4857,51 @@ } } }, + "support_interface_angles": + { + "label": "Support Interface Line Directions", + "description": "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).", + "type": "[int]", + "default_value": "[ ]", + "limit_to_extruder": "support_interface_extruder_nr", + "enabled": "(support_enable or support_tree_enable) and support_interface_enable and support_interface_pattern != 'concentric'", + "settable_per_mesh": false, + "settable_per_extruder": true, + "children": + { + "support_roof_angles": + { + "label": "Support Roof Line Directions", + "description": "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).", + "type": "[int]", + "default_value": "[ ]", + "value": "support_interface_angles", + "limit_to_extruder": "support_roof_extruder_nr", + "enabled": "(support_enable or support_tree_enable) and support_roof_enable and support_roof_pattern != 'concentric'", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "support_bottom_angles": + { + "label": "Support Floor Line Directions", + "description": "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).", + "type": "[int]", + "default_value": "[ ]", + "value": "support_interface_angles", + "limit_to_extruder": "support_bottom_extruder_nr", + "enabled": "(support_enable or support_tree_enable) and support_bottom_enable and support_bottom_pattern != 'concentric'", + "settable_per_mesh": false, + "settable_per_extruder": true + } + } + }, "support_fan_enable": { "label": "Fan Speed Override", "description": "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support.", "type": "bool", "default_value": false, - "enabled": "support_enable", + "enabled": "support_enable or support_tree_enable", "settable_per_mesh": false }, "support_supported_skin_fan_speed": @@ -4527,7 +4913,7 @@ "maximum_value": "100", "default_value": 100, "type": "float", - "enabled": "support_enable and support_fan_enable", + "enabled": "(support_enable or support_tree_enable) and support_fan_enable", "settable_per_mesh": false }, "support_use_towers": @@ -4554,10 +4940,10 @@ "enabled": "support_enable and support_use_towers", "settable_per_mesh": true }, - "support_minimal_diameter": + "support_tower_maximum_supported_diameter": { - "label": "Minimum Diameter", - "description": "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower.", + "label": "Maximum Tower-Supported Diameter", + "description": "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower.", "unit": "mm", "type": "float", "default_value": 3.0, @@ -4609,11 +4995,11 @@ "label": "Enable Prime Blob", "description": "Whether to prime the filament with a blob before printing. Turning this setting on will ensure that the extruder will have material ready at the nozzle before printing. Printing Brim or Skirt can act like priming too, in which case turning this setting off saves some time.", "type": "bool", - "resolve": "any(extruderValues('prime_blob_enable'))", "default_value": false, "settable_per_mesh": false, "settable_per_extruder": true, - "enabled": false + "enabled": false, + "warning_value": "True if resolveOrValue('print_sequence') == 'one_at_a_time' else None" }, "extruder_prime_pos_x": { @@ -4664,7 +5050,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 @@ -4749,7 +5135,7 @@ "description": "Enforce brim to be printed around the model even if that space would otherwise be occupied by support. This replaces some regions of the first layer of support by brim regions.", "type": "bool", "default_value": true, - "enabled": "resolveOrValue('adhesion_type') == 'brim' and support_enable", + "enabled": "resolveOrValue('adhesion_type') == 'brim' and (support_enable or support_tree_enable)", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "support_infill_extruder_nr" @@ -5255,17 +5641,6 @@ "settable_per_mesh": false, "settable_per_extruder": false }, - "prime_tower_circular": - { - "label": "Circular Prime Tower", - "description": "Make the prime tower as a circular shape.", - "type": "bool", - "enabled": "resolveOrValue('prime_tower_enable')", - "default_value": true, - "resolve": "any(extruderValues('prime_tower_circular'))", - "settable_per_mesh": false, - "settable_per_extruder": false - }, "prime_tower_size": { "label": "Prime Tower Size", @@ -5290,7 +5665,7 @@ "type": "float", "default_value": 6, "minimum_value": "0", - "maximum_value_warning": "((resolveOrValue('prime_tower_size') * 0.5) ** 2 * 3.14159 * resolveOrValue('layer_height') if prime_tower_circular else resolveOrValue('prime_tower_size') ** 2 * resolveOrValue('layer_height')) - sum(extruderValues('prime_tower_min_volume')) + prime_tower_min_volume", + "maximum_value_warning": "(resolveOrValue('prime_tower_size') * 0.5) ** 2 * 3.14159 * resolveOrValue('layer_height')", "enabled": "resolveOrValue('prime_tower_enable')", "settable_per_mesh": false, "settable_per_extruder": true @@ -5303,7 +5678,7 @@ "unit": "mm", "enabled": "resolveOrValue('prime_tower_enable')", "default_value": 200, - "value": "machine_width - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enable') else 0) - 1", + "value": "machine_width - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - 1", "maximum_value": "machine_width / 2 if machine_center_is_zero else machine_width", "minimum_value": "resolveOrValue('prime_tower_size') - machine_width / 2 if machine_center_is_zero else resolveOrValue('prime_tower_size')", "settable_per_mesh": false, @@ -5317,27 +5692,12 @@ "unit": "mm", "enabled": "resolveOrValue('prime_tower_enable')", "default_value": 200, - "value": "machine_depth - prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enable') else 0) - 1", + "value": "machine_depth - prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - 1", "maximum_value": "machine_depth / 2 - resolveOrValue('prime_tower_size') if machine_center_is_zero else machine_depth - resolveOrValue('prime_tower_size')", "minimum_value": "machine_depth / -2 if machine_center_is_zero else 0", "settable_per_mesh": false, "settable_per_extruder": false }, - "prime_tower_flow": - { - "label": "Prime Tower Flow", - "description": "Flow compensation: the amount of material extruded is multiplied by this value.", - "type": "float", - "unit": "%", - "enabled": "resolveOrValue('prime_tower_enable')", - "default_value": 100, - "value": "material_flow", - "minimum_value": "0.0001", - "minimum_value_warning": "50", - "maximum_value_warning": "150", - "settable_per_mesh": false, - "settable_per_extruder": true - }, "prime_tower_wipe_enabled": { "label": "Wipe Inactive Nozzle on Prime Tower", @@ -5481,9 +5841,47 @@ "description": "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle.", "type": "bool", "default_value": true, - "enabled": "not support_enable", + "enabled": "not (support_enable or support_tree_enable)", "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", + "description": "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.", + "type": "float", + "unit": "mm", + "default_value": 1.0, + "value": "min(meshfix_maximum_resolution * speed_travel / speed_print, 2 * line_width)", + "minimum_value": "0.001", + "minimum_value_warning": "0.05", + "maximum_value_warning": "10", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "meshfix_maximum_deviation": + { + "label": "Maximum Deviation", + "description": "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.", + "type": "float", + "unit": "mm", + "default_value": 0.05, + "minimum_value": "0.001", + "minimum_value_warning": "0.01", + "maximum_value_warning": "0.3", + "settable_per_mesh": true } } }, @@ -5641,7 +6039,7 @@ "smooth_spiralized_contours": { "label": "Smooth Spiralized Contours", - "description": "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details.", + "description": "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details.", "type": "bool", "default_value": true, "enabled": "magic_spiralize", @@ -5843,6 +6241,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 }, @@ -5874,50 +6273,12 @@ "unit": "mm", "type": "float", "default_value": 1.0, - "minimum_value": "0.001", + "minimum_value": "0", "minimum_value_warning": "0.05", "maximum_value_warning": "1.0", "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 - }, - "meshfix_maximum_travel_resolution": - { - "label": "Maximum Travel Resolution", - "description": "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.", - "type": "float", - "unit": "mm", - "default_value": 1.0, - "value": "min(meshfix_maximum_resolution * speed_travel / speed_print, 2 * line_width)", - "minimum_value": "0.001", - "minimum_value_warning": "0.05", - "maximum_value_warning": "10", - "settable_per_mesh": false, - "settable_per_extruder": true - }, - "meshfix_maximum_deviation": - { - "label": "Maximum Deviation", - "description": "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.", - "type": "float", - "unit": "mm", - "default_value": 0.05, - "minimum_value": "0.001", - "minimum_value_warning": "0.01", - "maximum_value_warning": "0.3", - "settable_per_mesh": true - }, "support_skip_some_zags": { "label": "Break Up Support In Chunks", @@ -6080,16 +6441,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", @@ -6214,7 +6565,7 @@ "support_conical_enabled": { "label": "Enable Conical Support", - "description": "Experimental feature: Make support areas smaller at the bottom than at the overhang.", + "description": "Make support areas smaller at the bottom than at the overhang.", "type": "bool", "default_value": false, "enabled": "support_enable", @@ -6246,7 +6597,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 }, @@ -6384,7 +6735,7 @@ "type": "float", "default_value": 5, "minimum_value": "0.1", - "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + max(max_feedrate_z_override, machine_max_feedrate_z) ** 2)", + "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", "settable_per_mesh": false, @@ -6416,7 +6767,7 @@ "type": "float", "default_value": 5, "minimum_value": "0.1", - "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + max(max_feedrate_z_override, machine_max_feedrate_z) ** 2)", + "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", "value": "wireframe_printspeed", @@ -6432,7 +6783,7 @@ "type": "float", "default_value": 5, "minimum_value": "0.1", - "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2 + max(max_feedrate_z_override, machine_max_feedrate_z) ** 2)", + "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", "value": "wireframe_printspeed", @@ -6739,7 +7090,7 @@ "wall_overhang_angle": { "label": "Overhanging Wall Angle", - "description": "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.", + "description": "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.", "unit": "°", "type": "float", "minimum_value": "0", @@ -7195,6 +7546,52 @@ "settable_per_mesh": false, "settable_per_extruder": true, "settable_per_meshgroup": false + }, + "small_hole_max_size": + { + "label": "Small Hole Max Size", + "description": "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed.", + "unit": "mm", + "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 + }, + "small_feature_speed_factor": + { + "label": "Small Feature Speed", + "description": "Small features will be printed at this percentage of their normal print speed. Slower printing can help with adhesion and accuracy.", + "unit": "%", + "type": "float", + "default_value": 50, + "minimum_value": "1", + "minimum_value_warning": "25", + "maximum_value": "100", + "settable_per_mesh": true + }, + "small_feature_speed_factor_0": + { + "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", + "default_value": 50, + "value": "small_feature_speed_factor", + "minimum_value": "1", + "minimum_value_warning": "25", + "maximum_value": "100", + "settable_per_mesh": true } } }, diff --git a/resources/definitions/felixpro2dual.def.json b/resources/definitions/felixpro2dual.def.json new file mode 100644 index 0000000000..fdd8a1b694 --- /dev/null +++ b/resources/definitions/felixpro2dual.def.json @@ -0,0 +1,71 @@ +{ + "version": 2, + "name": "Felix Pro 2 Dual", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "pnks", + "manufacturer": "Felix", + "platform": "FelixPro2_platform.obj", + "platform_offset": [-135, -0.5, 130], + "machine_extruder_trains": + { + "0": "felixpro2_dual_extruder_0", + "1": "felixpro2_dual_extruder_1" + }, + "file_formats": "text/x-gcode", + "has_variants": true, + "has_materials": true, + "preferred_variant_name": "0.35 mm", + "variants_name": "Nozzle diameter" + }, + "overrides": { + "machine_name": { "default_value": "FelixPro2Dual" }, + + "layer_height": { "default_value": 0.15 }, + "layer_height_0": { "default_value": 0.2 }, + + "infill_sparse_density": { "default_value": 20 }, + "wall_thickness": { "default_value": 1 }, + "top_bottom_thickness": { "default_value": 1 }, + + "machine_width": { "default_value": 240 }, + "machine_depth": { "default_value": 225 }, + "machine_height": { "default_value": 245 }, + + "machine_head_with_fans_polygon": + { + "default_value": [ + [ -60, 50 ], + [ -60, -50 ], + [ 70, 50 ], + [ 70, -50 ] + ] + }, + "gantry_height": { "value": "0" }, + "machine_extruder_count": { "default_value": 2 }, + "prime_tower_position_x": { "value": "250" }, + "prime_tower_position_y": { "value": "200" }, + + "machine_heated_bed": { "default_value": true }, + "machine_gcode_flavor": { "default_value": "Repetier" }, + "machine_center_is_zero": { "default_value": false }, + + "speed_print": { "default_value": 80 }, + + "retraction_amount": { "default_value": 1 }, + "retraction_speed": { "default_value": 50}, + "material_flow": { "default_value": 100 }, + "material_flow_layer_0": { "default_value" : 110, "value": "material_flow * 1.1" }, + "adhesion_type": { "default_value": "skirt" }, + "skirt_brim_minimal_length": { "default_value": 130 }, + "skirt_line_count": { "default_value": 3 }, + + "machine_start_gcode": { + "default_value": "G90 ;absolute positioning\r\nM82 ;set extruder to absolute mode\r\nM107 ;start with the fan off\r\nG28 X0 Y0 ;move X\/Y to min endstops\r\nG28 Z0 ;move Z to min endstops\r\nG1 Z15.0 F9000 ;move the platform down 15mm\r\n\r\nT0 ;Switch to the 1st extruder\r\nG92 E0 ;zero the extruded length\r\nG1 F200 E6 ;extrude 6 mm of feed stock\r\nG92 E0 ;zero the extruded length again\r\n;G1 F9000\r\nM117 FPro2 printing...\r\n" + }, + "machine_end_gcode": { + "default_value": "; Endcode FELIXprinters Pro series\r\n; =================================\t; Move extruder to park position\r\nG91 \t\t\t\t\t; Make coordinates relative\r\nG1 Z2 F5000 \t\t\t\t; Move z 2mm up\r\nG90 \t\t\t\t\t; Use absolute coordinates again\t\t\r\nG1 X220 Y243 F7800 \t\t\t; Move bed and printhead to ergonomic position\r\n\r\n; =================================\t; Turn off heaters\r\nT0\t\t\t\t\t; Select left extruder\r\nM104 T0 S0\t\t\t\t; Turn off heater and continue\t\t\t\t\r\nG92 E0\t\t\t\t\t; Reset extruder position\r\nG1 E-8\t\t\t\t\t; Retract filament 8mm\r\nG1 E-5\t\t\t\t\t; Push back filament 3mm\r\nG92 E0\t\t\t\t\t; Reset extruder position\r\n\r\nT1\t\t\t\t\t; Select right extruder\r\nM104 T1 S0\t\t\t\t; Turn off heater and continu\r\nG92 E0\t\t\t\t\t; Reset extruder position\r\nG1 E-8\t\t\t\t\t; Retract filament 8mm\r\nG1 E-5\t\t\t\t\t; Push back filament 3mm\r\nG92 E0\t\t\t\t\t; Reset extruder position\r\nT0\t\t\t\t\t; Select left extruder\r\nM140 S0\t\t\t\t\t; Turn off bed heater\r\n\r\n; =================================\t; Turn the rest off\r\nM107 \t\t\t\t; Turn off fan\r\nM84\t\t\t\t\t; Disable steppers\r\nM117 Print Complete" + } + } +} 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.def.json b/resources/definitions/flsun_qq.def.json index ce69317b33..02b3849c12 100644 --- a/resources/definitions/flsun_qq.def.json +++ b/resources/definitions/flsun_qq.def.json @@ -19,13 +19,13 @@ "default_value": true }, "machine_width": { - "default_value": 240 + "default_value": 260 }, "machine_height": { "default_value": 285 }, "machine_depth": { - "default_value": 240 + "default_value": 260 }, "machine_center_is_zero": { "default_value": true diff --git a/resources/definitions/flsun_qq_s.def.json b/resources/definitions/flsun_qq_s.def.json new file mode 100644 index 0000000000..9c3bf571ae --- /dev/null +++ b/resources/definitions/flsun_qq_s.def.json @@ -0,0 +1,71 @@ +{ + "version": 2, + "name": "FLSUN QQ-S", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Cataldo URSO", + "manufacturer": "FLSUN", + "file_formats": "text/x-gcode", + "has_materials": true, + "preferred_quality_type": "draft", + "machine_extruder_trains": { + "0": "flsun_qq_s_extruder_0" + } + }, + "overrides": { + "machine_center_is_zero": { + "default_value": true + }, + "machine_shape": { + "default_value": "elliptic" + }, + "machine_width": { + "default_value": 260 + }, + "machine_depth": { + "default_value": 260 + }, + "machine_height": { + "default_value": 370 + }, + "z_seam_type": { + "default_value": "back" + }, + "gantry_height": { + "value": "0" + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "material_diameter": { + "default_value": 1.75 + }, + "machine_start_gcode": { + "default_value": "G21\nG90\nM82\nM107 T0\nM190 S{material_bed_temperature}\nM109 S{material_print_temperature} T0\nG28\nG92 E0\nG0 E3 F200\nG92 E0\n" + }, + "machine_end_gcode": { + "default_value": "M107 T0\nM104 S0\nM104 S0 T1\nM140 S0\nG92 E0\nG91\nG1 E-1 F300 \nG1 Z+0.5 E-5 X-20 Y-20 F9000\nG28 X0 Y0\nM84 ;steppers off\nG90 ;absolute positioning\n" + }, + "infill_sparse_density": { + "default_value": 10 + }, + "machine_head_with_fans_polygon": { + "default_value": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ] + }, + "retraction_enable": { + "default_value": true + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_gcode_flavor": { + "default_value": "Repetier" + } + } +} diff --git a/resources/definitions/geeetech_a30.def.json b/resources/definitions/geeetech_a30.def.json new file mode 100644 index 0000000000..a700f4e473 --- /dev/null +++ b/resources/definitions/geeetech_a30.def.json @@ -0,0 +1,121 @@ +{ + "version": 2, + "name": "Geeetech A30", + "inherits": "fdmprinter", + "metadata": { + "author": "William & Cataldo URSO", + "manufacturer": "Shenzhen Geeetech Technology", + "file_formats": "text/x-gcode", + "visible": true, + "has_materials": true, + "preferred_quality_type": "draft", + "machine_extruder_trains": { + "0": "geeetech_a30_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "Geeetech A30" + }, + "machine_start_gcode": { + "default_value": "G28 ;Home\nM190 S{material_bed_temperature}\nM109 S{material_print_temperature} T0\nG1 Z15.0 F6000 ;Move the platform down 15mm\nG92 E0\nG1 F200 E3\nG92 E0" + }, + "machine_end_gcode": { + "default_value": "M104 S0;Cooling the heat end\nM140 S0;Cooling the heat bed\nG92 E1\nG1 E-1 F300\nG28 X0 Y0;Home X axis and Y axis\nM84" + }, + "machine_width": { + "default_value": 320 + }, + "machine_height": { + "default_value": 420 + }, + "machine_depth": { + "default_value": 320 + }, + "machine_heated_bed": { + "default_value": true + }, + "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.1 + }, + "layer_height_0": { + "default_value": 0.3 + }, + "retraction_amount": { + "default_value": 2 + }, + "retraction_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], + [18, 35], + [18, -18], + [-75, -18] + ] + }, + "gantry_height": { + "value": "55" + }, + "machine_max_feedrate_x": { + "default_value": 300 + }, + "machine_max_feedrate_y": { + "default_value": 300 + }, + "machine_max_feedrate_z": { + "default_value": 7 + }, + "machine_max_feedrate_e": { + "default_value": 50 + }, + "machine_max_acceleration_x": { + "default_value": 2000 + }, + "machine_max_acceleration_y": { + "default_value": 2000 + }, + "machine_max_acceleration_z": { + "default_value": 100 + }, + "machine_max_acceleration_e": { + "default_value": 10000 + }, + "machine_acceleration": { + "default_value": 2000 + }, + "machine_max_jerk_xy": { + "default_value": 10 + }, + "machine_max_jerk_z": { + "default_value": 1 + }, + "machine_max_jerk_e": { + "default_value": 5 + }, + "machine_gcode_flavor": { + "default_value": "Repetier" + } + } +} 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/hellbot_adonis.def.json b/resources/definitions/hellbot_adonis.def.json new file mode 100644 index 0000000000..a73c66a611 --- /dev/null +++ b/resources/definitions/hellbot_adonis.def.json @@ -0,0 +1,32 @@ +{ + "version": 2, + "name": "Hellbot Adonis", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "MUX team", + "manufacturer": "Hellbot", + "file_formats": "text/x-gcode", + "platform": "hellbot_adonis.obj", + "platform_texture": "hellbot.png", + "platform_offset": [0, -1, 0], + "has_materials": true, + "machine_extruder_trains": { + "0": "hellbot_adonis_extruder" + } + }, + "overrides": { + "machine_name": { + "default_value": "Hellbot Adonis" + }, + "machine_width": { + "default_value": 160 + }, + "machine_depth": { + "default_value": 160 + }, + "machine_height": { + "default_value": 160 + } + } +} diff --git a/resources/definitions/hellbot_magna_I.def.json b/resources/definitions/hellbot_magna_I.def.json new file mode 100644 index 0000000000..453dcef718 --- /dev/null +++ b/resources/definitions/hellbot_magna_I.def.json @@ -0,0 +1,32 @@ +{ + "version": 2, + "name": "Hellbot Magna 1", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "MUX team", + "manufacturer": "Hellbot", + "file_formats": "text/x-gcode", + "platform": "hellbot_magna.obj", + "platform_texture": "hellbot.png", + "platform_offset": [0, -1, 0], + "has_materials": true, + "machine_extruder_trains": { + "0": "hellbot_magna_i_extruder" + } + }, + "overrides": { + "machine_name": { + "default_value": "Hellbot Magna 1" + }, + "machine_width": { + "default_value": 220 + }, + "machine_depth": { + "default_value": 220 + }, + "machine_height": { + "default_value": 260 + } + } +} diff --git a/resources/definitions/hellbot_magna_dual.def.json b/resources/definitions/hellbot_magna_dual.def.json new file mode 100644 index 0000000000..5ee36e0749 --- /dev/null +++ b/resources/definitions/hellbot_magna_dual.def.json @@ -0,0 +1,36 @@ +{ + "version": 2, + "name": "Hellbot Magna DUAL", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "MUX team", + "manufacturer": "Hellbot", + "file_formats": "text/x-gcode", + "platform": "hellbot_magna.obj", + "platform_texture": "hellbot.png", + "platform_offset": [0, -1, 0], + "has_materials": true, + "machine_extruder_trains": { + "0": "hellbot_magna_dual_extruder_1", + "1": "hellbot_magna_dual_extruder_2" + } + }, + "overrides": { + "machine_name": { + "default_value": "Hellbot Magna DUAL" + }, + "machine_width": { + "default_value": 220 + }, + "machine_depth": { + "default_value": 220 + }, + "machine_height": { + "default_value": 260 + }, + "machine_extruder_count": { + "default_value": 2 + } + } +} 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 4e6a9d03ba..ca031f26bf 100644 --- a/resources/definitions/hms434.def.json +++ b/resources/definitions/hms434.def.json @@ -5,13 +5,28 @@ "metadata": { "visible": true, "author": "Scheepers", - "manufacturer": "MaukCC", + "manufacturer": "Hybrid AM Systems", "file_formats": "text/x-gcode", "has_materials": true, - "has_machine_materials": false, "preferred_material": "generic_pla", - "exclude_materials": [ "chromatik_pla", "fabtotum_abs", "fabtotum_nylon", "fabtotum_pla", "fabtotum_tpu", "fiberlogy_hd_pla", "filo3d_pla", "filo3d_pla_green", "filo3d_pla_red", "imade3d_petg_green", "imade3d_petg_pink", "imade3d_pla_green", "imade3d_pla_pink", "innofill_innoflex60_175", "octofiber_pla", "imade3d_pla", "polyflex_pla", "polymax_pla", "polyplus_pla", "polywood_pla", "tizyx_abs", "tizyx_pla", "tizyx_pla_bois", "verbatim_bvoh_175", "Vertex_Delta_ABS", "Vertex_Delta_PET", "Vertex_Delta_PLA", "Vertex_Delta_TPU", "zyyx_pro_flex", "zyyx_pro_pla", "generic_cpe_175", "generic_nylon_175", "dsm_arnitel2045_175", "dsm_novamid1070_175", "generic_tpu_175", "generic_pc_175" ], + "exclude_materials": [ + "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", + "generic_abs_175", "generic_cpe_175", "generic_hips_175", "generic_nylon_175", "generic_pc_175", "generic_petg_175", "generic_pva_175", "generic_tpu_175", + "imade3d_petg_175", "imade3d_pla_175", + "innofill_innoflex60_175", + "octofiber_pla", + "polyflex_pla", "polymax_pla", "polyplus_pla", "polywood_pla", + "verbatim_bvoh_175", + "Vertex_Delta_ABS", "Vertex_Delta_PET", "Vertex_Delta_PLA", "Vertex_Delta_PLA_Glitter", "Vertex_Delta_PLA_Mat", "Vertex_Delta_PLA_Satin", "Vertex_Delta_PLA_Wood", "Vertex_Delta_TPU", + "tizyx_abs", "tizyx_flex", "tizyx_petg", "tizyx_pla", "tizyx_pla_bois", "tizyx_pva", + "zyyx_pro_flex", "zyyx_pro_pla" + ], "has_variants": true, "variants_name": "Tool", @@ -42,16 +57,18 @@ "machine_extruder_count": {"default_value": 2 }, "material_diameter": {"default_value": 1.75 }, "machine_heated_bed": {"default_value": true }, + "machine_heated_build_volume":{"default_value": true }, "machine_center_is_zero": {"default_value": false }, "gantry_height": {"value": "35" }, "machine_height": {"default_value": 400 }, "machine_depth": {"default_value": 325 }, "machine_width": {"default_value": 450 }, "machine_gcode_flavor": {"default_value": "RepRap (RepRap)" }, - "material_print_temp_wait": {"default_value": true}, - "material_bed_temp_wait": {"default_value": true }, - "machine_max_feedrate_z": {"default_value": 1200 }, - "machine_start_gcode": {"default_value": "\n;Neither MaukCC nor any of MaukCC representatives has any liabilities or gives any warranties on this .gcode file, or on any or all objects made with this .gcode file. \nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\n\nG1 X-71 F9000;go to wipe point\nG1 Y-100 F9000\nG1 Z0 F900\n\nG1 Z0.2 F900\n\nG1 Y-65 F12000\nG1 X50 Y0 F9000\nM117 HMS434 Printing ...\n\n" }, + "material_print_temp_wait": {"default_value": false }, + "material_bed_temp_wait": {"default_value": false }, + "machine_max_feedrate_z": {"default_value": 10 }, + "machine_acceleration": {"default_value": 1000 }, + "machine_start_gcode": {"default_value": "\n;Neither Hybrid AM Systems nor any of Hybrid AM Systems representatives has any liabilities or gives any warranties on this .gcode file, or on any or all objects made with this .gcode file.\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\n\nG1 X-44 Y-100 F9000;go to wipe point\nG1 Z0 F900\nG1 Z0.2 F900\nM117 HMS434 Printing ...\n\n" }, "machine_end_gcode": {"default_value": "" }, "retraction_extra_prime_amount": {"minimum_value_warning": "-2.0" }, @@ -72,10 +89,16 @@ "top_layers": {"value": "4" }, "bottom_layers": {"value": "(top_layers)" }, "wall_0_inset": {"value": "0" }, + "outer_inset_first": {"value": true }, "alternate_extra_perimeter": {"value": false }, "filter_out_tiny_gaps": {"value": false }, "fill_outline_gaps": {"value": true }, "skin_outline_count": {"value": "0"}, + "ironing_enabled": {"value": true }, + "ironing_line_spacing": {"value": "line_width"}, + "ironing_flow": {"value": "0"}, + "ironing_inset": {"value": "line_width"}, + "speed_ironing": {"value": "150"}, "infill_sparse_density": {"value": 30}, "infill_pattern": {"value": "'lines'"}, @@ -89,7 +112,7 @@ "maximum_value_warning": "material_print_temperature + 15"}, "material_final_print_temperature": {"value": "material_print_temperature"}, "material_bed_temperature_layer_0": {"value": "material_bed_temperature + 1"}, - "material_flow": {"value": "120 if infill_sparse_density < 95 else 115"}, + "material_flow": {"value": "100"}, "retraction_amount": {"value": "1"}, "retraction_speed": {"value": "20"}, "retraction_prime_speed": {"value": "8"}, @@ -104,15 +127,15 @@ "speed_wall_x": {"value": "speed_wall"}, "speed_layer_0": {"value": "(speed_print/5*4) if speed_print < 51 else speed_print"}, "speed_topbottom": {"value": "speed_layer_0"}, - "speed_travel": {"value": "100"}, + "speed_travel": {"value": "150"}, "speed_travel_layer_0": {"value": "speed_travel"}, "speed_support_interface": {"value": "speed_topbottom"}, - "max_feedrate_z_override": {"value": 10}, + "speed_z_hop": {"value": 10}, "speed_slowdown_layers": {"value": 1}, - "acceleration_print": {"value": 200}, - "acceleration_travel": {"value": 200}, - "jerk_print": {"value": 5}, - "jerk_travel": {"value": 5}, + "acceleration_print": {"value": 1000}, + "acceleration_travel": {"value": 1000}, + "jerk_print": {"value": 10}, + "jerk_travel": {"value": 10}, "retraction_hop_enabled": {"value": false}, "retraction_hop": {"value": 1}, @@ -132,7 +155,7 @@ "support_interface_height": {"value": 0.5}, "support_interface_pattern": {"value": "'lines'"}, - "adhesion_type": {"value": "'skirt'"}, + "adhesion_type": {"value": "'none'"}, "skirt_gap": {"value": 1}, "skirt_brim_minimal_length": {"value": 50}, diff --git a/resources/definitions/imade3d_jellybox.def.json b/resources/definitions/imade3d_jellybox.def.json index ae9ca176f5..635cb1fdd0 100644 --- a/resources/definitions/imade3d_jellybox.def.json +++ b/resources/definitions/imade3d_jellybox.def.json @@ -1,19 +1,16 @@ { "version": 2, - "name": "IMADE3D JellyBOX", - "inherits": "fdmprinter", + "name": "IMADE3D JellyBOX Original", + "inherits": "imade3d_jellybox_root", "metadata": { "visible": true, "author": "IMADE3D", - "manufacturer": "IMADE3D", "platform": "imade3d_jellybox_platform.stl", "platform_offset": [ 0, -0.3, 0], - "file_formats": "text/x-gcode", "preferred_variant_name": "0.4 mm", "preferred_quality_type": "fast", "has_materials": true, "has_variants": true, - "has_machine_materials": true, "has_machine_quality": true, "machine_extruder_trains": { "0": "imade3d_jellybox_extruder_0" @@ -22,18 +19,15 @@ "overrides": { "machine_head_with_fans_polygon": { "default_value": [[ 0, 0 ],[ 0, 0 ],[ 0, 0 ],[ 0, 0 ]]}, - "machine_name": { "default_value": "IMADE3D JellyBOX" }, + "machine_name": { "default_value": "IMADE3D JellyBOX Original" }, "machine_width": { "default_value": 170 }, "machine_height": { "default_value": 145 }, "machine_depth": { "default_value": 160 }, - "machine_heated_bed": { "default_value": true }, - "machine_center_is_zero": { "default_value": false }, - "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": ";---------------------------------------\n; ; ; Jellybox Start Script Begin ; ; ;\n;_______________________________________\n; M92 E140 ;optionally adjust steps per mm for your filament\n\n; Print Settings Summary\n; (leave these alone: this is only a list of the slicing settings)\n; (overwriting these values will NOT change your printer's behavior)\n; sliced for : {machine_name}\n; nozzle diameter : {machine_nozzle_size}\n; filament diameter : {material_diameter}\n; layer height : {layer_height}\n; 1st layer height : {layer_height_0}\n; line width : {line_width}\n; outer wall wipe dist. : {wall_0_wipe_dist}\n; infill line width : {infill_line_width}\n; wall thickness : {wall_thickness}\n; top thickness : {top_thickness}\n; bottom thickness : {bottom_thickness}\n; infill density : {infill_sparse_density}\n; infill pattern : {infill_pattern}\n; print temperature : {material_print_temperature}\n; 1st layer print temp. : {material_print_temperature_layer_0}\n; heated bed temperature : {material_bed_temperature}\n; 1st layer bed temp. : {material_bed_temperature_layer_0}\n; regular fan speed : {cool_fan_speed_min}\n; max fan speed : {cool_fan_speed_max}\n; retraction amount : {retraction_amount}\n; retr. retract speed : {retraction_retract_speed}\n; retr. prime speed : {retraction_prime_speed}\n; build plate adhesion : {adhesion_type}\n; support ? {support_enable}\n; spiralized ? {magic_spiralize}\n\nM117 Preparing ;write Preparing\nM140 S{material_bed_temperature_layer_0} ;set bed temperature and move on\nM109 S{material_print_temperature} ; wait for the extruder to reach desired temperature\nM206 X10.0 Y0.0 ;set x homing offset for default bed leveling\nG21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nM82 ;set extruder to absolute mode\nG28 ;home all axes\nM203 Z4 ;slow Z speed down for greater accuracy when probing\nG29 ;auto bed leveling procedure\nM203 Z7 ;pick up z speed again for printing\nM190 S{material_bed_temperature_layer_0} ;wait for the bed to reach desired temperature\nM109 S{material_print_temperature_layer_0} ;wait for the extruder to reach desired temperature\nG92 E0 ;reset the extruder position\nG1 F1500 E15 ;extrude 15mm of feed stock\nG92 E0 ;reset the extruder position again\nM117 Print starting ;write Print starting\n;---------------------------------------------\n; ; ; Jellybox Printer Start Script End ; ; ;\n;_____________________________________________\n" + "default_value": ";---------------------------------------\n; ; ; Jellybox Start Script Begin ; ; ;\n;_______________________________________\n; for slicer: CURA 3\n; start gcode last modified Jun 1, 2019\n\n; Print Settings Summary\n; (leave these alone: this is only a list of the slicing settings)\n; (overwriting these values will NOT change your printer's behavior)\n; sliced for : {machine_name}\n; jobname : {jobname}\n; gcode generated : {day}, {date}, {time}\n; est. print time : {print_time}\n; nozzle diameter : {machine_nozzle_size}\n; filament diameter : {material_diameter}\n; layer height : {layer_height}\n; 1st layer height : {layer_height_0}\n; line width : {line_width} \n; outer wall wipe dist. : {wall_0_wipe_dist}\n; infill line width : {infill_line_width}\n; wall thickness : {wall_thickness}\n; top thickness : {top_thickness}\n; bottom thickness : {bottom_thickness}\n; infill density : {infill_sparse_density}\n; infill pattern : {infill_pattern}\n; print temperature : {material_print_temperature}\n; 1st layer print temp. : {material_print_temperature_layer_0}\n; heated bed temperature : {material_bed_temperature}\n; 1st layer bed temp. : {material_bed_temperature_layer_0}\n; regular fan speed : {cool_fan_speed_min}\n; max fan speed : {cool_fan_speed_max}\n; retraction amount : {retraction_amount}\n; retr. retract speed : {retraction_retract_speed}\n; retr. prime speed : {retraction_prime_speed}\n; build plate adhesion : {adhesion_type}\n; support ? {support_enable}\n; spiralized ? {magic_spiralize}\n\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nM117 Preparing ;write Preparing\nM190 S{material_bed_temperature_layer_0} ;wait for the bed to reach desired temperature\nM109 S180 ;wait for the extruder to reach 180C\nG28 ;home all axes\nM203 Z4 ;slow Z speed down for greater accuracy when probing\nG29 O ;run auto bed leveling procedure IF leveling not active already\n; M500 ;optionally save the mesh\nM203 Z7 ;pick up z speed again for printing\nG28 X ;home x to get as far from the plate as possible\nM420 S1 ;(re) enable bed leveling if turned off by the G28\nG0 Y0 F5000 ;position Y in front\nG0 Z15 F3000 ;position Z\nM109 S{material_print_temperature_layer_0} ;wait for the extruder to reach desired temperature\nM300 S440 P300 ;play a tone\n; M0 Ready! Click to start ; optionally, stop and wait for user to continue\nM420 S1 ;(re) enable bed leveling to make iron-sure\nM117 Print starting ;write Print starting\n;================ ;PRINT:LINE start\nG90 ;absolute positioning\nG92 E0 ;reset the extruder position\nM420 S1 ;(re) enable bed leveling to make iron-sure\nG0 Z0 ;get Z down\nM83 ;relative extrusion mode\nM420 S1 ;(re) enable bed leveling to make iron-sure\nG1 E20 F300 ;extrude __mm of feed stock\nG1 E18 F250 ;extrude __mm of feed stock\nG1 E10 F250 ;extrude __mm of feed stock\nG4 S2 ;pause for ooze\nM400 ;make sure all is finished\nM420 S1 ;(re) enable bed leveling to make iron-sure\nG0 F500 X3 Y0 Z0.3;get to the start of the LINE\nG1 E2 F300 ;extrude __mm of feed stock\nG1 F1000 X152 E7 ;print a thick LINE extruding __mm along the way\nG92 E0 ;reset the extruder position\n;---------------------------------------------\n; ; ; Jellybox Printer Start Script End ; ; ;\n;_____________________________________________\n" }, "machine_end_gcode": { - "default_value": "\n;---------------------------------\n;;; Jellybox End Script Begin ;;;\n;_________________________________\nM117 Finishing Up ;write Finishing Up\n\nM104 S0 ;extruder heater off\nM140 S0 ;bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG90 ;absolute positioning\nG28 X ;home x, so the head is out of the way\nG1 Y100 ;move Y forward, so the print is more accessible\nM84 ;steppers off\n\nM117 Print finished ;write Print finished\n;---------------------------------------\n;;; Jellybox End Script End ;;;\n;_______________________________________" + "default_value": "\n;---------------------------------\n;;; Jellybox End Script Begin ;;;\n;_________________________________\n; end gcode last modified Nov 30, 2018\nM117 Finishing Up ;write Finishing Up\n\nM107 ;turn the fan off\nM104 S0 ;extruder heater off\nM140 S0 ;bed heater off (if you have it)\nG91 ;relative positioning (includes extruder)\nG1 E-1 F2500 ;retract the filament a bit before lifting the nozzle to release some of the pressure\nG1 Z0.5 E-4 X-10 F9000 ;get out and retract filament even more\nG1 E-25 F2500 ;retract even more\nG90 ;absolute positioning (includes extruder)\nG28 X ;home X so the head is out of the way\nG1 Y140 ;move Y forward, so the print is more accessible\nM84 ;steppers off\n\nM117 Print finished ;write Print finished\n;---------------------------------------\n;;; Jellybox End Script End ;;;\n;_______________________________________" } } } diff --git a/resources/definitions/imade3d_jellybox_2.def.json b/resources/definitions/imade3d_jellybox_2.def.json new file mode 100644 index 0000000000..7d7b82e194 --- /dev/null +++ b/resources/definitions/imade3d_jellybox_2.def.json @@ -0,0 +1,36 @@ +{ + "version": 2, + "name": "IMADE3D JellyBOX 2", + "inherits": "imade3d_jellybox_root", + "metadata": { + "visible": true, + "author": "IMADE3D", + "platform": "imade3d_jellybox_2_platform.stl", + "platform_offset": [ 0, -10, 0], + "preferred_variant_name": "0.4 mm", + "preferred_quality_type": "fast", + "has_materials": true, + "has_variants": true, + "has_machine_quality": true, + "machine_extruder_trains": { + "0": "imade3d_jellybox_2_extruder_0" + } + }, + + "overrides": { + "gradual_infill_steps":{"default_value": 0}, + "gradual_infill_step_height": {"default_value": 3}, + "machine_head_with_fans_polygon": { "default_value": [[ 0, 0 ],[ 0, 0 ],[ 0, 0 ],[ 0, 0 ]]}, + "machine_name": { "default_value": "IMADE3D JellyBOX 2" }, + "machine_width": { "default_value": 180 }, + "machine_height": { "default_value": 145 }, + "machine_depth": { "default_value": 165 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "machine_start_gcode": { + "default_value": ";---------------------------------------\n; ; ; Jellybox Start Script Begin ; ; ;\n;_______________________________________\n; for slicer: CURA 3\n; start gcode last modified Jun 1, 2019\n\n; Print Settings Summary\n; (leave these alone: this is only a list of the slicing settings)\n; (overwriting these values will NOT change your printer's behavior)\n; sliced for : {machine_name}\n; jobname : {jobname}\n; gcode generated : {day}, {date}, {time}\n; est. print time : {print_time}\n; nozzle diameter : {machine_nozzle_size}\n; filament diameter : {material_diameter}\n; layer height : {layer_height}\n; 1st layer height : {layer_height_0}\n; line width : {line_width} \n; outer wall wipe dist. : {wall_0_wipe_dist}\n; infill line width : {infill_line_width}\n; wall thickness : {wall_thickness}\n; top thickness : {top_thickness}\n; bottom thickness : {bottom_thickness}\n; infill density : {infill_sparse_density}\n; infill pattern : {infill_pattern}\n; print temperature : {material_print_temperature}\n; 1st layer print temp. : {material_print_temperature_layer_0}\n; heated bed temperature : {material_bed_temperature}\n; 1st layer bed temp. : {material_bed_temperature_layer_0}\n; regular fan speed : {cool_fan_speed_min}\n; max fan speed : {cool_fan_speed_max}\n; retraction amount : {retraction_amount}\n; retr. retract speed : {retraction_retract_speed}\n; retr. prime speed : {retraction_prime_speed}\n; build plate adhesion : {adhesion_type}\n; support ? {support_enable}\n; spiralized ? {magic_spiralize}\n\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nM117 Preparing ;write Preparing\nM190 S{material_bed_temperature_layer_0} ;wait for the bed to reach desired temperature\nM109 S180 ;wait for the extruder to reach 180C\nG28 ;home all axes\nM203 Z4 ;slow Z speed down for greater accuracy when probing\nG29 O ;run auto bed leveling procedure IF leveling not active already\n; M500 ;optionally save the mesh\nM203 Z7 ;pick up z speed again for printing\nG28 X ;home x to get as far from the plate as possible\nM420 S1 ;(re) enable bed leveling if turned off by the G28\nG0 Y0 F5000 ;position Y in front\nG0 Z15 F3000 ;position Z\nM109 S{material_print_temperature_layer_0} ;wait for the extruder to reach desired temperature\nM300 S440 P300 ;play a tone\n; M0 Ready! Click to start ; optionally, stop and wait for user to continue\nM420 S1 ;(re) enable bed leveling to make iron-sure\nM117 Print starting ;write Print starting\n;================ ;PRINT:LINE start\nG90 ;absolute positioning\nG92 E0 ;reset the extruder position\nM420 S1 ;(re) enable bed leveling to make iron-sure\nG0 Z0 ;get Z down\nM83 ;relative extrusion mode\nM420 S1 ;(re) enable bed leveling to make iron-sure\nG1 E20 F300 ;extrude __mm of feed stock\nG1 E18 F250 ;extrude __mm of feed stock\nG1 E10 F250 ;extrude __mm of feed stock\nG4 S2 ;pause for ooze\nM400 ;make sure all is finished\nM420 S1 ;(re) enable bed leveling to make iron-sure\nG0 F500 X3 Y0 Z0.3;get to the start of the LINE\nG1 E2 F300 ;extrude __mm of feed stock\nG1 F1000 X152 E7 ;print a thick LINE extruding __mm along the way\nG92 E0 ;reset the extruder position\n;---------------------------------------------\n; ; ; Jellybox Printer Start Script End ; ; ;\n;_____________________________________________\n" + }, + "machine_end_gcode": { + "default_value": "\n;---------------------------------\n;;; Jellybox End Script Begin ;;;\n;_________________________________\n; end gcode last modified Nov 30, 2018\nM117 Finishing Up ;write Finishing Up\n\nM107 ;turn the fan off\nM104 S0 ;extruder heater off\nM140 S0 ;bed heater off (if you have it)\nG91 ;relative positioning (includes extruder)\nG1 E-1 F2500 ;retract the filament a bit before lifting the nozzle to release some of the pressure\nG1 Z0.5 E-4 X-10 F9000 ;get out and retract filament even more\nG1 E-25 F2500 ;retract even more\nG90 ;absolute positioning (includes extruder)\nG28 X ;home X so the head is out of the way\nG1 Y140 ;move Y forward, so the print is more accessible\nM84 ;steppers off\n\nM117 Print finished ;write Print finished\n;---------------------------------------\n;;; Jellybox End Script End ;;;\n;_______________________________________" + } + } +} diff --git a/resources/definitions/imade3d_jellybox_root.def.json b/resources/definitions/imade3d_jellybox_root.def.json new file mode 100644 index 0000000000..52f541f1d4 --- /dev/null +++ b/resources/definitions/imade3d_jellybox_root.def.json @@ -0,0 +1,143 @@ +{ + "version": 2, + "name": "imade3d_jellybox_root", + "inherits": "fdmprinter", + "metadata": { + "author": "IMADE3D", + "manufacturer": "IMADE3D", + "category": "Ultimaker", + "visible": false, + "file_formats": "text/x-gcode", + "exclude_materials": [ + "chromatik_pla", + "dsm_arnitel2045_175", + "dsm_novamid1070_175", + "fabtotum_abs", + "fabtotum_nylon", + "fabtotum_pla", + "fabtotum_tpu", + "fiberlogy_hd_pla", + "filo3d_pla_green", + "filo3d_pla_red", + "filo3d_pla", + "generic_abs_175", + "generic_abs", + "generic_bam", + "generic_cpe_175", + "generic_cpe_plus", + "generic_cpe", + "generic_hips_175", + "generic_hips", + "generic_nylon_175", + "generic_nylon", + "generic_pc_175", + "generic_pc", + "generic_petg", + "generic_petg_175", + "generic_pla", + "generic_pla_175", + "generic_pp", + "generic_pva_175", + "generic_pva", + "generic_tough_pla", + "generic_tpu", + "imade3d_petg_green", + "imade3d_petg_pink", + "imade3d_pla_green", + "imade3d_pla_pink", + "innofill_innoflex60_175", + "octofiber_pla", + "polyflex_pla", + "polymax_pla", + "polyplus_pla", + "polywood_pla", + "tizyx_abs", + "tizyx_pla_bois", + "tizyx_pla", + "ultimaker_abs_black", + "ultimaker_abs_blue", + "ultimaker_abs_green", + "ultimaker_abs_grey", + "ultimaker_abs_orange", + "ultimaker_abs_pearl-gold", + "ultimaker_abs_red", + "ultimaker_abs_silver-metallic", + "ultimaker_abs_white", + "ultimaker_abs_yellow", + "ultimaker_bam", + "ultimaker_cpe_black", + "ultimaker_cpe_blue", + "ultimaker_cpe_dark-grey", + "ultimaker_cpe_green", + "ultimaker_cpe_light-grey", + "ultimaker_cpe_plus_black", + "ultimaker_cpe_plus_transparent", + "ultimaker_cpe_plus_white", + "ultimaker_cpe_red", + "ultimaker_cpe_transparent", + "ultimaker_cpe_white", + "ultimaker_cpe_yellow", + "ultimaker_nylon_black", + "ultimaker_nylon_transparent", + "ultimaker_pc_black", + "ultimaker_pc_transparent", + "ultimaker_pc_white", + "ultimaker_pla_black", + "ultimaker_pla_blue", + "ultimaker_pla_green", + "ultimaker_pla_magenta", + "ultimaker_pla_orange", + "ultimaker_pla_pearl-white", + "ultimaker_pla_red", + "ultimaker_pla_silver-metallic", + "ultimaker_pla_transparent", + "ultimaker_pla_white", + "ultimaker_pla_yellow", + "ultimaker_pp_transparent", + "ultimaker_pva", + "ultimaker_tough_pla_black", + "ultimaker_tough_pla_green", + "ultimaker_tough_pla_red", + "ultimaker_tough_pla_white", + "ultimaker_tpu_black", + "ultimaker_tpu_blue", + "ultimaker_tpu_red", + "ultimaker_tpu_white", + "verbatim_bvoh_175", + "Vertex_Delta_ABS", + "Vertex_Delta_PET", + "Vertex_Delta_PLA", + "Vertex_Delta_TPU", + "zyyx_pro_flex", + "zyyx_pro_pla" + ] + }, + "overrides": { + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "material_diameter": { + "default_value": 1.75 + }, + "material_print_temperature": { + "minimum_value": "0" + }, + "machine_center_is_zero": { + "default_value": false + }, + "machine_heated_bed": { + "default_value": true + }, + "material_bed_temperature": { + "minimum_value": "0" + }, + "material_standby_temperature": { + "minimum_value": "0" + }, + "relative_extrusion": + { + "value": true, + "enabled": true + } + } +} diff --git a/resources/definitions/innovo_inventor.def.json b/resources/definitions/innovo_inventor.def.json index 72a9ec3edb..13a8a7c59b 100644 --- a/resources/definitions/innovo_inventor.def.json +++ b/resources/definitions/innovo_inventor.def.json @@ -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 new file mode 100644 index 0000000000..ead0a5f9e7 --- /dev/null +++ b/resources/definitions/jgaurora_a3s.def.json @@ -0,0 +1,72 @@ +{ + "name": "JGAurora A3S", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Samuel Pinches", + "manufacturer": "JGAurora", + "file_formats": "text/x-gcode", + "preferred_quality_type": "normal", + "machine_extruder_trains": + { + "0": "jgaurora_a3s_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "JGAurora A3S" + }, + "machine_start_gcode": { + "default_value": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 ;home all axis\nG92 E0 ;zero the extruded length\nG1 Z1 F1000 ;move up slightly\nG1 X60.0 Z0 E9.0 F1000.0;intro line\nG1 X100.0 E21.5 F1000.0 ;continue line\nG92 E0 ;zero the extruded length again\n; -- end of START GCODE --" + }, + "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 ;move to the X-axis origin (Home)\nG0 Y200 F600 ;bring the bed to the front for easy print removal\nM84 ;turn off stepper motors\n; -- end of END GCODE --" + }, + "machine_width": { + "default_value": 205 + }, + "machine_height": { + "default_value": 205 + }, + "machine_depth": { + "default_value": 205 + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_center_is_zero": { + "default_value": false + }, + "gantry_height": { + "value": "10" + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "material_diameter": { + "default_value": 1.75 + }, + "layer_height_0": { + "default_value": 0.12 + }, + "wall_thickness": { + "default_value": 1.2 + }, + "speed_print": { + "default_value": 35 + }, + "support_enable": { + "default_value": true + }, + "retraction_enable": { + "default_value": true + }, + "retraction_amount": { + "default_value": 8 + }, + "retraction_speed": { + "default_value": 45 + } + } +} 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 cf92f2fc71..8dbf5a82bb 100644 --- a/resources/definitions/jgaurora_z_603s.def.json +++ b/resources/definitions/jgaurora_z_603s.def.json @@ -21,8 +21,8 @@ "default_value": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 ;home all axis\nM420 S1 ;turn on mesh bed levelling if enabled in firmware\nG92 E0 ;zero the extruded length\nG1 Z1 F1000 ;move up slightly\nG1 X60.0 Z0 E9.0 F1000.0;intro line\nG1 X100.0 E21.5 F1000.0 ;continue line\nG92 E0 ;zero the extruded length again\n; -- end of START GCODE --" }, "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 ;move to the X-axis origin (Home)\nG0 Y280 F600 ;bring the bed to the front for easy print removal\nM84 ;turn off stepper motors\n; -- end of 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..e14f601d7d --- /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_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/kossel_mini.def.json b/resources/definitions/kossel_mini.def.json index 91f374fb6d..d9c3b3d37f 100644 --- a/resources/definitions/kossel_mini.def.json +++ b/resources/definitions/kossel_mini.def.json @@ -5,7 +5,7 @@ "metadata": { "visible": true, "author": "Claudio Sampaio (Patola)", - "manufacturer": "Other", + "manufacturer": "Johann", "file_formats": "text/x-gcode", "platform": "kossel_platform.stl", "platform_offset": [0, -0.25, 0], diff --git a/resources/definitions/kossel_pro.def.json b/resources/definitions/kossel_pro.def.json index e104538b2c..f26c6ed068 100644 --- a/resources/definitions/kossel_pro.def.json +++ b/resources/definitions/kossel_pro.def.json @@ -5,7 +5,7 @@ "metadata": { "visible": true, "author": "Chris Petersen", - "manufacturer": "OpenBeam", + "manufacturer": "Johann", "file_formats": "text/x-gcode", "platform": "kossel_pro_build_platform.stl", "platform_offset": [0, -0.25, 0], diff --git a/resources/definitions/makeit_pro_l.def.json b/resources/definitions/makeit_pro_l.def.json index 92f98241da..d601a5c309 100644 --- a/resources/definitions/makeit_pro_l.def.json +++ b/resources/definitions/makeit_pro_l.def.json @@ -4,8 +4,8 @@ "inherits": "fdmprinter", "metadata": { "visible": true, - "author": "NA", - "manufacturer": "NA", + "author": "unknown", + "manufacturer": "MAKEiT 3D", "file_formats": "text/x-gcode", "has_materials": false, "machine_extruder_trains": @@ -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 1b3ae8098c..267646b647 100644 --- a/resources/definitions/makeit_pro_m.def.json +++ b/resources/definitions/makeit_pro_m.def.json @@ -4,8 +4,8 @@ "inherits": "fdmprinter", "metadata": { "visible": true, - "author": "NA", - "manufacturer": "NA", + "author": "unknown", + "manufacturer": "MAKEiT 3D", "file_formats": "text/x-gcode", "has_materials": false, "machine_extruder_trains": @@ -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 f2c01b3831..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"}, @@ -80,7 +77,6 @@ "raft_surface_layers": { "default_value": 1 }, "skirt_line_count": { "default_value": 2}, "brim_width" : { "default_value": 5}, - "start_layers_at_same_position": { "default_value": true}, "retraction_combing": { "default_value": "noskin" }, "retraction_amount" : { "default_value": 4.5}, "retraction_speed" : { "default_value": 40}, 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/monoprice_ultimate.def.json b/resources/definitions/monoprice_ultimate.def.json index 48290f0941..445347b54e 100644 --- a/resources/definitions/monoprice_ultimate.def.json +++ b/resources/definitions/monoprice_ultimate.def.json @@ -1,52 +1,48 @@ { - "version": 2, - "name": "Monoprice Ultimate", - "inherits": "wanhao_d6", - "metadata": { - "visible": true, - "author": "Danny Tuppeny", - "manufacturer": "monoprice", - "file_formats": "text/x-gcode", - "icon": "wanhao-icon.png", - "has_materials": true, - "platform": "wanhao_200_200_platform.obj", - "platform_texture": "Wanhaobackplate.png", - "machine_extruder_trains": { - "0": "wanhao_d6_extruder_0" + "version": 2, + "name": "Monoprice Ultimate", + "inherits": "wanhao_d6", + "metadata": { + "visible": true, + "author": "Danny Tuppeny", + "manufacturer": "Monoprice", + "file_formats": "text/x-gcode", + "icon": "wanhao-icon.png", + "has_materials": true, + "platform": "wanhao_200_200_platform.obj", + "platform_texture": "Wanhaobackplate.png", + "machine_extruder_trains": { + "0": "wanhao_d6_extruder_0" + }, + "platform_offset": [0, -28, 0] }, - "platform_offset": [ - 0, - -28, - 0 - ] - }, - "overrides": { - "machine_name": { - "default_value": "Monoprice Ultimate" - }, - "machine_max_acceleration_x": { - "default_value": 3000 - }, - "machine_max_acceleration_y": { - "default_value": 3000 - }, - "machine_max_acceleration_z": { - "default_value": 100 - }, - "machine_max_acceleration_e": { - "default_value": 500 - }, - "machine_acceleration": { - "default_value": 800 - }, - "machine_max_jerk_xy": { - "default_value": 10.0 - }, - "machine_max_jerk_z": { - "default_value": 0.4 - }, - "machine_max_jerk_e": { - "default_value": 1.0 + "overrides": { + "machine_name": { + "default_value": "Monoprice Ultimate" + }, + "machine_max_acceleration_x": { + "default_value": 3000 + }, + "machine_max_acceleration_y": { + "default_value": 3000 + }, + "machine_max_acceleration_z": { + "default_value": 100 + }, + "machine_max_acceleration_e": { + "default_value": 500 + }, + "machine_acceleration": { + "default_value": 800 + }, + "machine_max_jerk_xy": { + "default_value": 10.0 + }, + "machine_max_jerk_z": { + "default_value": 0.4 + }, + "machine_max_jerk_e": { + "default_value": 1.0 + } } - } } diff --git a/resources/definitions/nwa3d_a31.def.json b/resources/definitions/nwa3d_a31.def.json new file mode 100644 index 0000000000..6463ac2ca4 --- /dev/null +++ b/resources/definitions/nwa3d_a31.def.json @@ -0,0 +1,64 @@ +{ + "name": "NWA3D A31", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "DragonJe", + "manufacturer": "NWA 3D LLC", + "file_formats": "text/x-gcode", + "platform_offset": [0, 0, 0], + "has_materials": true, + "has_variants": true, + "variants_name": "Nozzle Size", + "preferred_variant_name": "Standard 0.4mm", + "preferred_quality_type": "normal", + "has_machine_quality": true, + "preferred_material": "generic_pla", + "machine_extruder_trains": + { + "0": "nwa3d_a31_extruder_0" + } + }, + + "overrides": { + "machine_name": { + "default_value": "NWA3D A31" + }, + "machine_width": { + "default_value": 300 + }, + "machine_height": { + "default_value": 400 + }, + "machine_depth": { + "default_value": 300 + }, + "machine_head_polygon": { + "default_value": [ + [-30, 34], + [-30, -32], + [30, -32], + [30, 34] + ] + }, + "gantry_height": { + "value": "30" + }, + "machine_heated_bed": { + "default_value": true + }, + "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/nwa3d_a5.def.json b/resources/definitions/nwa3d_a5.def.json index 2829b06927..4309e07184 100644 --- a/resources/definitions/nwa3d_a5.def.json +++ b/resources/definitions/nwa3d_a5.def.json @@ -10,8 +10,6 @@ "platform_offset": [0, 0, 0], "has_materials": true, "has_variants": false, - "has_machine_materials": true, - "has_variant_materials": false, "preferred_quality_type": "normal", "has_machine_quality": true, "preferred_material": "generic_pla", 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/peopoly_moai.def.json b/resources/definitions/peopoly_moai.def.json index 177a6a801e..8d7754a9ef 100644 --- a/resources/definitions/peopoly_moai.def.json +++ b/resources/definitions/peopoly_moai.def.json @@ -126,9 +126,6 @@ "adhesion_type": { "value": "'none'" }, - "acceleration_enabled": { - "value": "False" - }, "print_sequence": { "enabled": false }, @@ -251,10 +248,6 @@ "expand_skins_expand_distance": { "value": "( wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x ) / 2" }, - "max_feedrate_z_override": { - "value": 0, - "enabled": false - }, "flow_rate_max_extrusion_offset": { "enabled": 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/printrbot_simple.def.json b/resources/definitions/printrbot_simple.def.json index 4d1f368b6d..760ff383d1 100644 --- a/resources/definitions/printrbot_simple.def.json +++ b/resources/definitions/printrbot_simple.def.json @@ -5,7 +5,7 @@ "metadata": { "visible": true, "author": "Calvindog717", - "manufacturer": "PrintrBot", + "manufacturer": "Printrbot", "platform": "printrbot_simple_metal_platform.stl", "platform_offset": [0, -3.45, 0], "file_formats": "text/x-gcode", diff --git a/resources/definitions/printrbot_simple_extended.def.json b/resources/definitions/printrbot_simple_extended.def.json index c4cab54386..06c639f024 100644 --- a/resources/definitions/printrbot_simple_extended.def.json +++ b/resources/definitions/printrbot_simple_extended.def.json @@ -5,7 +5,7 @@ "metadata": { "visible": true, "author": "samsector", - "manufacturer": "PrintrBot", + "manufacturer": "Printrbot", "platform": "printrbot_simple_metal_upgrade.stl", "platform_offset": [0, -0.3, 0], "file_formats": "text/x-gcode", diff --git a/resources/definitions/prusa_i3.def.json b/resources/definitions/prusa_i3.def.json index dd6c87c046..581de6fd98 100644 --- a/resources/definitions/prusa_i3.def.json +++ b/resources/definitions/prusa_i3.def.json @@ -5,7 +5,7 @@ "metadata": { "visible": true, "author": "Quillford", - "manufacturer": "Prusajr", + "manufacturer": "Prusa3D", "file_formats": "text/x-gcode", "platform": "prusai3_platform.stl", "machine_extruder_trains": diff --git a/resources/definitions/prusa_i3_mk2.def.json b/resources/definitions/prusa_i3_mk2.def.json index 29407b0afd..5ae541049d 100644 --- a/resources/definitions/prusa_i3_mk2.def.json +++ b/resources/definitions/prusa_i3_mk2.def.json @@ -5,7 +5,7 @@ "metadata": { "visible": true, "author": "Apsu, Nounours2099", - "manufacturer": "Prusa Research", + "manufacturer": "Prusa3D", "file_formats": "text/x-gcode", "platform": "prusai3_platform.stl", "has_materials": true, @@ -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 aa5fcf6df9..b9628b9430 100644 --- a/resources/definitions/prusa_i3_xl.def.json +++ b/resources/definitions/prusa_i3_xl.def.json @@ -5,7 +5,7 @@ "metadata": { "visible": true, "author": "guigashm", - "manufacturer": "Prusajr", + "manufacturer": "Prusa3D", "file_formats": "text/x-gcode", "platform": "prusai3_xl_platform.stl", "machine_extruder_trains": diff --git a/resources/definitions/punchtec_connect_xl.def.json b/resources/definitions/punchtec_connect_xl.def.json index 1efdd226fd..b262daa445 100644 --- a/resources/definitions/punchtec_connect_xl.def.json +++ b/resources/definitions/punchtec_connect_xl.def.json @@ -17,15 +17,9 @@ "overrides": { "machine_head_polygon": { "default_value": [[ 0, 0], [ 0, 0], [ 0, 0], [ 0, 0]] }, - "speed_travel": { "default_value": 150 }, "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..a66559b393 100644 --- a/resources/definitions/rigid3d.def.json +++ b/resources/definitions/rigid3d.def.json @@ -25,23 +25,13 @@ "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..b4d0252075 100644 --- a/resources/definitions/rigid3d_3rdgen.def.json +++ b/resources/definitions/rigid3d_3rdgen.def.json @@ -25,20 +25,12 @@ "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..f50df0c47d 100644 --- a/resources/definitions/rigid3d_hobby.def.json +++ b/resources/definitions/rigid3d_hobby.def.json @@ -17,25 +17,17 @@ "overrides": { "machine_head_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..64909630d2 100644 --- a/resources/definitions/rigid3d_zero.def.json +++ b/resources/definitions/rigid3d_zero.def.json @@ -24,21 +24,11 @@ "machine_head_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/stereotech_start.def.json b/resources/definitions/stereotech_start.def.json index 26c4b6a3a2..e85893d811 100644 --- a/resources/definitions/stereotech_start.def.json +++ b/resources/definitions/stereotech_start.def.json @@ -5,12 +5,12 @@ "metadata": { "visible": true, "author": "Stereotech", - "manufacturer": "Other", + "manufacturer": "Stereotech LLC.", "file_formats": "text/x-gcode", "platform": "stereotech_start.stl", "icon": "icon_ultimaker2", - "platform_offset": [0, 0, 0], - "machine_extruder_trains": + "platform_offset": [0, 0, 0], + "machine_extruder_trains": { "0": "stereotech_start_extruder_0" } diff --git a/resources/definitions/strateo3d.def.json b/resources/definitions/strateo3d.def.json new file mode 100644 index 0000000000..4bf4e19aa4 --- /dev/null +++ b/resources/definitions/strateo3d.def.json @@ -0,0 +1,138 @@ +{ + "version": 2, + "name": "Strateo3D", + "inherits": "fdmprinter", + "metadata": + { + "author": "M.K", + "manufacturer": "eMotionTech", + "category": "Other", + "visible": true, + "file_formats": "text/x-gcode", + "has_machine_quality": true, + "has_materials": true, + "has_variants": true, + "preferred_variant_name": "Standard 0.6", + "preferred_material": "emotiontech_pla", + "preferred_quality_type": "e", + "variants_name": "Print Head", + "machine_extruder_trains": + { + "0": "strateo3d_right_extruder", + "1": "strateo3d_left_extruder" + } + }, + + "overrides": + { + "machine_name": { "default_value": "Strateo3D" }, + "machine_width": { "default_value": 600 }, + "machine_depth": { "default_value": 420 }, + "machine_height": { "default_value": 495 }, + "machine_heated_bed": { "default_value": true }, + "machine_heated_build_volume": { "default_value": true }, + "machine_center_is_zero": { "default_value": false }, + "machine_head_with_fans_polygon": { "default_value": [ [ -76, -51.8 ] , [ 25, -51.8 ] , [ 25, 38.2 ] , [ -76, 38.2 ] ] }, + "gantry_height": { "value": "40" }, + "machine_extruder_count": { "default_value": 2 }, + "machine_gcode_flavor": { "default_value": "Marlin" }, + "machine_start_gcode": { "default_value": "G28 \nG90 G1 X300 Y210 Z15 F6000 \nG92 E0" }, + "machine_end_gcode": { "default_value": "T1 \nM104 S0 \nT0 \nM104 S0 \nM140 S0 \nM141 S0 \nG91 \nG0 z1 \nG90 \nG28 \nM801.0 \nM84 \nM192" }, + "extruder_prime_pos_y": {"minimum_value": "0", "maximum_value": "machine_depth"}, + "extruder_prime_pos_x": {"minimum_value": "0", "maximum_value": "machine_width"}, + "machine_heat_zone_length": { "default_value": 7 }, + "default_material_print_temperature": { "maximum_value_warning": "350" }, + "material_print_temperature": { "maximum_value_warning": "350" }, + "material_print_temperature_layer_0": { "maximum_value_warning": "350" }, + "material_bed_temperature": { "maximum_value": "130" }, + "material_bed_temperature_layer_0": { "maximum_value": "130" }, + "extruder_prime_pos_abs": { "default_value": true }, + "machine_acceleration": { "default_value": 1500 }, + + "acceleration_enabled": { "value": false }, + "acceleration_print": { "value": "machine_acceleration" }, + "acceleration_wall": { "value": "math.ceil(acceleration_print * 1250 / acceleration_print)" }, + "acceleration_wall_0": { "value": "math.ceil(acceleration_print * 1000 / acceleration_print)" }, + "acceleration_topbottom": { "value": "math.ceil(acceleration_print * 1250 / acceleration_print)" }, + "acceleration_support": { "value": "acceleration_print" }, + "acceleration_support_interface": { "value": "acceleration_topbottom" }, + "acceleration_travel": { "value": "acceleration_print" }, + "acceleration_layer_0": { "value": "acceleration_topbottom" }, + "adaptive_layer_height_variation": { "default_value": 0.1 }, + "adaptive_layer_height_variation_step": { "default_value": 0.05 }, + "adhesion_type": { "default_value": "skirt" }, + "expand_skins_expand_distance": { "value": "wall_line_width_0 + wall_line_count * wall_line_width_x" }, + "gradual_infill_step_height": { "value": "layer_height*10" }, + "gradual_support_infill_step_height": { "value": "layer_height*7" }, + "infill_before_walls": { "default_value": false }, + "infill_overlap": { "value": "0" }, + "infill_wipe_dist": { "value": "0" }, + "jerk_enabled": { "value": "False" }, + "jerk_layer_0": { "value": "jerk_topbottom" }, + "jerk_prime_tower": { "value": "math.ceil(jerk_print * 15 / 25)" }, + "jerk_print": { "value": "25" }, + "jerk_support": { "value": "math.ceil(jerk_print * 15 / 25)" }, + "jerk_support_interface": { "value": "jerk_topbottom" }, + "jerk_topbottom": { "value": "math.ceil(jerk_print * 5 / 25)" }, + "jerk_wall": { "value": "math.ceil(jerk_print * 10 / 25)" }, + "jerk_wall_0": { "value": "math.ceil(jerk_wall * 5 / 10)" }, + "layer_start_x": { "value": "sum(extruderValues('machine_extruder_start_pos_x')) / len(extruderValues('machine_extruder_start_pos_x'))" }, + "layer_start_y": { "value": "sum(extruderValues('machine_extruder_start_pos_y')) / len(extruderValues('machine_extruder_start_pos_y'))" }, + "machine_min_cool_heat_time_window": { "value": "15" }, + "machine_nozzle_cool_down_speed": { "default_value": 0.50 }, + "machine_nozzle_heat_up_speed": { "default_value": 2.25 }, + "material_final_print_temperature": { "value": "material_print_temperature - 10" }, + "material_flow": { "default_value": 93 }, + "material_flow_layer_0": { "value": "math.ceil(material_flow*1)" }, + "material_initial_print_temperature": { "value": "material_print_temperature - 5" }, + "meshfix_maximum_resolution": { "value": "0.03" }, + "optimize_wall_printing_order": { "value": "True" }, + "prime_blob_enable": { "enabled": false, "default_value": false }, + "prime_tower_min_volume": { "default_value": 35 }, + "prime_tower_position_x": { "value": "machine_width/2 - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - 1" }, + "prime_tower_position_y": { "value": "machine_depth - prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - 1" }, + "retraction_amount": { "default_value": 1.5 }, + "retraction_combing": { "default_value": "all" }, + "retraction_combing_max_distance": { "default_value": 5 }, + "retraction_count_max": { "default_value": 15 }, + "retraction_hop": { "value": "2" }, + "retraction_hop_enabled": { "value": "extruders_enabled_count > 1" }, + "retraction_hop_only_when_collides": { "value": "True" }, + "retraction_min_travel": { "value": "3*line_width" }, + "retraction_prime_speed": { "value": "retraction_speed-10" }, + "retraction_speed": { "default_value": 25 }, + "skin_overlap": { "value": "10" }, + "skirt_brim_minimal_length": { "default_value": 333 }, + "speed_layer_0": { "value": "20" }, + "speed_travel_layer_0": { "value": "100" }, + "speed_prime_tower": { "value": "speed_topbottom" }, + "speed_print": { "value": "50" }, + "speed_support": { "value": "speed_wall" }, + "speed_support_interface": { "value": "speed_topbottom" }, + "speed_topbottom": { "value": "math.ceil(speed_print * 20/35)" }, + "speed_travel": { "value": "150" }, + "speed_wall": { "value": "math.ceil(speed_print * 3/4)" }, + "speed_wall_0": { "value": "math.ceil(speed_wall * 2/3)" }, + "speed_wall_x": { "value": "speed_wall" }, + "support_angle": { "value": "50" }, + "support_bottom_distance": {"value": "extruderValue(support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr, 'support_z_distance/2') if support_type == 'everywhere' else 0", "maximum_value_warning": "machine_nozzle_size*1.5" }, + "support_interface_enable": { "default_value": true }, + "support_interface_height": { "value": "layer_height*3" }, + "support_interface_offset": { "value": "support_offset" }, + "support_top_distance": {"value": "extruderValue(support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr, 'support_z_distance')", "maximum_value_warning": "machine_nozzle_size*1.5" }, + "support_use_towers": { "default_value": true }, + "support_xy_distance": { "value": "line_width * 1.7" }, + "support_xy_distance_overhang": { "value": "wall_line_width_0" }, + "support_z_distance": { "value": "layer_height*2", "maximum_value_warning": "machine_nozzle_size*1.5" }, + "switch_extruder_prime_speed": { "value": "retraction_prime_speed" }, + "switch_extruder_retraction_amount": { "value": "7" }, + "switch_extruder_retraction_speeds": {"value": "retraction_retract_speed"}, + "top_bottom_thickness": { "value": "3*layer_height", "minimum_value_warning": "layer_height*2" }, + "top_thickness": { "value": "top_bottom_thickness" }, + "top_layers": { "value": "0 if infill_sparse_density == 100 else math.ceil(round(top_thickness / resolveOrValue('layer_height'), 4))"}, + "bottom_thickness": { "value": "top_bottom_thickness-2*layer_height+layer_height_0" }, + "bottom_layers": { "value": "999999 if infill_sparse_density == 100 else math.ceil(round(((bottom_thickness-resolveOrValue('layer_height_0')) / resolveOrValue('layer_height'))+1, 4))"}, + "travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" }, + "wall_thickness": { "value": "wall_line_width_0 + wall_line_width_x" } + } +} \ No newline at end of file diff --git a/resources/definitions/structur3d_discov3ry1_complete_um2plus.def.json b/resources/definitions/structur3d_discov3ry1_complete_um2plus.def.json index b4f91d68d1..e4893cacac 100644 --- a/resources/definitions/structur3d_discov3ry1_complete_um2plus.def.json +++ b/resources/definitions/structur3d_discov3ry1_complete_um2plus.def.json @@ -1,6 +1,6 @@ { "version": 2, - "name": "Discov3ry Complete (Ultimaker 2+)", + "name": "Discov3ry Complete", "inherits": "fdmprinter", "metadata": { "author": "Andrew Finkle, CTO", @@ -14,9 +14,7 @@ "has_variants": true, "variants_name": "Print core", "preferred_variant_name": "0.84mm (Green)", - "has_machine_materials": true, "preferred_material": "structur3d_dap100silicone", - "has_variant_materials": false, "has_machine_quality": false, "preferred_quality_type": "extra_fast", "first_start_actions": [], @@ -57,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 2a23688eb8..211049ca3d 100644 --- a/resources/definitions/tam.def.json +++ b/resources/definitions/tam.def.json @@ -1,6 +1,6 @@ { "version": 2, - "name": "Type A Machines Series 1 2014", + "name": "Series 1 2014", "inherits": "fdmprinter", "metadata": { "visible": true, @@ -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_tornado.def.json b/resources/definitions/tevo_tornado.def.json index 871856e004..67f25ec9d8 100644 --- a/resources/definitions/tevo_tornado.def.json +++ b/resources/definitions/tevo_tornado.def.json @@ -13,7 +13,7 @@ } }, "overrides": { - "machine_name": { + "machine_name": { "default_value": "Tevo Tornado" }, "machine_width": { @@ -25,8 +25,8 @@ "machine_depth": { "default_value": 300 }, - "machine_center_is_zero": { - "default_value": false + "machine_center_is_zero": { + "default_value": false }, "machine_head_polygon": { "default_value": [ @@ -73,18 +73,36 @@ "value": "30" }, "acceleration_enabled": { - "default_value": false + "default_value": true }, - "machine_acceleration": { - "default_value": 1500 + "acceleration_print": { + "default_value": 500 + }, + "acceleration_travel": { + "value": 500 + }, + "acceleration_travel_layer_0": { + "value": 500 + }, + "machine_acceleration": { + "default_value": 1500 }, "jerk_enabled": { - "default_value": false + "default_value": true }, - "machine_max_jerk_xy": { - "default_value": 6 + "jerk_print": { + "default_value": 8 }, - "machine_gcode_flavor": { + "jerk_travel": { + "value": 8 + }, + "jerk_travel_layer_0": { + "value": 8 + }, + "machine_max_jerk_xy": { + "default_value": 6 + }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { diff --git a/resources/definitions/tizyx_evy.def.json b/resources/definitions/tizyx_evy.def.json index c90433d85a..57c7337196 100644 --- a/resources/definitions/tizyx_evy.def.json +++ b/resources/definitions/tizyx_evy.def.json @@ -10,7 +10,6 @@ "has_machine_quality": true, "has_materials": true, - "has_machine_materials": true, "has_variants": true, "preferred_variant_name": "0.4mm", @@ -51,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')))" }, @@ -69,6 +63,13 @@ "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\nG91\nG1 E-5 F300\nG1 Z+3 F3000\nG1 Y245 F3000\nM84" - } + }, + + "acceleration_enabled": {"value": "False"}, + "acceleration_print": {"value": "1500"}, + "z_seam_type": {"default_value": "back"}, + "z_seam_x": {"value": "127.5"}, + "z_seam_y": {"value": "250"}, + "retraction_combing": {"default_value": "off"} } } diff --git a/resources/definitions/tizyx_evy_dual.def.json b/resources/definitions/tizyx_evy_dual.def.json index aaa2756181..e06894139e 100644 --- a/resources/definitions/tizyx_evy_dual.def.json +++ b/resources/definitions/tizyx_evy_dual.def.json @@ -10,7 +10,6 @@ "has_machine_quality": true, "has_materials": true, - "has_machine_materials": true, "has_variants": true, "preferred_variant_name": "Classic Extruder", @@ -52,6 +51,13 @@ "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\nG91\nG1 E-5 F300\nG1 Z+3 F3000\nG1 Y245 F3000\nM84" - } + }, + + "acceleration_enabled": {"value": "False"}, + "acceleration_print": {"value": "1500"}, + "z_seam_type": {"default_value": "back"}, + "z_seam_x": {"value": "127.5"}, + "z_seam_y": {"value": "250"}, + "retraction_combing": {"default_value": "off"} } } diff --git a/resources/definitions/tizyx_k25.def.json b/resources/definitions/tizyx_k25.def.json index 28b4857d89..32fa9b331d 100644 --- a/resources/definitions/tizyx_k25.def.json +++ b/resources/definitions/tizyx_k25.def.json @@ -1,52 +1,60 @@ -{ - "version": 2, - "name": "TiZYX K25", - "inherits": "fdmprinter", - "metadata": - { - "visible": true, - "author": "TiZYX", - "manufacturer": "TiZYX", - "file_formats": "text/x-gcode", - "platform": "tizyx_k25_platform.stl", - "platform_offset": [0, -4, 0], - "exclude_materials": ["chromatik_pla", "dsm_arnitel2045_175", "dsm_novamid1070_175", "fabtotum_abs", "fabtotum_nylon", "fabtotum_pla", "fabtotum_tpu", "fiberlogy_hd_pla", "filo3d_pla", "filo3d_pla_green", "filo3d_pla_red", "generic_abs", "generic_abs_175", "generic_bam", "generic_cpe", "generic_cpe_175", "generic_cpe_plus", "generic_hips", "generic_hips_175", "generic_nylon", "generic_nylon_175", "generic_pc", "generic_pc_175", "generic_petg", "generic_petg_175", "generic_pla", "generic_pla_175", "generic_pp", "generic_pva", "generic_pva_175", "generic_tough_pla", "generic_tpu", "generic_tpu_175", "imade3d_petg_green", "imade3d_petg_pink", "imade3d_pla_green", "imade3d_pla_pink", "innofill_innoflex60_175", "octofiber_pla", "polyflex_pla", "polymax_pla", "polyplus_pla", "polywood_pla", "ultimaker_abs_black", "ultimaker_abs_blue", "ultimaker_abs_green", "ultimaker_abs_grey", "ultimaker_abs_orange", "ultimaker_abs_pearl-gold", "ultimaker_abs_red", "ultimaker_abs_silver-metallic", "ultimaker_abs_white", "ultimaker_abs_yellow", "ultimaker_bam", "ultimaker_cpe_black", "ultimaker_cpe_blue", "ultimaker_cpe_dark-grey", "ultimaker_cpe_green", "ultimaker_cpe_light-grey", "ultimaker_cpe_plus_black", "ultimaker_cpe_plus_transparent", "ultimaker_cpe_plus_white", "ultimaker_cpe_red", "ultimaker_cpe_transparent", "ultimaker_cpe_white", "ultimaker_cpe_yellow", "ultimaker_nylon_black", "ultimaker_nylon_transparent", "ultimaker_pc_black", "ultimaker_pc_transparent", "ultimaker_pc_white", "ultimaker_pla_black", "ultimaker_pla_blue", "ultimaker_pla_green", "ultimaker_pla_magenta", "ultimaker_pla_orange", "ultimaker_pla_pearl-white", "ultimaker_pla_red", "ultimaker_pla_silver-metallic", "ultimaker_pla_transparent", "ultimaker_pla_white", "ultimaker_pla_yellow", "ultimaker_pp_transparent", "ultimaker_pva", "ultimaker_tough_pla_black", "ultimaker_tough_pla_green", "ultimaker_tough_pla_red", "ultimaker_tough_pla_white", "ultimaker_tpu_black", "ultimaker_tpu_blue", "ultimaker_tpu_red", "ultimaker_tpu_white", "verbatim_bvoh_175", "Vertex_Delta_ABS", "Vertex_Delta_PET", "Vertex_Delta_PLA", "Vertex_Delta_TPU", "zyyx_pro_flex", "zyyx_pro_pla" ], - "preferred_material": "tizyx_pla", - "has_machine_quality": true, - "has_materials": true, - "has_variants": true, - "preferred_variant_name": "0.4 mm", - "machine_extruder_trains": - { - "0": "tizyx_k25_extruder_0" - } - }, - - "overrides": - { - "machine_name": { "default_value": "TiZYX K25" }, - "machine_heated_bed": { "default_value": true }, - "machine_width": { "default_value": 255 }, - "machine_height": { "default_value": 255 }, - "machine_depth": { "default_value": 255 }, - "machine_center_is_zero": { "default_value": false }, - "gantry_height": { "value": "500" }, - "machine_head_with_fans_polygon": { - "default_value": [ - [25, 49], - [25, -49], - [-25, -49], - [25, 49] - ] - }, - "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, - "machine_start_gcode": - { - "default_value": "M82\nG90\nG28 X\nG28 Y\nG28 Z\nG29\nG91\nG1 Z0\nG90\nM82\nG92 E0\nG1 X125 Y245 F3000\nG1 Z0" - }, - "machine_end_gcode": - { - "default_value": "M104 S0\nM140 S0\nG91\nG1 E-5 F300\nG1 Z+3 F3000\nG1 Y245 F3000\nM84" - } - } -} +{ + "version": 2, + "name": "TiZYX K25", + "inherits": "fdmprinter", + "metadata": + { + "visible": true, + "author": "TiZYX", + "manufacturer": "TiZYX", + "file_formats": "text/x-gcode", + "platform": "tizyx_k25_platform.stl", + "platform_offset": [0, -4, 0], + "exclude_materials": ["chromatik_pla", "dsm_arnitel2045_175", "dsm_novamid1070_175", "fabtotum_abs", "fabtotum_nylon", "fabtotum_pla", "fabtotum_tpu", "fiberlogy_hd_pla", "filo3d_pla", "filo3d_pla_green", "filo3d_pla_red", "generic_abs", "generic_abs_175", "generic_bam", "generic_cpe", "generic_cpe_175", "generic_cpe_plus", "generic_hips", "generic_hips_175", "generic_nylon", "generic_nylon_175", "generic_pc", "generic_pc_175", "generic_petg", "generic_petg_175", "generic_pla", "generic_pla_175", "generic_pp", "generic_pva", "generic_pva_175", "generic_tough_pla", "generic_tpu", "generic_tpu_175", "imade3d_petg_green", "imade3d_petg_pink", "imade3d_pla_green", "imade3d_pla_pink", "innofill_innoflex60_175", "octofiber_pla", "polyflex_pla", "polymax_pla", "polyplus_pla", "polywood_pla", "ultimaker_abs_black", "ultimaker_abs_blue", "ultimaker_abs_green", "ultimaker_abs_grey", "ultimaker_abs_orange", "ultimaker_abs_pearl-gold", "ultimaker_abs_red", "ultimaker_abs_silver-metallic", "ultimaker_abs_white", "ultimaker_abs_yellow", "ultimaker_bam", "ultimaker_cpe_black", "ultimaker_cpe_blue", "ultimaker_cpe_dark-grey", "ultimaker_cpe_green", "ultimaker_cpe_light-grey", "ultimaker_cpe_plus_black", "ultimaker_cpe_plus_transparent", "ultimaker_cpe_plus_white", "ultimaker_cpe_red", "ultimaker_cpe_transparent", "ultimaker_cpe_white", "ultimaker_cpe_yellow", "ultimaker_nylon_black", "ultimaker_nylon_transparent", "ultimaker_pc_black", "ultimaker_pc_transparent", "ultimaker_pc_white", "ultimaker_pla_black", "ultimaker_pla_blue", "ultimaker_pla_green", "ultimaker_pla_magenta", "ultimaker_pla_orange", "ultimaker_pla_pearl-white", "ultimaker_pla_red", "ultimaker_pla_silver-metallic", "ultimaker_pla_transparent", "ultimaker_pla_white", "ultimaker_pla_yellow", "ultimaker_pp_transparent", "ultimaker_pva", "ultimaker_tough_pla_black", "ultimaker_tough_pla_green", "ultimaker_tough_pla_red", "ultimaker_tough_pla_white", "ultimaker_tpu_black", "ultimaker_tpu_blue", "ultimaker_tpu_red", "ultimaker_tpu_white", "verbatim_bvoh_175", "Vertex_Delta_ABS", "Vertex_Delta_PET", "Vertex_Delta_PLA", "Vertex_Delta_TPU", "zyyx_pro_flex", "zyyx_pro_pla" ], + "preferred_material": "tizyx_pla", + "has_machine_quality": true, + "has_materials": true, + "has_variants": true, + "preferred_variant_name": "0.4 mm", + "machine_extruder_trains": + { + "0": "tizyx_k25_extruder_0" + } + }, + + "overrides": + { + "machine_name": { "default_value": "TiZYX K25" }, + "machine_heated_bed": { "default_value": true }, + "machine_width": { "default_value": 255 }, + "machine_height": { "default_value": 255 }, + "machine_depth": { "default_value": 255 }, + "machine_center_is_zero": { "default_value": false }, + "gantry_height": { "value": "500" }, + "machine_head_with_fans_polygon": { + "default_value": [ + [25, 49], + [25, -49], + [-25, -49], + [25, 49] + ] + }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, + "machine_start_gcode": + { + "default_value": "M82\nG90\nG28 X\nG28 Y\nG28 Z\nG29\nG91\nG1 Z0\nG90\nM82\nG92 E0\nG1 X125 Y245 F3000\nG1 Z0" + }, + "machine_end_gcode": + { + "default_value": "M104 S0\nM140 S0\nG91\nG1 E-5 F300\nG1 Z+3 F3000\nG1 Y245 F3000\nM84" + }, + + + "acceleration_enabled": {"value": "False"}, + "acceleration_print": {"value": "1500"}, + "z_seam_type": {"default_value": "back"}, + "z_seam_x": {"value": "127.5"}, + "z_seam_y": {"value": "250"}, + "retraction_combing": {"default_value": "off"} + } +} 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 f95d29c684..633e50bdba 100644 --- a/resources/definitions/ultimaker2_plus.def.json +++ b/resources/definitions/ultimaker2_plus.def.json @@ -12,7 +12,6 @@ "preferred_variant_name": "0.4 mm", "has_variants": true, "has_materials": true, - "has_machine_materials": true, "has_machine_quality": true, "exclude_materials": ["generic_hips", "generic_petg", "generic_bam", "ultimaker_bam", "generic_pva", "ultimaker_pva", "generic_tough_pla", "ultimaker_tough_pla_black", "ultimaker_tough_pla_green", "ultimaker_tough_pla_red", "ultimaker_tough_pla_white", "generic_cffcpe", "generic_cffpa", "generic_gffcpe", "generic_gffpa", "structur3d_dap100silicone" ], "first_start_actions": [], @@ -38,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/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index d2cd0376d3..b34ff3bdba 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -12,7 +12,6 @@ "platform_offset": [0, 0, 0], "has_machine_quality": true, "has_materials": true, - "has_machine_materials": true, "has_variants": true, "exclude_materials": [ "generic_hips", "generic_petg", "generic_cffcpe", "generic_cffpa", "generic_gffcpe", "generic_gffpa", "structur3d_dap100silicone" ], "preferred_variant_name": "AA 0.4", @@ -31,10 +30,13 @@ "id": 9066, "check_urls": [ - "http://software.ultimaker.com/releases/firmware/9066/stable/um-update.swu.version" + "https://software.ultimaker.com/releases/firmware/9066/stable/um-update.swu.version" ], "update_url": "https://ultimaker.com/firmware" - } + }, + "bom_numbers": [ + 9066 + ] }, @@ -79,7 +81,7 @@ "prime_tower_position_x": { "value": "machine_depth - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) - 30" }, "prime_tower_wipe_enabled": { "default_value": false }, - "prime_blob_enable": { "enabled": true, "default_value": true }, + "prime_blob_enable": { "enabled": true, "default_value": true, "value": "resolveOrValue('print_sequence') != 'one_at_a_time'" }, "acceleration_enabled": { "value": "True" }, "acceleration_layer_0": { "value": "acceleration_topbottom" }, diff --git a/resources/definitions/ultimaker3_extended.def.json b/resources/definitions/ultimaker3_extended.def.json index 43f7b94e61..ba9824896f 100644 --- a/resources/definitions/ultimaker3_extended.def.json +++ b/resources/definitions/ultimaker3_extended.def.json @@ -12,7 +12,6 @@ "platform_texture": "Ultimaker3Extendedbackplate.png", "platform_offset": [0, 0, 0], "has_machine_quality": true, - "has_machine_materials": true, "has_materials": true, "has_variants": true, "preferred_variant_name": "AA 0.4", @@ -28,10 +27,13 @@ "id": 9511, "check_urls": [ - "http://software.ultimaker.com/releases/firmware/9066/stable/um-update.swu.version" + "https://software.ultimaker.com/releases/firmware/9066/stable/um-update.swu.version" ], "update_url": "https://ultimaker.com/firmware" - } + }, + "bom_numbers": [ + 9511 + ] }, "overrides": { diff --git a/resources/definitions/ultimaker_s3.def.json b/resources/definitions/ultimaker_s3.def.json new file mode 100644 index 0000000000..7348c14a2a --- /dev/null +++ b/resources/definitions/ultimaker_s3.def.json @@ -0,0 +1,167 @@ +{ + "version": 2, + "name": "Ultimaker S3", + "inherits": "ultimaker", + "metadata": { + "author": "Ultimaker", + "manufacturer": "Ultimaker B.V.", + "category": "Ultimaker", + "visible": true, + "file_formats": "application/x-ufp;text/x-gcode", + "platform": "ultimaker_s3_platform.obj", + "platform_texture": "UltimakerS3backplate.png", + "platform_offset": [0, 0, 0], + "has_machine_quality": true, + "has_materials": true, + "has_variant_buildplates": false, + "has_variants": true, + "exclude_materials": [ "generic_hips", "generic_petg", "structur3d_dap100silicone" ], + "preferred_variant_name": "AA 0.4", + "preferred_quality_type": "normal", + "variants_name": "Print core", + "nozzle_offsetting_for_disallowed_areas": false, + "machine_extruder_trains": + { + "0": "ultimaker_s3_extruder_left", + "1": "ultimaker_s3_extruder_right" + }, + "first_start_actions": [ "DiscoverUM3Action" ], + "supported_actions": [ "DiscoverUM3Action" ], + "supports_usb_connection": false, + "weight": -1, + "firmware_update_info": { + "id": 213482, + "check_urls": ["https://software.ultimaker.com/releases/firmware/213482/stable/um-update.swu.version"], + "update_url": "https://ultimaker.com/firmware" + }, + "bom_numbers": [ + 213482 + ] + }, + + "overrides": { + "machine_name": { "default_value": "Ultimaker S3" }, + "machine_width": { "default_value": 230 }, + "machine_depth": { "default_value": 190 }, + "machine_height": { "default_value": 200 }, + "machine_heated_bed": { "default_value": true }, + "machine_nozzle_heat_up_speed": { "default_value": 1.4 }, + "machine_nozzle_cool_down_speed": { "default_value": 0.8 }, + "machine_head_with_fans_polygon": + { + "default_value": + [ + [ -41.4, -45.8 ], + [ -41.4, 36.0 ], + [ 63.3, 36.0 ], + [ 63.3, -45.8 ] + ] + }, + "machine_gcode_flavor": { "default_value": "Griffin" }, + "machine_max_feedrate_x": { "default_value": 300 }, + "machine_max_feedrate_y": { "default_value": 300 }, + "machine_max_feedrate_z": { "default_value": 40 }, + "machine_acceleration": { "default_value": 3000 }, + "gantry_height": { "value": "60" }, + "machine_extruder_count": { "default_value": 2 }, + "extruder_prime_pos_abs": { "default_value": true }, + "machine_start_gcode": { "default_value": "" }, + "machine_end_gcode": { "default_value": "" }, + "prime_tower_position_x": { "value": "345" }, + "prime_tower_position_y": { "value": "222.5" }, + "prime_blob_enable": { "enabled": true, "default_value": false }, + + "speed_travel": + { + "maximum_value": "150", + "value": "150" + }, + + "acceleration_enabled": { "value": "True" }, + "acceleration_layer_0": { "value": "acceleration_topbottom" }, + "acceleration_prime_tower": { "value": "math.ceil(acceleration_print * 2000 / 4000)" }, + "acceleration_print": { "value": "4000" }, + "acceleration_support": { "value": "math.ceil(acceleration_print * 2000 / 4000)" }, + "acceleration_support_interface": { "value": "acceleration_topbottom" }, + "acceleration_topbottom": { "value": "math.ceil(acceleration_print * 500 / 4000)" }, + "acceleration_wall": { "value": "math.ceil(acceleration_print * 1000 / 4000)" }, + "acceleration_wall_0": { "value": "math.ceil(acceleration_wall * 500 / 1000)" }, + "brim_width": { "value": "3" }, + "cool_fan_full_at_height": { "value": "layer_height_0 + 4 * layer_height" }, + "cool_fan_speed": { "value": "50" }, + "cool_fan_speed_max": { "value": "100" }, + "cool_min_speed": { "value": "5" }, + "infill_line_width": { "value": "round(line_width * 0.5 / 0.35, 2)" }, + "infill_overlap": { "value": "0" }, + "infill_pattern": { "value": "'triangles'" }, + "infill_wipe_dist": { "value": "0" }, + "jerk_enabled": { "value": "True" }, + "jerk_layer_0": { "value": "jerk_topbottom" }, + "jerk_prime_tower": { "value": "math.ceil(jerk_print * 15 / 25)" }, + "jerk_print": { "value": "25" }, + "jerk_support": { "value": "math.ceil(jerk_print * 15 / 25)" }, + "jerk_support_interface": { "value": "jerk_topbottom" }, + "jerk_topbottom": { "value": "math.ceil(jerk_print * 5 / 25)" }, + "jerk_wall": { "value": "math.ceil(jerk_print * 10 / 25)" }, + "jerk_wall_0": { "value": "math.ceil(jerk_wall * 5 / 10)" }, + "layer_height_0": { "value": "round(machine_nozzle_size / 1.5, 2)" }, + "layer_start_x": { "value": "sum(extruderValues('machine_extruder_start_pos_x')) / len(extruderValues('machine_extruder_start_pos_x'))" }, + "layer_start_y": { "value": "sum(extruderValues('machine_extruder_start_pos_y')) / len(extruderValues('machine_extruder_start_pos_y'))" }, + "line_width": { "value": "machine_nozzle_size * 0.875" }, + "machine_min_cool_heat_time_window": { "value": "15" }, + "default_material_print_temperature": { "value": "200" }, + "material_standby_temperature": { "value": "100" }, + "multiple_mesh_overlap": { "value": "0" }, + "prime_tower_enable": { "value": "True" }, + "raft_airgap": { "value": "0" }, + "raft_base_speed": { "value": "20" }, + "raft_base_thickness": { "value": "0.3" }, + "raft_interface_line_spacing": { "value": "0.5" }, + "raft_interface_line_width": { "value": "0.5" }, + "raft_interface_speed": { "value": "20" }, + "raft_interface_thickness": { "value": "0.2" }, + "raft_jerk": { "value": "jerk_layer_0" }, + "raft_margin": { "value": "10" }, + "raft_speed": { "value": "25" }, + "raft_surface_layers": { "value": "1" }, + "retraction_amount": { "value": "6.5" }, + "retraction_count_max": { "value": "10" }, + "retraction_extrusion_window": { "value": "1" }, + "retraction_hop": { "value": "2" }, + "retraction_hop_enabled": { "value": "extruders_enabled_count > 1" }, + "retraction_hop_only_when_collides": { "value": "True" }, + "retraction_min_travel": { "value": "5" }, + "retraction_prime_speed": { "value": "15" }, + "skin_overlap": { "value": "10" }, + "speed_equalize_flow_enabled": { "value": "True" }, + "speed_layer_0": { "value": "20" }, + "speed_prime_tower": { "value": "speed_topbottom" }, + "speed_print": { "value": "35" }, + "speed_support": { "value": "speed_wall_0" }, + "speed_support_interface": { "value": "speed_topbottom" }, + "speed_topbottom": { "value": "math.ceil(speed_print * 20 / 35)" }, + "speed_wall": { "value": "math.ceil(speed_print * 30 / 35)" }, + "speed_wall_0": { "value": "math.ceil(speed_wall * 20 / 30)" }, + "speed_wall_x": { "value": "speed_wall" }, + "support_angle": { "value": "45" }, + "support_pattern": { "value": "'triangles'" }, + "support_use_towers": { "value": "False" }, + "support_xy_distance": { "value": "wall_line_width_0 * 2.5" }, + "support_xy_distance_overhang": { "value": "wall_line_width_0" }, + "support_z_distance": { "value": "0" }, + "switch_extruder_prime_speed": { "value": "15" }, + "switch_extruder_retraction_amount": { "value": "8" }, + "top_bottom_thickness": { "value": "1" }, + "travel_avoid_supports": { "value": "True" }, + "travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" }, + "wall_0_inset": { "value": "0" }, + "wall_line_width_x": { "value": "round(line_width * 0.3 / 0.35, 2)" }, + "wall_thickness": { "value": "1" }, + "meshfix_maximum_resolution": { "value": "(speed_wall_0 + speed_wall_x) / 60" }, + "meshfix_maximum_deviation": { "value": "layer_height / 2" }, + "optimize_wall_printing_order": { "value": "True" }, + "retraction_combing": { "default_value": "all" }, + "initial_layer_line_width_factor": { "value": "120" }, + "zig_zaggify_infill": { "value": "gradual_infill_steps == 0" } + } +} diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json index 0ebd956aa1..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", @@ -14,7 +13,6 @@ "platform_offset": [0, -30, -10], "has_machine_quality": true, "has_materials": true, - "has_machine_materials": true, "has_variant_buildplates": true, "has_variants": true, "preferred_variant_name": "AA 0.4", @@ -34,9 +32,12 @@ "weight": -2, "firmware_update_info": { "id": 9051, - "check_urls": ["http://software.ultimaker.com/releases/firmware/9051/stable/um-update.swu.version"], + "check_urls": ["https://software.ultimaker.com/releases/firmware/9051/stable/um-update.swu.version"], "update_url": "https://ultimaker.com/firmware" - } + }, + "bom_numbers": [ + 9051, 214475 + ] }, "overrides": { @@ -45,6 +46,7 @@ "machine_depth": { "default_value": 240 }, "machine_height": { "default_value": 300 }, "machine_heated_bed": { "default_value": true }, + "machine_heated_build_volume": { "default_value": true }, "machine_nozzle_heat_up_speed": { "default_value": 1.4 }, "machine_nozzle_cool_down_speed": { "default_value": 0.8 }, "machine_head_with_fans_polygon": @@ -67,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": @@ -162,6 +162,7 @@ "optimize_wall_printing_order": { "value": "True" }, "retraction_combing": { "default_value": "all" }, "initial_layer_line_width_factor": { "value": "120" }, - "zig_zaggify_infill": { "value": "gradual_infill_steps == 0" } + "zig_zaggify_infill": { "value": "gradual_infill_steps == 0" }, + "build_volume_temperature": { "maximum_value": 50 } } } 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_delta_k8800.def.json b/resources/definitions/vertex_delta_k8800.def.json index 51c745a841..c92476da49 100644 --- a/resources/definitions/vertex_delta_k8800.def.json +++ b/resources/definitions/vertex_delta_k8800.def.json @@ -3,10 +3,10 @@ "version": 2, "inherits": "fdmprinter", "metadata": { - "manufacturer": "Velleman nv", + "manufacturer": "Velleman N.V.", "file_formats": "text/x-gcode", "visible": true, - "author": "Velleman", + "author": "Velleman N.V.", "has_machine_quality": true, "has_materials": true, "machine_extruder_trains": diff --git a/resources/definitions/vertex_k8400.def.json b/resources/definitions/vertex_k8400.def.json index b43751cadc..dad50cffe8 100644 --- a/resources/definitions/vertex_k8400.def.json +++ b/resources/definitions/vertex_k8400.def.json @@ -4,7 +4,7 @@ "inherits": "fdmprinter", "metadata": { "visible": true, - "manufacturer": "Velleman", + "manufacturer": "Velleman N.V.", "file_formats": "text/x-gcode", "platform": "Vertex_build_panel.stl", "platform_offset": [0, -3, 0], @@ -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 }, diff --git a/resources/definitions/vertex_k8400_dual.def.json b/resources/definitions/vertex_k8400_dual.def.json index 145cb7abec..f5c4921cfc 100644 --- a/resources/definitions/vertex_k8400_dual.def.json +++ b/resources/definitions/vertex_k8400_dual.def.json @@ -4,7 +4,7 @@ "inherits": "fdmprinter", "metadata": { "visible": true, - "manufacturer": "Velleman", + "manufacturer": "Velleman N.V.", "file_formats": "text/x-gcode", "platform": "Vertex_build_panel.stl", "platform_offset": [0, -3, 0], @@ -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 }, diff --git a/resources/definitions/vertex_nano_k8600.def.json b/resources/definitions/vertex_nano_k8600.def.json new file mode 100644 index 0000000000..ef9552caf3 --- /dev/null +++ b/resources/definitions/vertex_nano_k8600.def.json @@ -0,0 +1,77 @@ +{ + "version": 2, + "name": "Vertex K8600", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "manufacturer": "Velleman N.V.", + "file_formats": "text/x-gcode", + "supports_usb_connection": true, + "supported_actions": ["MachineSettingsAction"], + "machine_extruder_trains": { + "0": "vertex_nano_k8600_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "Vertex K8600" + }, + "machine_heated_bed": { + "default_value": false + }, + "machine_width": { + "default_value": 80 + }, + "machine_height": { + "default_value": 75 + }, + "machine_depth": { + "default_value": 80 + }, + "machine_center_is_zero": { + "default_value": false + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "machine_start_gcode": { + "default_value": "; Vertex Nano Start G-code M0 is my nozzle clean M400 G28 ; Home extruder G90 ; Absolute positioning M82 ; Extruder in absolute mode M104 T0 S{material_print_temperature} G92 E0 ; Reset extruder position G1 Z1 F800 M109 T0 S{material_print_temperature} M117 Priming nozzle... M83 G1 E20 F100 ; purge/prime nozzle M82 G92 E0 ; Reset extruder position G4 S3 ; Wait 3 seconds G1 Z5 F2000 M117 Vertex Nano is printing" + }, + "machine_end_gcode": { + "default_value": "; Vertex Nano end G-Code G91 ; Relative positioning T0 G1 E-1 F1500; Reduce filament pressure M104 T0 S0 G90 ; Absolute positioning G92 E0 ; Reset extruder position G28 M84 ; Turn steppers off" + }, + "line_width": { + "value": 0.35 + }, + "infill_line_width": { + "value": 0.35 + }, + "wall_thickness": { + "value": 0.7 + }, + "top_bottom_thickness": { + "value": 0.6 + }, + "infill_sparse_density": { + "value": 40 + }, + "infill_overlap": { + "value": 5 + }, + "min_infill_area": { + "value": 0.1 + }, + "retract_at_layer_change": { + "value": true + }, + "retraction_min_travel": { + "value": 1 + }, + "retraction_count_max": { + "value": 15 + }, + "retraction_extrusion_window": { + "value": 1 + } + } +} 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 328505e18a..4c72422788 100644 --- a/resources/definitions/zone3d_printer.def.json +++ b/resources/definitions/zone3d_printer.def.json @@ -5,7 +5,7 @@ "metadata": { "visible": true, "author": "Ultimaker", - "manufacturer": "Unknown", + "manufacturer": "Zone3D", "file_formats": "text/x-gcode", "platform_offset": [ 0, 0, 0], "machine_extruder_trains": @@ -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..b918d070be 100644 --- a/resources/extruders/bibo2_dual_extruder_0.def.json +++ b/resources/extruders/bibo2_dual_extruder_0.def.json @@ -1,5 +1,4 @@ { - "id": "BIBO1", "version": 2, "name": "Extruder 1", "inherits": "fdmextruder", diff --git a/resources/extruders/bibo2_dual_extruder_1.def.json b/resources/extruders/bibo2_dual_extruder_1.def.json index 5f479ba54b..e0386188bb 100644 --- a/resources/extruders/bibo2_dual_extruder_1.def.json +++ b/resources/extruders/bibo2_dual_extruder_1.def.json @@ -1,5 +1,4 @@ { - "id": "BIBO2", "version": 2, "name": "Extruder 2", "inherits": "fdmextruder", 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..4e73fd0e8e 100644 --- a/resources/extruders/cr-x_extruder_0.def.json +++ b/resources/extruders/cr-x_extruder_0.def.json @@ -1,5 +1,4 @@ { - "id": "cr-x_extruder_0", "version": 2, "name": "Left Extruder", "inherits": "fdmextruder", diff --git a/resources/extruders/cr-x_extruder_1.def.json b/resources/extruders/cr-x_extruder_1.def.json index 9313f2ea78..ed6056dab9 100644 --- a/resources/extruders/cr-x_extruder_1.def.json +++ b/resources/extruders/cr-x_extruder_1.def.json @@ -1,5 +1,4 @@ { - "id": "cr-x_extruder_1", "version": 2, "name": "Right Extruder", "inherits": "fdmextruder", diff --git a/resources/extruders/creality_cr10_extruder_0.def.json b/resources/extruders/creality_base_extruder_0.def.json similarity index 80% rename from resources/extruders/creality_cr10_extruder_0.def.json rename to resources/extruders/creality_base_extruder_0.def.json index 3a259b672b..a173d1c2fa 100644 --- a/resources/extruders/creality_cr10_extruder_0.def.json +++ b/resources/extruders/creality_base_extruder_0.def.json @@ -1,10 +1,9 @@ { - "id": "creality_cr10_extruder_0", "version": 2, "name": "Extruder 1", "inherits": "fdmextruder", "metadata": { - "machine": "creality_cr10", + "machine": "creality_base", "position": "0" }, @@ -12,5 +11,6 @@ "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 } + } } diff --git a/resources/extruders/creatable_d3_extruder_0.def.json b/resources/extruders/creatable_d3_extruder_0.def.json index 7d45bb8e8a..6a805febd5 100644 --- a/resources/extruders/creatable_d3_extruder_0.def.json +++ b/resources/extruders/creatable_d3_extruder_0.def.json @@ -1,5 +1,4 @@ { - "id": "creatable_d3_extruder_0", "version": 2, "name": "Extruder 1", "inherits": "fdmextruder", 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 new file mode 100644 index 0000000000..6c8993e799 --- /dev/null +++ b/resources/extruders/cubicon_dual_pro_a30_extruder_0.def.json @@ -0,0 +1,26 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "cubicon_dual_pro_a30", + "position": "0" + }, + "overrides": { + "extruder_nr": { + "default_value": 0 + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "machine_nozzle_offset_x": { + "default_value": -27.3 + }, + "machine_nozzle_offset_y": { + "default_value": -19.9 + }, + "material_diameter": { + "default_value": 1.75 + } + } +} diff --git a/resources/extruders/cubicon_dual_pro_a30_extruder_1.def.json b/resources/extruders/cubicon_dual_pro_a30_extruder_1.def.json new file mode 100644 index 0000000000..ccdfdee1f7 --- /dev/null +++ b/resources/extruders/cubicon_dual_pro_a30_extruder_1.def.json @@ -0,0 +1,26 @@ +{ + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "cubicon_dual_pro_a30", + "position": "1" + }, + "overrides": { + "extruder_nr": { + "default_value": 1 + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "machine_nozzle_offset_x": { + "default_value": -27.3 + }, + "machine_nozzle_offset_y": { + "default_value": -19.9 + }, + "material_diameter": { + "default_value": 1.75 + } + } +} diff --git a/resources/extruders/cubicon_style_plus_a15_extruder_0.def.json b/resources/extruders/cubicon_style_plus_a15_extruder_0.def.json new file mode 100644 index 0000000000..12d022cd1e --- /dev/null +++ b/resources/extruders/cubicon_style_plus_a15_extruder_0.def.json @@ -0,0 +1,26 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "cubicon_style_plus_a15", + "position": "0" + }, + "overrides": { + "extruder_nr": { + "default_value": 0 + }, + "machine_nozzle_size": { + "default_value": 0.4 + }, + "machine_nozzle_offset_x": { + "default_value": -4.00 + }, + "machine_nozzle_offset_y": { + "default_value": -7.00 + }, + "material_diameter": { + "default_value": 1.75 + } + } +} 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/creality_cr10s5_extruder_0.def.json b/resources/extruders/erzay3d_extruder_0.def.json similarity index 80% rename from resources/extruders/creality_cr10s5_extruder_0.def.json rename to resources/extruders/erzay3d_extruder_0.def.json index 98b701ae2e..a9cea62897 100644 --- a/resources/extruders/creality_cr10s5_extruder_0.def.json +++ b/resources/extruders/erzay3d_extruder_0.def.json @@ -1,10 +1,9 @@ { - "id": "creality_cr10s5_extruder_0", "version": 2, "name": "Extruder 1", "inherits": "fdmextruder", "metadata": { - "machine": "creality_cr10s5", + "machine": "erzay3d", "position": "0" }, 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 new file mode 100644 index 0000000000..4278a532f9 --- /dev/null +++ b/resources/extruders/felixpro2_dual_extruder_0.def.json @@ -0,0 +1,27 @@ +{ + "version": 2, + "name": "Left Extruder", + "inherits": "fdmextruder", + "metadata": { + "machine": "felixpro2dual", + "position": "0" + }, + + "overrides": { + "extruder_nr": { + "default_value": 0, + "maximum_value": "1" + }, + "machine_nozzle_offset_x": { "default_value": 0 }, + "machine_nozzle_offset_y": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.35 }, + "material_diameter": { "default_value": 1.75 }, + + "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/felixpro2_dual_extruder_1.def.json b/resources/extruders/felixpro2_dual_extruder_1.def.json new file mode 100644 index 0000000000..195aad474d --- /dev/null +++ b/resources/extruders/felixpro2_dual_extruder_1.def.json @@ -0,0 +1,27 @@ +{ + "version": 2, + "name": "Right Extruder", + "inherits": "fdmextruder", + "metadata": { + "machine": "felixpro2dual", + "position": "1" + }, + + "overrides": { + "extruder_nr": { + "default_value": 1, + "maximum_value": "2" + }, + "machine_nozzle_offset_x": { "default_value": 0 }, + "machine_nozzle_offset_y": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.35 }, + "material_diameter": { "default_value": 1.75 }, + + "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/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/creality_cr10s4_extruder_0.def.json b/resources/extruders/flsun_qq_s_extruder_0.def.json similarity index 80% rename from resources/extruders/creality_cr10s4_extruder_0.def.json rename to resources/extruders/flsun_qq_s_extruder_0.def.json index 8a40c6431f..e61056fcd3 100644 --- a/resources/extruders/creality_cr10s4_extruder_0.def.json +++ b/resources/extruders/flsun_qq_s_extruder_0.def.json @@ -1,10 +1,9 @@ { - "id": "creality_cr10s4_extruder_0", "version": 2, "name": "Extruder 1", "inherits": "fdmextruder", "metadata": { - "machine": "creality_cr10s4", + "machine": "flsun_qq_s", "position": "0" }, 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/creality_ender3_extruder_0.def.json b/resources/extruders/geeetech_a30_extruder_0.def.json similarity index 80% rename from resources/extruders/creality_ender3_extruder_0.def.json rename to resources/extruders/geeetech_a30_extruder_0.def.json index 431366c777..90cb496877 100644 --- a/resources/extruders/creality_ender3_extruder_0.def.json +++ b/resources/extruders/geeetech_a30_extruder_0.def.json @@ -1,10 +1,9 @@ { - "id": "creality_ender3_extruder_0", "version": 2, "name": "Extruder 1", "inherits": "fdmextruder", "metadata": { - "machine": "creality_ender3", + "machine": "geeetech_a30", "position": "0" }, 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_adonis_extruder.def.json b/resources/extruders/hellbot_adonis_extruder.def.json new file mode 100644 index 0000000000..4201f6b393 --- /dev/null +++ b/resources/extruders/hellbot_adonis_extruder.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "hellbot_adonis", + "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/hellbot_magna_dual_extruder_1.def.json b/resources/extruders/hellbot_magna_dual_extruder_1.def.json new file mode 100644 index 0000000000..a31a3fdd70 --- /dev/null +++ b/resources/extruders/hellbot_magna_dual_extruder_1.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "hellbot_magna_dual", + "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/hellbot_magna_dual_extruder_2.def.json b/resources/extruders/hellbot_magna_dual_extruder_2.def.json new file mode 100644 index 0000000000..651c39d53b --- /dev/null +++ b/resources/extruders/hellbot_magna_dual_extruder_2.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "hellbot_magna_dual", + "position": "1" + }, + + "overrides": { + "extruder_nr": { "default_value": 1 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/hellbot_magna_i_extruder.def.json b/resources/extruders/hellbot_magna_i_extruder.def.json new file mode 100644 index 0000000000..dc63081bd2 --- /dev/null +++ b/resources/extruders/hellbot_magna_i_extruder.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "hellbot_magna_i", + "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/hms434_tool_1.def.json b/resources/extruders/hms434_tool_1.def.json index c07a89bf44..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", @@ -17,10 +16,10 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;start T0\n\nM117 changing tool....\nM109 T0 S{material_print_temperature}\n\nG1 Y-47 F9000; wipe\nG1 X150 Y10 F9000\n\nM117 printing...\n" + "default_value": "\n;changing to tool1\nM109 T0 S{material_print_temperature}\nG1 X-18 Y-50 F9000\nG1 X150 Y10 F9000\n\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T0 S{material_standby_temperature}\nG1 X150 Y10 F9000\nG1 X-47 Y47 F9000 ; go to wipe position\nG1 X0 Y-100 F3000; wipe\nG1 X-44 F9000\n;end T0\n\n" + "default_value": "\nG1 X150 Y10 F9000\nG1 X-20 Y-50 F9000\nG1 Y-100 F3000\n; ending tool1\n\n" } } } diff --git a/resources/extruders/hms434_tool_2.def.json b/resources/extruders/hms434_tool_2.def.json index c581d0b035..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", @@ -17,10 +16,10 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;start T1\n\nM117 changing tool....\nM109 T1 S{material_print_temperature}\n\nG1 Y-47 F9000; wipe\nG1 X150 Y10 F9000\n\nM117 printing...\n" + "default_value": "\n;changing to tool2\nM109 T1 S{material_print_temperature}\nG1 X-18 Y-50 F9000\nG1 X150 Y10 F9000\n\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T1 S{material_standby_temperature}\nG1 X150 Y10 F9000\nG1 X-47 Y47 F9000 ; go to wipe position\nG1 X0 Y-100 F3000; wipe\nG1 X-44 F9000\n;end T1\n\n" + "default_value": "\nG1 X150 Y10 F9000\nG1 X-20 Y-50 F9000\nG1 Y-100 F3000\n; ending tool2\n\n" } } } diff --git a/resources/extruders/hms434_tool_3.def.json b/resources/extruders/hms434_tool_3.def.json index 95f774fe54..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", @@ -17,10 +16,10 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;start Tool 3\n\n" + "default_value": "\n;changing to tool3" }, "machine_extruder_end_code": { - "default_value": "\n;end Tool 3\n\n" + "default_value": "\n;ending tool3" } } } diff --git a/resources/extruders/hms434_tool_4.def.json b/resources/extruders/hms434_tool_4.def.json index bab0a4659a..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", @@ -17,10 +16,10 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;start T0\n\nM104 T0 S{material_print_temperature_layer_0}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 S{material_print_temperature_layer_0}; wait for temp\nG1 E10 F300; prime\nG92 E0\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\nM117 printing...\n" + "default_value": "\n;changing to tool4" }, "machine_extruder_end_code": { - "default_value": "\nM104 T0 S{material_standby_temperature}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 R{material_standby_temperature}; wait for temp\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\n;end T0\n\n" + "default_value": "\n;ending tool4" } } } diff --git a/resources/extruders/hms434_tool_5.def.json b/resources/extruders/hms434_tool_5.def.json index 30f44a2d65..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", @@ -17,10 +16,10 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;start T0\n\nM104 T0 S{material_print_temperature_layer_0}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 S{material_print_temperature_layer_0}; wait for temp\nG1 E10 F300; prime\nG92 E0\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\nM117 printing...\n" + "default_value": "\n;changing to tool5" }, "machine_extruder_end_code": { - "default_value": "\nM104 T0 S{material_standby_temperature}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 R{material_standby_temperature}; wait for temp\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\n;end T0\n\n" + "default_value": "\n;ending tool5" } } } diff --git a/resources/extruders/hms434_tool_6.def.json b/resources/extruders/hms434_tool_6.def.json index 221c3135fc..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", @@ -17,10 +16,10 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;start T0\n\nM104 T0 S{material_print_temperature_layer_0}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 S{material_print_temperature_layer_0}; wait for temp\nG1 E10 F300; prime\nG92 E0\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\nM117 printing...\n" + "default_value": "\n;changing to tool6" }, "machine_extruder_end_code": { - "default_value": "\nM104 T0 S{material_standby_temperature}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 R{material_standby_temperature}; wait for temp\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\n;end T0\n\n" + "default_value": "\n;ending tool6" } } } diff --git a/resources/extruders/hms434_tool_7.def.json b/resources/extruders/hms434_tool_7.def.json index 56f0e7f14b..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", @@ -17,10 +16,10 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;start T0\n\nM104 T0 S{material_print_temperature_layer_0}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 S{material_print_temperature_layer_0}; wait for temp\nG1 E10 F300; prime\nG92 E0\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\nM117 printing...\n" + "default_value": "\n;changing to tool7" }, "machine_extruder_end_code": { - "default_value": "\nM104 T0 S{material_standby_temperature}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 R{material_standby_temperature}; wait for temp\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\n;end T0\n\n" + "default_value": "\n;ending tool7" } } } diff --git a/resources/extruders/hms434_tool_8.def.json b/resources/extruders/hms434_tool_8.def.json index 6b08aab9c4..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", @@ -17,10 +16,10 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;start T0\n\nM104 T0 S{material_print_temperature_layer_0}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 S{material_print_temperature_layer_0}; wait for temp\nG1 E10 F300; prime\nG92 E0\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\nM117 printing...\n" + "default_value": "\n;changing to tool8" }, "machine_extruder_end_code": { - "default_value": "\nM104 T0 S{material_standby_temperature}\nG1 X65 Y35 F9000 ; go to wipe position\nM109 T0 R{material_standby_temperature}; wait for temp\nG1 X45 Y15 F3000; wipe\nG1 X55 F9000\nG1 Y35 F6000; wipe again\n\n;end T0\n\n" + "default_value": "\n;ending tool8" } } } diff --git a/resources/extruders/imade3d_jellybox_2_extruder_0.def.json b/resources/extruders/imade3d_jellybox_2_extruder_0.def.json new file mode 100644 index 0000000000..ca25b62286 --- /dev/null +++ b/resources/extruders/imade3d_jellybox_2_extruder_0.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "imade3d_jellybox_2", + "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/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 new file mode 100644 index 0000000000..9a42d0da04 --- /dev/null +++ b/resources/extruders/jgaurora_a3s_extruder_0.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "jgaurora_a3s", + "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/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..11619da332 --- /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": "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/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/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 new file mode 100644 index 0000000000..de1938956a --- /dev/null +++ b/resources/extruders/nwa3d_a31_extruder_0.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Standard 0.4mm", + "inherits": "fdmextruder", + "metadata": { + "machine": "nwa3d_a31", + "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/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/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 new file mode 100644 index 0000000000..096b265030 --- /dev/null +++ b/resources/extruders/strateo3d_left_extruder.def.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "name": "Left Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "strateo3d", + "position": "1" + }, + + "overrides": { + "extruder_nr": { "default_value": 1, "maximum_value": "1" }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0 }, + "machine_nozzle_offset_y": { "default_value": 0 } + } +} \ No newline at end of file diff --git a/resources/extruders/strateo3d_right_extruder.def.json b/resources/extruders/strateo3d_right_extruder.def.json new file mode 100644 index 0000000000..24acdef8b5 --- /dev/null +++ b/resources/extruders/strateo3d_right_extruder.def.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "name": "Right Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "strateo3d", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0, "maximum_value": "1" }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0 }, + "machine_nozzle_offset_y": { "default_value": 0 } + } +} \ No newline at end of file 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 new file mode 100644 index 0000000000..7af6f7d0dc --- /dev/null +++ b/resources/extruders/ultimaker_s3_extruder_left.def.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "ultimaker_s3", + "position": "0" + }, + + "overrides": { + "extruder_nr": { + "default_value": 0, + "maximum_value": "1" + }, + "machine_nozzle_offset_x": { "default_value": 0 }, + "machine_nozzle_offset_y": { "default_value": 0 }, + + "machine_extruder_start_pos_abs": { "default_value": true }, + "machine_extruder_start_pos_x": { "default_value": 180 }, + "machine_extruder_start_pos_y": { "default_value": 180 }, + "machine_extruder_end_pos_abs": { "default_value": true }, + "machine_extruder_end_pos_x": { "default_value": 180 }, + "machine_extruder_end_pos_y": { "default_value": 180 }, + "machine_nozzle_head_distance": { "default_value": 2.7 }, + "extruder_prime_pos_x": { "default_value": -3 }, + "extruder_prime_pos_y": { "default_value": 6 }, + "extruder_prime_pos_z": { "default_value": 2 } + } +} diff --git a/resources/extruders/ultimaker_s3_extruder_right.def.json b/resources/extruders/ultimaker_s3_extruder_right.def.json new file mode 100644 index 0000000000..6771e1c0a8 --- /dev/null +++ b/resources/extruders/ultimaker_s3_extruder_right.def.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "ultimaker_s3", + "position": "1" + }, + + "overrides": { + "extruder_nr": { + "default_value": 1, + "maximum_value": "1" + }, + "machine_nozzle_offset_x": { "default_value": 22 }, + "machine_nozzle_offset_y": { "default_value": 0 }, + + "machine_extruder_start_pos_abs": { "default_value": true }, + "machine_extruder_start_pos_x": { "default_value": 180 }, + "machine_extruder_start_pos_y": { "default_value": 180 }, + "machine_extruder_end_pos_abs": { "default_value": true }, + "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_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/vertex_nano_k8600_extruder_0.def.json b/resources/extruders/vertex_nano_k8600_extruder_0.def.json new file mode 100644 index 0000000000..cfb2d11217 --- /dev/null +++ b/resources/extruders/vertex_nano_k8600_extruder_0.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "vertex_nano_k8600", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.35 }, + "material_diameter": { "default_value": 1.75 } + } +} 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 669f248a0d..4281c42eb8 100644 --- a/resources/i18n/cura.pot +++ b/resources/i18n/cura.pot @@ -7,18 +7,18 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" +"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "" @@ -84,36 +84,47 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "" "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 -msgctxt "X3G Writer File Description" -msgid "X3G File" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "" +"A print is still in progress. Cura cannot start another print via USB until " +"the previous print has completed." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +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 @@ -126,6 +137,11 @@ 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" @@ -160,7 +176,7 @@ msgid "Save to Removable Drive {0}" msgstr "" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "" @@ -197,10 +213,9 @@ msgid "Could not save to removable drive {0}: {1}" msgstr "" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "" @@ -229,9 +244,9 @@ 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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "" @@ -258,355 +273,147 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "" -"Connected over the network. Please approve the access request on the printer." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "" -"Access to the printer requested. Please approve the request on the printer" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "" -"There is an issue with the configuration of your Ultimaker, which makes it " -"impossible to start the print. Please resolve this issues before continuing." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "" -"There is a mismatch between the configuration or calibration of the printer " -"and Cura. For the best result, always slice for the PrintCores and materials " -"that are inserted in your printer." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "" -"Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "" -"Different PrintCore (Cura: {cura_printcore_name}, Printer: " -"{remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "" -"The PrintCores and/or materials on your printer differ from those within " -"your current project. For the best result, always slice for the PrintCores " -"and materials that are inserted in your printer." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "" -"@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "" -"You can now send and monitor print jobs from anywhere using your Ultimaker " -"account." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +msgctxt "@action:button Preceded by 'Ready to'." +msgid "Print over network" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "" + +#: /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 "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "" +"You are attempting to connect to a printer that is not running Ultimaker " +"Connect. Please update the printer to the latest firmware." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "" +"Cura has detected material profiles that were not yet installed on the host " +"printer of group {0}." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" msgstr "" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 @@ -614,7 +421,7 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "" @@ -645,12 +452,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "" @@ -705,6 +512,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "" @@ -797,13 +634,13 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "" @@ -812,7 +649,7 @@ msgid "" "instead." msgstr "" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "" @@ -827,18 +664,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "" "Make sure the g-code is suitable for your printer and printer configuration " @@ -946,13 +783,13 @@ msgid "Not supported" msgstr "" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 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:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, python-brace-format msgctxt "@label Don't translate the XML tag !" msgid "" @@ -967,11 +804,9 @@ msgid "Invalid file URL:" msgstr "" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" +msgctxt "@info:message Followed by a list of settings." msgid "" -"Settings have been changed to match the current availability of extruders: " -"[%s]" +"Settings have been changed to match the current availability of extruders:" msgstr "" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:926 @@ -979,19 +814,19 @@ msgctxt "@info:title" msgid "Settings updated" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, 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:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "" @@ -999,44 +834,44 @@ msgid "" "failure." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, 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:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, 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:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, 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:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, 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:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "" @@ -1044,49 +879,41 @@ msgid "" "import it." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "" -"The machine defined in profile {0} ({1}) doesn't match " -"with your current machine ({2}), could not import it." -msgstr "" - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, 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:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1164,7 +991,7 @@ msgctxt "@action:button" msgid "Next" msgstr "" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1172,22 +999,36 @@ msgstr "" #: /home/ruben/Projects/Cura/cura/UI/WhatsNewPagesModel.py:17 #: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" 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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1204,21 +1045,20 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "" "The printer(s) below cannot be connected because they are part of a group" msgstr "" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" msgstr "" @@ -1234,14 +1074,14 @@ msgctxt "@label" msgid "Custom" msgstr "" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "" @@ -1266,39 +1106,44 @@ msgctxt "@message" msgid "Could not read response." msgstr "" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 msgctxt "@info" msgid "Unable to reach the Ultimaker account server." msgstr "" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:66 +#: /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." msgstr "" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." msgstr "" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "" @@ -1446,30 +1291,32 @@ msgstr "" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" +msgid "" +"User description (Note: Developers may not speak your language, please use " +"English if possible)" msgstr "" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, python-format msgctxt "" "@info 'width', 'depth' and 'height' are variable names that must NOT be " @@ -1477,19 +1324,19 @@ msgctxt "" msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, 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:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, 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:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "" @@ -1499,98 +1346,103 @@ msgctxt "@title:label" msgid "Printer Settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" msgstr "" @@ -1620,22 +1472,22 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" msgstr "" @@ -1646,7 +1498,7 @@ msgid "Install" msgstr "" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "" @@ -1662,16 +1514,16 @@ msgctxt "@label" msgid "ratings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "" @@ -1681,49 +1533,49 @@ msgctxt "@label" msgid "Your rating" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1786,17 +1638,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "" @@ -1854,27 +1706,52 @@ msgctxt "@label" msgid "Featured" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +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" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "" @@ -1984,71 +1861,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "" -"These options are not available because you are monitoring a cloud printer." +msgid "Please update your printer's firmware to manage the queue remotely." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "" @@ -2058,202 +1940,187 @@ msgctxt "@label" msgid "Queued" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" +msgid "Manage in browser" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "" -"This printer/group is already added to Cura. Please select another printer/" -"group." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" msgid "" "To print directly to your printer over the network, please make sure your " "printer is connected to the network using a network cable or by connecting " "your printer to your WIFI network. If you don't connect Cura with your " "printer, you can still use a USB drive to transfer g-code files to your " -"printer.\n" -"\n" -"Select your printer from the list below:" +"printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "" "If your printer is not listed, read the network printing " "troubleshooting guide" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /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:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /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:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 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:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 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:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /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:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." +msgid "Enter the IP address of your printer on the network." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "" @@ -2357,7 +2224,7 @@ msgctxt "@action:button" msgid "Override" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "" @@ -2365,61 +2232,52 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "" "The printer %1 is assigned, but the job contains an unknown material " "configuration." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "" "Override will use the specified settings with the existing printer " "configuration. This may result in a failed print." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 @@ -2738,7 +2596,7 @@ msgid "Printer Group" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "" @@ -2751,19 +2609,19 @@ msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 msgctxt "@action:label" msgid "Name" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 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:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2941,18 +2799,24 @@ msgid "Previous" msgstr "" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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 "" @@ -3080,157 +2944,157 @@ msgid "" "current extruder. Do you wish to continue?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /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:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 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:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 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:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 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:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "" @@ -3271,222 +3135,246 @@ msgid "Unit" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 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:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +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 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 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:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 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:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +msgctxt "@info:tooltip" +msgid "What type of camera rendering should be used?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 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:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@option:check" msgid "Select models when loaded" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 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:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 msgctxt "@info:tooltip" msgid "" "When you have made changes to a profile and switched to a different one, a " @@ -3494,50 +3382,50 @@ 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:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 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:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /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:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:discardOrKeep" msgid "Always transfer changed settings to new profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 msgctxt "@option:check" msgid "Check for updates on start" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 msgctxt "@info:tooltip" msgid "" "Should anonymous data about your print be sent to Ultimaker? Note, no " @@ -3545,134 +3433,134 @@ msgid "" "stored." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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:715 +#: /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:720 +#: /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:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419 msgctxt "@title:tab" msgid "Profiles" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 msgctxt "@info" msgid "Please provide a name for this profile." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /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:413 +#: /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:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 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:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "" @@ -3737,33 +3625,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide 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 "Don't show this setting" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "" @@ -3777,36 +3665,36 @@ msgid "" "Click to make these settings visible." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "" "This setting is not used because all the settings that it influences are " "overridden." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 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:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3814,7 +3702,7 @@ msgid "" "Click to restore the value of the profile." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value " @@ -3828,7 +3716,7 @@ msgctxt "@button" msgid "Recommended" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "" @@ -3856,12 +3744,12 @@ msgid "" "Without these structures, such parts would collapse during printing." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 msgctxt "@label" msgid "" "Enable printing a brim or raft. This will add a flat area around or under " @@ -3953,48 +3841,48 @@ msgctxt "@label" msgid "Send G-code" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "" "Send a custom G-code command to the connected printer. Press 'enter' to send " "the command." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "" "The target temperature of the hotend. The hotend will heat up or cool down " "towards this temperature. If this is 0, the hotend heating is turned off." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "" "Heat the hotend in advance before printing. You can continue adjusting your " @@ -4002,17 +3890,17 @@ msgid "" "up when you're ready to print." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "" @@ -4062,11 +3950,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -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" @@ -4082,32 +3965,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /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:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "" @@ -4117,7 +4000,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "" @@ -4137,17 +4035,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "" @@ -4239,22 +4137,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "" @@ -4264,6 +4162,11 @@ msgctxt "@label" msgid "View type" msgstr "" +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" @@ -4312,32 +4215,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "" @@ -4372,233 +4280,238 @@ msgctxt "@label" msgid "Preset printers" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "" msgstr[1] "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "" msgstr[1] "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "" msgstr[1] "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "" @@ -4613,39 +4526,39 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 msgctxt "@label" msgid "Are you sure you want to exit Cura?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /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:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 msgctxt "@text:window" msgid "" "We have found one or more G-Code files within the files you have selected. " @@ -4653,12 +4566,12 @@ msgid "" "file, please just select only one." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" msgstr "" @@ -4882,32 +4795,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /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:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "" @@ -5090,12 +5003,12 @@ msgctxt "@label" msgid "Troubleshooting" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" msgstr "" @@ -5152,23 +5065,11 @@ msgctxt "@button" msgid "Get started" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "" #: MachineSettingsAction/plugin.json msgctxt "description" -msgid "Provides a way to change machine settings (such as build volume, nozzle size, etc.)." +msgid "" +"Provides a way to change machine settings (such as build volume, nozzle " +"size, etc.)." msgstr "" #: MachineSettingsAction/plugin.json @@ -5218,7 +5119,9 @@ msgstr "" #: ModelChecker/plugin.json msgctxt "description" -msgid "Checks models and print configuration for possible printing issues and give suggestions." +msgid "" +"Checks models and print configuration for possible printing issues and give " +"suggestions." msgstr "" #: ModelChecker/plugin.json @@ -5256,9 +5159,20 @@ msgctxt "name" msgid "Profile Flattener" msgstr "" +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "" + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "" + #: USBPrinting/plugin.json msgctxt "description" -msgid "Accepts G-Code and sends them to a printer. Plugin can also update firmware." +msgid "" +"Accepts G-Code and sends them to a printer. Plugin can also update firmware." msgstr "" #: USBPrinting/plugin.json @@ -5266,16 +5180,6 @@ msgctxt "name" msgid "USB printing" msgstr "" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "" - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5318,22 +5222,12 @@ msgstr "" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." +msgid "Manages network connections to Ultimaker networked printers." msgstr "" #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" +msgid "Ultimaker Network Connection" msgstr "" #: MonitorStage/plugin.json @@ -5388,7 +5282,8 @@ msgstr "" #: SupportEraser/plugin.json msgctxt "description" -msgid "Creates an eraser mesh to block the printing of support in certain places" +msgid "" +"Creates an eraser mesh to block the printing of support in certain places" msgstr "" #: SupportEraser/plugin.json @@ -5526,6 +5421,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "" + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5556,6 +5461,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "" + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5566,6 +5481,16 @@ msgctxt "name" msgid "Image Reader" msgstr "" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "" + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5596,16 +5521,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5648,7 +5563,9 @@ msgstr "" #: CuraPrintProfileCreator/plugin.json msgctxt "description" -msgid "Allows material manufacturers to create new material and quality profiles using a drop-in UI." +msgid "" +"Allows material manufacturers to create new material and quality profiles " +"using a drop-in UI." msgstr "" #: CuraPrintProfileCreator/plugin.json @@ -5678,7 +5595,9 @@ msgstr "" #: UltimakerMachineActions/plugin.json msgctxt "description" -msgid "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.)." +msgid "" +"Provides machine actions for Ultimaker machines (such as bed leveling " +"wizard, selecting upgrades, etc.)." msgstr "" #: UltimakerMachineActions/plugin.json @@ -5695,4 +5614,3 @@ msgstr "" msgctxt "name" msgid "Cura Profile Reader" msgstr "" - diff --git a/resources/i18n/de_DE/cura.po b/resources/i18n/de_DE/cura.po index 0dafa1cfe4..e01c04a2f2 100644 --- a/resources/i18n/de_DE/cura.po +++ b/resources/i18n/de_DE/cura.po @@ -5,20 +5,20 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" -"PO-Revision-Date: 2019-03-13 14:00+0200\n" -"Last-Translator: Bothof \n" -"Language-Team: German\n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" +"PO-Revision-Date: 2019-07-29 15:51+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: German , German \n" "Language: de_DE\n" "MIME-Version: 1.0\n" "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.0.6\n" +"X-Generator: Poedit 2.2.3\n" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "Geräteeinstellungen" @@ -85,36 +85,45 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Das Profil wurde geglättet und aktiviert." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "AMF-Datei" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USB-Drucken" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Über USB drucken" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Über USB drucken" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "Über USB verbunden" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "Ein USB-Druck wird ausgeführt. Das Schließen von Cura beendet diesen Druck. Sind Sie sicher?" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /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/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "Druck wird bearbeitet. Cura kann keinen weiteren Druck via USB starten, bis der vorherige Druck abgeschlossen wurde." + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +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" @@ -126,6 +135,11 @@ 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" @@ -160,7 +174,7 @@ msgid "Save to Removable Drive {0}" msgstr "Auf Wechseldatenträger speichern {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Es sind keine Dateiformate zum Schreiben vorhanden!" @@ -197,10 +211,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/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "Fehler" @@ -229,9 +242,9 @@ 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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "Warnhinweis" @@ -258,347 +271,150 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Wechseldatenträger" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "Drucken über Netzwerk" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "Drücken über Netzwerk" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "Über Netzwerk verbunden." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "Über Netzwerk verbunden. Geben Sie die Zugriffsanforderung für den Drucker frei." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "Über Netzwerk verbunden. Kein Zugriff auf die Druckerverwaltung." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "Zugriff auf Drucker erforderlich. Bestätigen Sie den Zugriff auf den Drucker" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "Authentifizierungsstatus" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "Authentifizierungsstatus" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "Erneut versuchen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "Zugriffanforderung erneut senden" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "Zugriff auf den Drucker genehmigt" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "Kein Zugriff auf das Drucken mit diesem Drucker. Druckauftrag kann nicht gesendet werden." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "Zugriff anfordern" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "Zugriffsanforderung für den Drucker senden" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "Es kann kein neuer Druckauftrag gestartet werden." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "Es liegt ein Problem mit der Konfiguration Ihres Ultimaker vor, das den Druckstart verhindert. Lösen Sie dieses Problem bitte, bevor Sie fortfahren." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "Konfiguration nicht übereinstimmend" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "Möchten Sie wirklich mit der gewählten Konfiguration drucken?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Anforderungen zwischen der Druckerkonfiguration oder -kalibrierung und Cura stimmen nicht überein. Für optimale Ergebnisse schneiden Sie stets für die PrintCores und Materialien, die in Ihren Drucker eingelegt wurden." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "Das Senden neuer Aufträge ist (vorübergehend) blockiert; der vorherige Druckauftrag wird noch gesendet." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "Daten werden zum Drucker gesendet" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "Daten werden gesendet" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Abbrechen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "Kein PrintCore geladen in Steckplatz {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "Kein Material geladen in Steckplatz {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "Abweichender PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) für Extruder gewählt {extruder_id}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "Abweichendes Material (Cura: {0}, Drucker: {1}) für Extruder {2} gewählt" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "Synchronisieren Ihres Druckers" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "Möchten Sie Ihre aktuelle Druckerkonfiguration in Cura verwenden?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Die PrintCores und/oder Materialien auf Ihrem Drucker unterscheiden sich von denen Ihres aktuellen Projekts. Für optimale Ergebnisse schneiden Sie stets für die PrintCores und Materialien, die in Ihren Drucker eingelegt wurden." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "Über Netzwerk verbunden" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "Der Druckauftrag wurde erfolgreich an den Drucker gesendet." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "Daten gesendet" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "In Monitor überwachen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "Drucker '{printer_name}' hat '{job_name}' vollständig gedrückt." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "Der Druckauftrag '{job_name}' wurde ausgeführt." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "Druck vollendet" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "Leer" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "Unbekannt" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "Über Cloud drucken" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "Über Cloud drucken" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "Über Cloud verbunden" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "Cloudfehler" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "Druckauftrag konnte nicht exportiert werden." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "Daten konnten nicht in Drucker geladen werden." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "morgen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "heute" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "Es liegt ein Fehler beim Verbinden mit der Cloud vor." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Druckaufträge mithilfe Ihres Ultimaker-Kontos von einem anderen Ort aus senden und überwachen." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "Nicht mehr für diesen Drucker nachfragen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "Erste Schritte" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Sie können jetzt Druckaufträge mithilfe Ihres Ultimaker-Kontos von einem anderen Ort aus senden und überwachen." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "Verbunden!" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "Ihre Verbindung überprüfen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Anschluss über Netzwerk" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" -msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +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 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "Drücken über Netzwerk" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "Über Netzwerk verbunden" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "Bitte warten Sie, bis der aktuelle Druckauftrag gesendet wurde." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "Druckfehler" + +#: /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." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "Nicht Host-Drucker der Gruppe" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "Gruppe konfigurieren" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "Druckaufträge mithilfe Ihres Ultimaker-Kontos von einem anderen Ort aus senden und überwachen." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "Verbinden mit Ultimaker Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "Erste Schritte" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "Druckauftrag senden" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "Druckauftrag wird vorbereitet." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "Der Druckauftrag wurde erfolgreich an den Drucker gesendet." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "Daten gesendet" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "Sie versuchen, sich mit einem Drucker zu verbinden, auf dem Ultimaker Connect nicht läuft. Bitte aktualisieren Sie die Firmware des Druckers." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "Drucker aktualisieren" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "Cura hat Materialprofile entdeckt, die auf dem Host-Drucker der Gruppe {0} noch nicht installiert wurden." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "Material an Drucker senden" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "Daten konnten nicht in Drucker geladen werden." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "Netzwerkfehler" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "morgen" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "heute" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "Über Cloud drucken" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "Über Cloud drucken" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" +msgstr "Über Cloud verbunden" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Überwachen" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "Zugriff auf Update-Informationen nicht möglich." @@ -625,12 +441,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Schichtenansicht" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Cura zeigt die Schichten nicht akkurat an, wenn Wire Printing aktiviert ist" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "Simulationsansicht" @@ -685,6 +501,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF-Bilddatei" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "Öffnen Sie das komprimierte Dreiecksnetz" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "COLLADA Digital Asset Exchange" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "glTF Binary" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "glTF Embedded JSON" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "Stanford Triangle Format" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "Compressed COLLADA Digital Asset Exchange" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -765,19 +611,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF-Datei" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "Düse" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "Projektdatei öffnen" @@ -792,18 +638,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G-Datei" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-Code parsen" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "G-Code-Details" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Stellen Sie sicher, dass der G-Code für Ihren Drucker und Ihre Druckerkonfiguration geeignet ist, bevor Sie die Datei senden. Der Darstellung des G-Codes ist möglicherweise nicht korrekt." @@ -906,16 +752,16 @@ msgstr "Login fehlgeschlagen" #: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33 msgctxt "@info:not supported profile" msgid "Not supported" -msgstr "" +msgstr "Nicht unterstützt" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 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:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -928,116 +774,109 @@ msgid "Invalid file URL:" msgstr "Ungültige Datei-URL:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" -msgstr "Die Einstellungen wurden passend für die aktuelle Verfügbarkeit der Extruder geändert: [%s]" +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 msgctxt "@info:title" msgid "Settings updated" msgstr "Einstellungen aktualisiert" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "Extruder deaktiviert" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, 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:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, 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:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, 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:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "Export erfolgreich ausgeführt" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, 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:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, 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:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, 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:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, 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:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "Die Maschine, die im Profil {0} ({1}) definiert wurde, entspricht nicht Ihrer derzeitigen Maschine ({2}). Importieren nicht möglich." - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Profil erfolgreich importiert {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, 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:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, 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:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "Benutzerdefiniertes Profil" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 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:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1086,7 +925,7 @@ msgstr "Skirt" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:84 msgctxt "@tooltip" msgid "Prime Tower" -msgstr "" +msgstr "Einzugsturm" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:85 msgctxt "@tooltip" @@ -1115,7 +954,7 @@ msgctxt "@action:button" msgid "Next" msgstr "Weiter" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1123,22 +962,36 @@ 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/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "Schließen" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" 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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Abbrechen" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1155,23 +1008,22 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Alle Dateien (*)" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" -msgstr "" +msgstr "Der/die nachfolgende(n) Drucker kann/können nicht verbunden werden, weil er/sie Teil einer Gruppe ist/sind" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" -msgstr "" +msgstr "Verfügbare vernetzte Drucker" #: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689 msgctxt "@label" @@ -1184,12 +1036,12 @@ msgctxt "@label" msgid "Custom" msgstr "Benutzerdefiniert" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "Die Höhe der Druckabmessung wurde aufgrund des Wertes der Einstellung „Druckreihenfolge“ reduziert, um eine Kollision der Brücke mit den gedruckten Modellen zu verhindern." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "Produktabmessungen" @@ -1207,46 +1059,51 @@ msgstr "Versucht, ein Cura-Backup-Verzeichnis ohne entsprechende Daten oder Meta #: /home/ruben/Projects/Cura/cura/Backups/Backup.py:125 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that is higher than the current version." -msgstr "" +msgstr "Versucht, ein Cura-Backup wiederherzustellen, das eine höhere Version als die aktuelle hat." #: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationHelpers.py:79 msgctxt "@message" msgid "Could not read response." -msgstr "" +msgstr "Antwort konnte nicht gelesen werden." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 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/AuthorizationRequestHandler.py:66 +#: /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." -msgstr "" +msgstr "Erteilen Sie bitte die erforderlichen Freigaben bei der Autorisierung dieser Anwendung." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "Bei dem Versuch, sich anzumelden, trat ein unerwarteter Fehler auf. Bitte erneut versuchen." -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "Objekte vervielfältigen und platzieren" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "Objekte platzieren" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Innerhalb der Druckabmessung für alle Objekte konnte keine Position gefunden werden" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "Objekt-Platzierung" @@ -1395,48 +1252,48 @@ msgstr "Protokolle" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" -msgstr "Benutzerbeschreibung" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" +msgstr "Benutzerbeschreibung (Hinweis: Bitte schreiben Sie auf Englisch, da die Entwickler Ihre Sprache möglicherweise nicht beherrschen.)" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "Bericht senden" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Geräte werden geladen..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Die Szene wird eingerichtet..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Die Benutzeroberfläche wird geladen..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, 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:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, 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:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Das gewählte Modell war zu klein zum Laden." @@ -1444,103 +1301,108 @@ msgstr "Das gewählte Modell war zu klein zum Laden." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58 msgctxt "@title:label" msgid "Printer Settings" -msgstr "" +msgstr "Druckereinstellungen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X (Breite)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Tiefe)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Höhe)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "Druckbettform" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" -msgstr "" +msgstr "Ausgang in Mitte" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" -msgstr "" +msgstr "Heizbares Bett" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "Druckraum aufgeheizt" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "G-Code-Variante" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" -msgstr "" +msgstr "Druckkopfeinstellungen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X min." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y min." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "X max." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "Y max." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" -msgstr "" +msgstr "Brückenhöhe" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "Anzahl Extruder" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" -msgstr "" +msgstr "Start G-Code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" -msgstr "" +msgstr "Ende G-Code" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:42 msgctxt "@title:tab" @@ -1550,7 +1412,7 @@ msgstr "Drucker" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:63 msgctxt "@title:label" msgid "Nozzle Settings" -msgstr "" +msgstr "Düseneinstellungen" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:75 msgctxt "@label" @@ -1567,25 +1429,25 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "X-Versatz Düse" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Y-Versatz Düse" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "Kühllüfter-Nr." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" -msgstr "" +msgstr "G-Code Extruder-Start" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" -msgstr "" +msgstr "G-Code Extruder-Ende" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 msgctxt "@action:button" @@ -1593,7 +1455,7 @@ msgid "Install" msgstr "Installieren" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "Installiert" @@ -1608,16 +1470,16 @@ msgctxt "@label" msgid "ratings" msgstr "Bewertungen" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "Plugins" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "Materialien" @@ -1627,49 +1489,49 @@ msgctxt "@label" msgid "Your rating" msgstr "Ihre Bewertung" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "Version" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "Zuletzt aktualisiert" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "Autor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "Downloads" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "Anmeldung für Installation oder Update erforderlich" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" -msgstr "" +msgstr "Materialspulen kaufen" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "Aktualisierung" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "Aktualisierung wird durchgeführt" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1730,17 +1592,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "Quit Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "Community-Beiträge" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "Community-Plugins" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "Generische Materialien" @@ -1801,27 +1663,52 @@ msgctxt "@label" msgid "Featured" msgstr "Unterstützter" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "Kompatibilität" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +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" +msgstr "Druckbett" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "Support" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "Qualität" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "Technisches Datenblatt" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "Sicherheitsdatenblatt" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "Druckrichtlinien" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "Website" @@ -1921,70 +1808,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Die Firmware-Aktualisierung ist aufgrund von fehlender Firmware fehlgeschlagen." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "Drucker verwalten" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "Glas" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." -msgstr "Diese Optionen sind nicht verfügbar, weil Sie einen Cloud-Drucker überwachen." +msgid "Please update your printer's firmware to manage the queue remotely." +msgstr "Damit Sie die Warteschlange aus der Ferne verwalten können, müssen Sie die Druckfirmware aktualisieren." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "Die Webcam ist nicht verfügbar, weil Sie einen Cloud-Drucker überwachen." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "Lädt..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "Nicht verfügbar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "Nicht erreichbar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "Leerlauf" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "Unbenannt" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "Anonym" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "Erfordert Konfigurationsänderungen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "Details" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "Drucker nicht verfügbar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "Zuerst verfügbar" @@ -1994,197 +1887,180 @@ msgctxt "@label" msgid "Queued" msgstr "In Warteschlange" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" -msgstr "Gehe zu Cura Connect" +msgid "Manage in browser" +msgstr "Im Browser verwalten" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "Die Warteschlange enthält keine Druckaufträge. Slicen Sie einen Auftrag und schicken Sie ihn ab, um ihn zur Warteschlange hinzuzufügen." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "Druckaufträge" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "Druckdauer insgesamt" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "Warten auf" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "Druckauftragshistorie anzeigen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "Vorhandene Verbindung" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "Diese/r Drucker/Gruppe wurde bereits zu Cura hinzugefügt. Wählen Sie bitte eine/n andere/n Drucker/Gruppe." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Anschluss an vernetzten Drucker" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" -msgstr "" -"Um über das Netzwerk direkt auf Ihrem Drucker zu drucken, stellen Sie bitte sicher, dass der Drucker mit dem Netzwerkkabel verbunden ist oder verbinden Sie Ihren Drucker mit Ihrem WLAN-Netzwerk. Wenn Sie Cura nicht mit Ihrem Drucker verbinden, können Sie dennoch ein USB-Laufwerk für die Übertragung von G-Code-Dateien auf Ihren Drucker verwenden.\n" -"\n" -"Wählen Sie Ihren Drucker aus der folgenden Liste:" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." +msgstr "Um direkt auf Ihrem Drucker über das Netzwerk zu drucken, muss der Drucker über ein Netzwerkkabel oder per WLAN mit dem Netzwerk verbunden sein. Wenn Sie Cura nicht mit Ihrem Drucker verbinden, können Sie G-Code-Dateien auf einen USB-Stick kopieren und diesen am Drucker anschließen." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "Wählen Sie Ihren Drucker aus der folgenden Liste aus:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "Bearbeiten" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "Entfernen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "Aktualisieren" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Wenn Ihr Drucker nicht aufgeführt ist, lesen Sie die Anleitung für Fehlerbehebung für Netzwerkdruck" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "Typ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /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:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /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:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 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:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 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:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 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:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "Verbinden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" -msgstr "" +msgstr "Ungültige IP-Adresse" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146 msgctxt "@text" msgid "Please enter a valid IP address." -msgstr "" +msgstr "Bitte eine gültige IP-Adresse eingeben." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "Druckeradresse" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." -msgstr "" +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:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "Abgebrochen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "Beendet" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "Vorbereitung..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "Wird abgebrochen..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "Wird pausiert..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "Pausiert" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "Wird fortgesetzt..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "Handlung erforderlich" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "Fertigstellung %1 auf %2" @@ -2288,73 +2164,64 @@ msgctxt "@action:button" msgid "Override" msgstr "Überschreiben" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" msgstr[0] "Der zugewiesene Drucker %1 erfordert die folgende Konfigurationsänderung:" msgstr[1] "Der zugewiesene Drucker %1 erfordert die folgenden Konfigurationsänderungen:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "Der Drucker %1 wurde zugewiesen, allerdings enthält der Auftrag eine unbekannte Materialkonfiguration." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "Material %1 von %2 auf %3 wechseln." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "%3 als Material %1 laden (Dies kann nicht übergangen werden)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." msgstr "Print Core %1 von %2 auf %3 wechseln." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "Druckplatte auf %1 wechseln (Dies kann nicht übergangen werden)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "Überschreiben verwendet die definierten Einstellungen mit der vorhandenen Druckerkonfiguration. Dies kann zu einem fehlgeschlagenen Druck führen." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "Aluminium" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "Mit einem Drucker verbinden" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" -"Stellen Sie bitte sicher, dass Ihr Drucker verbunden ist:\n" -"- Prüfen Sie, ob Ihr Drucker eingeschaltet ist.\n" -"- Prüfen Sie, ob der Drucker mit dem Netzwerk verbunden ist." +"Stellen Sie sicher, dass der Drucker verbunden ist:\n" +"– Prüfen Sie, ob der Drucker eingeschaltet ist.– Prüfen Sie, ob der Drucker mit dem Netzwerk verbunden ist.\n" +"– Prüfen Sie, ob Sie angemeldet sind, falls Sie über die Cloud verbundene Drucker suchen möchten." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 msgctxt "@info" msgid "Please connect your printer to the network." -msgstr "" +msgstr "Verbinden Sie Ihren Drucker bitte mit dem Netzwerk." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:156 msgctxt "@label link to technical assistance" @@ -2476,17 +2343,17 @@ msgstr "Weitere Informationen zur anonymen Datenerfassung" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:74 msgctxt "@text:window" msgid "Ultimaker Cura collects anonymous data in order to improve the print quality and user experience. Below is an example of all the data that is shared:" -msgstr "" +msgstr "Ultimaker Cura erfasst anonyme Daten, um die Druckqualität und Benutzererfahrung zu steigern. Nachfolgend ist ein Beispiel aller Daten, die geteilt werden:" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:109 msgctxt "@text:window" msgid "I don't want to send anonymous data" -msgstr "" +msgstr "Ich möchte keine anonymen Daten senden" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:118 msgctxt "@text:window" msgid "Allow sending anonymous data" -msgstr "" +msgstr "Senden von anonymen Daten erlauben" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2536,7 +2403,7 @@ msgstr "Tiefe (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 msgctxt "@info:tooltip" msgid "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model." -msgstr "" +msgstr "Für Lithophanien sollten dunkle Pixel dickeren Positionen entsprechen, um mehr einfallendes Licht zu blockieren. Für Höhenkarten stellen hellere Pixel höheres Terrain dar, sodass hellere Pixel dickeren Positionen im generierten 3D-Modell entsprechen sollten." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 msgctxt "@item:inlistbox" @@ -2661,7 +2528,7 @@ msgid "Printer Group" msgstr "Druckergruppe" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "Profileinstellungen" @@ -2674,19 +2541,19 @@ 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/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 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:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 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:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2858,18 +2725,24 @@ 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:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "Tipp" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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" @@ -2989,155 +2862,155 @@ 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:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "Namen anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "Marke" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "Materialtyp" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "Farbe" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "Eigenschaften" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "Dichte" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "Durchmesser" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "Filamentkosten" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "Filamentgewicht" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "Filamentlänge" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "Kosten pro Meter" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "Material trennen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "Beschreibung" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "Haftungsinformationen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /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:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "Aktivieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "Erstellen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "Duplizieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "Import" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "Drucker" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "Entfernen bestätigen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 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:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "Material importieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 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:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "Material exportieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 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:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "Material erfolgreich nach %1 exportiert" @@ -3178,388 +3051,411 @@ msgid "Unit" msgstr "Einheit" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "Allgemein" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "Schnittstelle" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "Sprache:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "Währung:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "Thema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 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:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "Automatisch schneiden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "Viewport-Verhalten" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "Überhang anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 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:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 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:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 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:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 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:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 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:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +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 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "In Mausrichtung zoomen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 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:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 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:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 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:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 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:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 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:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 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:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 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:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 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:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +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 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "Kamera-Rendering: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "Ansicht" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "Orthogonal" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "Dateien öffnen und speichern" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 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:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "Große Modelle anpassen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Extrem kleine Modelle skalieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 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:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 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:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 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:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 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:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 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:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 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:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 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:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 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:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "Stets nachfragen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Immer als Projekt öffnen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "Modelle immer importieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "Profile" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 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:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /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:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "Geänderte Einstellungen immer verwerfen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 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:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "Privatsphäre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 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:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Bei Start nach Updates suchen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(Anonyme) Druckinformationen senden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "Mehr Informationen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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:715 +#: /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:720 +#: /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:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "Drucker" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "Umbenennen" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /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:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "Erstellen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "Duplizieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "Profil erstellen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 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:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Profil duplizieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "Profil umbenennen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "Profil importieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "Profil exportieren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Drucker: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /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:413 +#: /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:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 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:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "Aktuelle Änderungen verwerfen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 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:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 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:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "Globale Einstellungen" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "Marktplatz" @@ -3622,33 +3518,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "Einstellungen durchsuchen" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 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:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 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:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide 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 "Don't show this setting" msgstr "Diese Einstellung ausblenden" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Diese Einstellung weiterhin anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Sichtbarkeit einstellen wird konfiguriert..." @@ -3664,32 +3560,32 @@ msgstr "" "\n" "Klicken Sie, um diese Einstellungen sichtbar zu machen." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." -msgstr "" +msgstr "Diese Einstellung wird nicht verwendet, weil alle hierdurch beeinflussten Einstellungen aufgehoben werden." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "Hat Einfluss auf" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Wird beeinflusst von" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 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:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 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:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3700,7 +3596,7 @@ msgstr "" "\n" "Klicken Sie, um den Wert des Profils wiederherzustellen." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3716,7 +3612,7 @@ msgctxt "@button" msgid "Recommended" msgstr "Empfohlen" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "Benutzerdefiniert" @@ -3741,12 +3637,12 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Damit werden Strukturen zur Unterstützung von Modellteilen mit Überhängen generiert. Ohne diese Strukturen würden solche Teile während des Druckvorgangs zusammenfallen." -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "Haftung" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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." @@ -3764,7 +3660,7 @@ msgstr "Sie haben einige Profileinstellungen geändert. Wenn Sie diese ändern m #: /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 "" +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" @@ -3800,7 +3696,7 @@ 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." -msgstr "" +msgstr "Druckeinrichtung ist deaktiviert. G-Code-Datei kann nicht geändert werden." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:52 msgctxt "@label" @@ -3832,59 +3728,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "G-Code senden" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "Einen benutzerdefinierten G-Code-Befehl an den verbundenen Drucker senden. „Eingabe“ drücken, um den Befehl zu senden." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "Extruder" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "Die Zieltemperatur des Hotend. Das Hotend wird auf diese Temperatur aufgeheizt oder abgekühlt. Wenn der Wert 0 beträgt, wird die Hotend-Heizung ausgeschaltet." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "Die aktuelle Temperatur dieses Hotends." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "Die Temperatur, auf die das Hotend vorgeheizt wird." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "Abbrechen" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "Vorheizen" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "Heizen Sie das Hotend vor Druckbeginn auf. Sie können Ihren Druck während des Aufheizens weiter anpassen und müssen nicht warten, bis das Hotend aufgeheizt ist, wenn Sie druckbereit sind." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "Die Farbe des Materials in diesem Extruder." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "Das Material in diesem Extruder." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "Die in diesem Extruder eingesetzte Düse." @@ -3929,11 +3825,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "Favoriten" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -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" @@ -3949,32 +3840,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Dr&ucker" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "&Material" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Als aktiven Extruder festlegen" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Extruder aktivieren" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Extruder deaktivieren" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /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:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" @@ -3984,7 +3875,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "&Kameraposition" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "Kameraansicht" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "Ansicht" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "Orthogonal" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "&Druckplatte" @@ -4004,17 +3910,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Sichtbarkeit einstellen verwalten..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "&Speichern..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "&Exportieren..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "Auswahl exportieren..." @@ -4103,22 +4009,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "&Zuletzt geöffnet" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "Aktiver Druck" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "Name des Auftrags" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "Druckzeit" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "Geschätzte verbleibende Zeit" @@ -4126,12 +4032,17 @@ msgstr "Geschätzte verbleibende Zeit" #: /home/ruben/Projects/Cura/resources/qml/ViewsSelector.qml:50 msgctxt "@label" msgid "View type" -msgstr "" +msgstr "Typ anzeigen" + +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "Objektliste" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" -msgstr "" +msgstr "Hallo %1" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:33 msgctxt "@button" @@ -4160,6 +4071,9 @@ msgid "" "- Store your Ultimaker Cura settings in the cloud for use anywhere\n" "- Get exclusive access to print profiles from leading brands" msgstr "" +"- Aufträge an Ultimaker-Drucker außerhalb Ihres lokalen Netzwerks senden\n" +"- Ihre Ultimaker Cura-Einstellungen für die Verwendung andernorts an die Cloud senden\n" +"- Exklusiven Zugang zu Druckprofilen von führenden Marken erhalten" #: /home/ruben/Projects/Cura/resources/qml/Account/GeneralOperations.qml:78 msgctxt "@button" @@ -4176,32 +4090,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "Keine Kostenschätzung verfügbar" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "Vorschau" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Das Slicing läuft..." -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" -msgstr "" +msgstr "Slicing nicht möglich" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "Verarbeitung läuft" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "Slice" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "Slicing-Vorgang starten" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "Abbrechen" @@ -4209,12 +4128,12 @@ msgstr "Abbrechen" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:31 msgctxt "@label" msgid "Time estimation" -msgstr "" +msgstr "Zeitschätzung" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:114 msgctxt "@label" msgid "Material estimation" -msgstr "" +msgstr "Materialschätzung" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:164 msgctxt "@label m for meter" @@ -4236,233 +4155,238 @@ msgctxt "@label" msgid "Preset printers" msgstr "Voreingestellte Drucker" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "Drucker hinzufügen" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "Drucker verwalten" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "Online-Fehlerbehebung anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "Umschalten auf Vollbild-Modus" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "Vollbildmodus beenden" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&Rückgängig machen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Wiederholen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Beenden" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "3D-Ansicht" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "Vorderansicht" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "Draufsicht" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "Ansicht von links" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "Ansicht von rechts" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Cura konfigurieren..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Drucker hinzufügen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Dr&ucker verwalten..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Materialien werden verwaltet..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Profil mit aktuellen Einstellungen/Überschreibungen aktualisieren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Aktuelle Änderungen verwerfen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "P&rofil von aktuellen Einstellungen/Überschreibungen erstellen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Profile verwalten..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Online-&Dokumentation anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "&Fehler melden" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" -msgstr "" +msgstr "Neuheiten" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "Über..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "Ausgewähltes Modell löschen" msgstr[1] "Ausgewählte Modelle löschen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Ausgewähltes Modell zentrieren" msgstr[1] "Ausgewählte Modelle zentrieren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Ausgewähltes Modell multiplizieren" msgstr[1] "Ausgewählte Modelle multiplizieren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Modell löschen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Modell auf Druckplatte ze&ntrieren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "Modelle &gruppieren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Gruppierung für Modelle aufheben" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Modelle &zusammenführen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "Modell &multiplizieren..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Alle Modelle wählen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Druckplatte reinigen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Alle Modelle neu laden" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Alle Modelle an allen Druckplatten anordnen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Alle Modelle anordnen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Anordnung auswählen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Alle Modellpositionen zurücksetzen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Alle Modelltransformationen zurücksetzen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Datei(en) öffnen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Neues Projekt..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Konfigurationsordner anzeigen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "&Marktplatz" @@ -4477,52 +4401,52 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Dieses Paket wird nach einem Neustart installiert." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "Einstellungen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "Cura wird geschlossen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 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:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /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:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "Paket installieren" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "Datei(en) öffnen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "Drucker hinzufügen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" -msgstr "" +msgstr "Neuheiten" #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 msgctxt "@label %1 is filled in with the name of an extruder" @@ -4744,32 +4668,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Projekt speichern" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /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:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extruder %1" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & Material" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" -msgstr "" +msgstr "Material" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 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:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "Speichern" @@ -4802,158 +4726,158 @@ msgstr "Modelle importieren" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DropDownWidget.qml:93 msgctxt "@label" msgid "Empty" -msgstr "" +msgstr "Leer" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:24 msgctxt "@label" msgid "Add a printer" -msgstr "" +msgstr "Einen Drucker hinzufügen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:39 msgctxt "@label" msgid "Add a networked printer" -msgstr "" +msgstr "Einen vernetzten Drucker hinzufügen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:81 msgctxt "@label" msgid "Add a non-networked printer" -msgstr "" +msgstr "Einen unvernetzten Drucker hinzufügen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:70 msgctxt "@label" msgid "Add printer by IP address" -msgstr "" +msgstr "Drucker nach IP-Adresse hinzufügen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:133 msgctxt "@text" msgid "Place enter your printer's IP address." -msgstr "" +msgstr "Bitte geben Sie die IP-Adresse Ihres Druckers ein." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:158 msgctxt "@button" msgid "Add" -msgstr "" +msgstr "Hinzufügen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:204 msgctxt "@label" msgid "Could not connect to device." -msgstr "" +msgstr "Verbindung mit Drucker nicht möglich." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:208 msgctxt "@label" msgid "The printer at this address has not responded yet." -msgstr "" +msgstr "Der Drucker unter dieser Adresse hat noch nicht reagiert." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:240 msgctxt "@label" msgid "This printer cannot be added because it's an unknown printer or it's not the host of a group." -msgstr "" +msgstr "Dieser Drucker kann nicht hinzugefügt werden, weil es sich um einen unbekannten Drucker handelt oder er nicht im Host einer Gruppe enthalten ist." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:329 msgctxt "@button" msgid "Back" -msgstr "" +msgstr "Zurück" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:342 msgctxt "@button" msgid "Connect" -msgstr "" +msgstr "Verbinden" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/FirstStartMachineActionsContent.qml:77 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:123 msgctxt "@button" msgid "Next" -msgstr "" +msgstr "Weiter" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:23 msgctxt "@label" msgid "User Agreement" -msgstr "" +msgstr "Benutzervereinbarung" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:56 msgctxt "@button" msgid "Agree" -msgstr "" +msgstr "Stimme zu" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:70 msgctxt "@button" msgid "Decline and close" -msgstr "" +msgstr "Ablehnen und schließen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:24 msgctxt "@label" msgid "Help us to improve Ultimaker Cura" -msgstr "" +msgstr "Helfen Sie uns, Ultimaker Cura zu verbessern" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:57 msgctxt "@text" msgid "Ultimaker Cura collects anonymous data to improve print quality and user experience, including:" -msgstr "" +msgstr "Ultimaker Cura erfasst anonyme Daten, um die Druckqualität und Benutzererfahrung zu steigern. Dazu gehören:" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:71 msgctxt "@text" msgid "Machine types" -msgstr "" +msgstr "Gerätetypen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:77 msgctxt "@text" msgid "Material usage" -msgstr "" +msgstr "Materialverbrauch" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:83 msgctxt "@text" msgid "Number of slices" -msgstr "" +msgstr "Anzahl der Slices" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:89 msgctxt "@text" msgid "Print settings" -msgstr "" +msgstr "Druckeinstellungen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:102 msgctxt "@text" msgid "Data collected by Ultimaker Cura will not contain any personal information." -msgstr "" +msgstr "Die von Ultimaker Cura erfassten Daten enthalten keine personenbezogenen Daten." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:103 msgctxt "@text" msgid "More information" -msgstr "" +msgstr "Mehr Informationen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WhatsNewContent.qml:24 msgctxt "@label" msgid "What's new in Ultimaker Cura" -msgstr "" +msgstr "Neuheiten bei Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:42 msgctxt "@label" msgid "There is no printer found over your network." -msgstr "" +msgstr "Kein Drucker in Ihrem Netzwerk gefunden." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:179 msgctxt "@label" msgid "Refresh" -msgstr "" +msgstr "Aktualisieren" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:190 msgctxt "@label" msgid "Add printer by IP" -msgstr "" +msgstr "Drucker nach IP hinzufügen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:223 msgctxt "@label" msgid "Troubleshooting" -msgstr "" +msgstr "Störungen beheben" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" -msgstr "" +msgstr "Druckername" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" -msgstr "" +msgstr "Weisen Sie Ihrem Drucker bitte einen Namen zu" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:36 msgctxt "@label" @@ -4963,37 +4887,37 @@ msgstr "Ultimaker Cloud" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:77 msgctxt "@text" msgid "The next generation 3D printing workflow" -msgstr "" +msgstr "Der 3D-Druckablauf der nächsten Generation" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:94 msgctxt "@text" msgid "- Send print jobs to Ultimaker printers outside your local network" -msgstr "" +msgstr "- Aufträge an Ultimaker-Drucker außerhalb Ihres lokalen Netzwerks senden" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:97 msgctxt "@text" msgid "- Store your Ultimaker Cura settings in the cloud for use anywhere" -msgstr "" +msgstr "- Ihre Ultimaker Cura-Einstellungen für die Verwendung andernorts an die Cloud senden" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:100 msgctxt "@text" msgid "- Get exclusive access to print profiles from leading brands" -msgstr "" +msgstr "- Exklusiven Zugang zu Druckprofilen von führenden Marken erhalten" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:119 msgctxt "@button" msgid "Finish" -msgstr "" +msgstr "Beenden" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:128 msgctxt "@button" msgid "Create an account" -msgstr "" +msgstr "Ein Konto erstellen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:29 msgctxt "@label" msgid "Welcome to Ultimaker Cura" -msgstr "" +msgstr "Willkommen bei Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:47 msgctxt "@text" @@ -5001,26 +4925,13 @@ msgid "" "Please follow these steps to set up\n" "Ultimaker Cura. This will only take a few moments." msgstr "" +"Befolgen Sie bitte diese Schritte für das Einrichten von\n" +"Ultimaker Cura. Dies dauert nur wenige Sekunden." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:58 msgctxt "@button" msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "Nur aktuelle Druckplatte anzeigen" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "An allen Druckplatten ausrichten" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "An aktueller Druckplatte ausrichten" +msgstr "Erste Schritte" #: MachineSettingsAction/plugin.json msgctxt "description" @@ -5105,12 +5016,22 @@ msgstr "Firmware-Aktualisierungsfunktion" #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattened quality changes profile." -msgstr "" +msgstr "Erstellt eine geglättete Qualität, verändert das Profil." #: ProfileFlattener/plugin.json msgctxt "name" msgid "Profile Flattener" -msgstr "" +msgstr "Profilglättfunktion" + +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "Ermöglicht das Lesen von AMF-Dateien." + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "AMF-Reader" #: USBPrinting/plugin.json msgctxt "description" @@ -5122,16 +5043,6 @@ msgctxt "name" msgid "USB printing" msgstr "USB-Drucken" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "Ermöglicht das Speichern des resultierenden Slices als X3G-Datei, um Drucker zu unterstützen, die dieses Format lesen (Malyan, Makerbot und andere Sailfish-basierte Drucker)." - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "X3G-Writer" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5174,23 +5085,13 @@ msgstr "Ausgabegerät-Plugin für Wechseldatenträger" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Verwaltet Netzwerkverbindungen zu Ultimaker 3-Druckern." +msgid "Manages network connections to Ultimaker networked printers." +msgstr "Verwaltet Netzwerkverbindungen zu Ultimaker-Netzwerkdruckern." #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "UM3-Netzwerkverbindung" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" -msgstr "" +msgid "Ultimaker Network Connection" +msgstr "Ultimaker-Netzwerkverbindung" #: MonitorStage/plugin.json msgctxt "description" @@ -5255,12 +5156,12 @@ msgstr "Stützstruktur-Radierer" #: UFPReader/plugin.json msgctxt "description" msgid "Provides support for reading Ultimaker Format Packages." -msgstr "" +msgstr "Bietet Unterstützung für das Lesen von Ultimaker Format Packages." #: UFPReader/plugin.json msgctxt "name" msgid "UFP Reader" -msgstr "" +msgstr "UFP-Reader" #: SliceInfoPlugin/plugin.json msgctxt "description" @@ -5345,12 +5246,12 @@ msgstr "Upgrade von Version 2.7 auf 3.0" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.5 to Cura 4.0." -msgstr "" +msgstr "Aktualisiert Konfigurationen von Cura 3.5 auf Cura 4.0." #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "name" msgid "Version Upgrade 3.5 to 4.0" -msgstr "" +msgstr "Upgrade von Version 3.5 auf 4.0" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" @@ -5365,12 +5266,12 @@ msgstr "Upgrade von Version 3.4 auf 3.5" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 4.0 to Cura 4.1." -msgstr "" +msgstr "Aktualisiert Konfigurationen von Cura 4.0 auf Cura 4.1." #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "name" msgid "Version Upgrade 4.0 to 4.1" -msgstr "" +msgstr "Upgrade von Version 4.0 auf 4.1" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" @@ -5382,6 +5283,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "Upgrade von Version 3.0 auf 3.1" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "Aktualisiert Konfigurationen von Cura 4.1 auf Cura 4.2." + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "Upgrade von Version 4.1 auf 4.2" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5412,6 +5323,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "Upgrade von Version 2.2 auf 2.4" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "Aktualisiert Konfigurationen von Cura 4.2 auf Cura 4.3." + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "Upgrade von Version 4.2 auf 4.3" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5422,6 +5343,16 @@ msgctxt "name" msgid "Image Reader" msgstr "Bild-Reader" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "Unterstützt das Lesen von Modelldateien." + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "Trimesh Reader" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5452,16 +5383,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "3MF-Reader" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5485,12 +5406,12 @@ msgstr "G-Code-Reader" #: CuraDrive/plugin.json msgctxt "description" msgid "Backup and restore your configuration." -msgstr "" +msgstr "Sicherung und Wiederherstellen Ihrer Konfiguration." #: CuraDrive/plugin.json msgctxt "name" msgid "Cura Backups" -msgstr "" +msgstr "Cura-Backups" #: CuraProfileWriter/plugin.json msgctxt "description" @@ -5525,12 +5446,12 @@ msgstr "3MF-Writer" #: PreviewStage/plugin.json msgctxt "description" msgid "Provides a preview stage in Cura." -msgstr "" +msgstr "Bietet eine Vorschaustufe in Cura." #: PreviewStage/plugin.json msgctxt "name" msgid "Preview Stage" -msgstr "" +msgstr "Vorschaustufe" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -5552,6 +5473,297 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura-Profil-Reader" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "Über Netzwerk verbunden." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "Über Netzwerk verbunden. Geben Sie die Zugriffsanforderung für den Drucker frei." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "Über Netzwerk verbunden. Kein Zugriff auf die Druckerverwaltung." + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "Zugriff auf Drucker erforderlich. Bestätigen Sie den Zugriff auf den Drucker" + +#~ msgctxt "@info:title" +#~ msgid "Authentication status" +#~ msgstr "Authentifizierungsstatus" + +#~ msgctxt "@info:title" +#~ msgid "Authentication Status" +#~ msgstr "Authentifizierungsstatus" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "Zugriffanforderung erneut senden" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "Zugriff auf den Drucker genehmigt" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "Kein Zugriff auf das Drucken mit diesem Drucker. Druckauftrag kann nicht gesendet werden." + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "Zugriff anfordern" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "Zugriffsanforderung für den Drucker senden" + +#~ msgctxt "@label" +#~ msgid "Unable to start a new print job." +#~ msgstr "Es kann kein neuer Druckauftrag gestartet werden." + +#~ msgctxt "@label" +#~ msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." +#~ msgstr "Es liegt ein Problem mit der Konfiguration Ihres Ultimaker vor, das den Druckstart verhindert. Lösen Sie dieses Problem bitte, bevor Sie fortfahren." + +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "Konfiguration nicht übereinstimmend" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "Möchten Sie wirklich mit der gewählten Konfiguration drucken?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Anforderungen zwischen der Druckerkonfiguration oder -kalibrierung und Cura stimmen nicht überein. Für optimale Ergebnisse schneiden Sie stets für die PrintCores und Materialien, die in Ihren Drucker eingelegt wurden." + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "Das Senden neuer Aufträge ist (vorübergehend) blockiert; der vorherige Druckauftrag wird noch gesendet." + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "Daten werden zum Drucker gesendet" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "Daten werden gesendet" + +#~ msgctxt "@info:status" +#~ msgid "No Printcore loaded in slot {slot_number}" +#~ msgstr "Kein PrintCore geladen in Steckplatz {slot_number}" + +#~ msgctxt "@info:status" +#~ msgid "No material loaded in slot {slot_number}" +#~ msgstr "Kein Material geladen in Steckplatz {slot_number}" + +#~ msgctxt "@label" +#~ msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" +#~ msgstr "Abweichender PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) für Extruder gewählt {extruder_id}" + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "Abweichendes Material (Cura: {0}, Drucker: {1}) für Extruder {2} gewählt" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "Synchronisieren Ihres Druckers" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "Möchten Sie Ihre aktuelle Druckerkonfiguration in Cura verwenden?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Die PrintCores und/oder Materialien auf Ihrem Drucker unterscheiden sich von denen Ihres aktuellen Projekts. Für optimale Ergebnisse schneiden Sie stets für die PrintCores und Materialien, die in Ihren Drucker eingelegt wurden." + +#~ msgctxt "@action:button" +#~ msgid "View in Monitor" +#~ msgstr "In Monitor überwachen" + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "Drucker '{printer_name}' hat '{job_name}' vollständig gedrückt." + +#~ msgctxt "@info:status" +#~ msgid "The print job '{job_name}' was finished." +#~ msgstr "Der Druckauftrag '{job_name}' wurde ausgeführt." + +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "Druck vollendet" + +#~ msgctxt "@label:material" +#~ msgid "Empty" +#~ msgstr "Leer" + +#~ msgctxt "@label:material" +#~ msgid "Unknown" +#~ msgstr "Unbekannt" + +#~ msgctxt "@info:title" +#~ msgid "Cloud error" +#~ msgstr "Cloudfehler" + +#~ msgctxt "@info:status" +#~ msgid "Could not export print job." +#~ msgstr "Druckauftrag konnte nicht exportiert werden." + +#~ msgctxt "@info:description" +#~ msgid "There was an error connecting to the cloud." +#~ msgstr "Es liegt ein Fehler beim Verbinden mit der Cloud vor." + +#~ msgctxt "@info:status" +#~ msgid "Uploading via Ultimaker Cloud" +#~ msgstr "Über Ultimaker Cloud hochladen" + +#~ msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." +#~ msgid "Connect to Ultimaker Cloud" +#~ msgstr "Verbinden mit Ultimaker Cloud" + +#~ msgctxt "@action" +#~ msgid "Don't ask me again for this printer." +#~ msgstr "Nicht mehr für diesen Drucker nachfragen." + +#~ msgctxt "@info:status" +#~ msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." +#~ msgstr "Sie können jetzt Druckaufträge mithilfe Ihres Ultimaker-Kontos von einem anderen Ort aus senden und überwachen." + +#~ msgctxt "@info:status" +#~ msgid "Connected!" +#~ msgstr "Verbunden!" + +#~ msgctxt "@action" +#~ msgid "Review your connection" +#~ msgstr "Ihre Verbindung überprüfen" + +#~ msgctxt "@info:status Don't translate the XML tags !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "Die Maschine, die im Profil {0} ({1}) definiert wurde, entspricht nicht Ihrer derzeitigen Maschine ({2}). Importieren nicht möglich." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "Failed to import profile from {0}:" +#~ msgstr "Import des Profils aus Datei {0} fehlgeschlagen:" + +#~ msgctxt "@window:title" +#~ msgid "Existing Connection" +#~ msgstr "Vorhandene Verbindung" + +#~ msgctxt "@message:text" +#~ msgid "This printer/group is already added to Cura. Please select another printer/group." +#~ msgstr "Diese/r Drucker/Gruppe wurde bereits zu Cura hinzugefügt. Wählen Sie bitte eine/n andere/n Drucker/Gruppe." + +#~ msgctxt "@label" +#~ msgid "Enter the IP address or hostname of your printer on the network." +#~ msgstr "Geben Sie die IP-Adresse oder den Hostnamen Ihres Druckers auf dem Netzwerk ein." + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "Mit einem Drucker verbinden" + +#~ msgctxt "@title" +#~ msgid "Cura Settings Guide" +#~ msgstr "Anleitung für Cura-Einstellungen" + +#~ msgctxt "@info:tooltip" +#~ msgid "Zooming towards the mouse is not supported in the orthogonal perspective." +#~ msgstr "Das Zoomen in Mausrichtung wird in der Orthogonalansicht nicht unterstützt." + +#~ msgid "Orthogonal" +#~ msgstr "Orthogonal" + +#~ msgctxt "description" +#~ msgid "Manages network connections to Ultimaker 3 printers." +#~ msgstr "Verwaltet Netzwerkverbindungen zu Ultimaker 3-Druckern." + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "UM3-Netzwerkverbindung" + +#~ msgctxt "description" +#~ msgid "Provides extra information and explanations about settings in Cura, with images and animations." +#~ msgstr "Bietet zusätzliche Informationen und Erklärungen zu den Einstellungen in Cura mit Abbildungen und Animationen." + +#~ msgctxt "name" +#~ msgid "Settings Guide" +#~ msgstr "Anleitung für Einstellungen" + +#~ msgctxt "@item:inmenu" +#~ msgid "Cura Settings Guide" +#~ msgstr "Anleitung für Cura-Einstellungen" + +#~ msgctxt "@info:generic" +#~ msgid "Settings have been changed to match the current availability of extruders: [%s]" +#~ msgstr "Die Einstellungen wurden passend für die aktuelle Verfügbarkeit der Extruder geändert: [%s]" + +#~ msgctxt "@title:groupbox" +#~ msgid "User description" +#~ msgstr "Benutzerbeschreibung" + +#~ msgctxt "@info" +#~ msgid "These options are not available because you are monitoring a cloud printer." +#~ msgstr "Diese Optionen sind nicht verfügbar, weil Sie einen Cloud-Drucker überwachen." + +#~ msgctxt "@label link to connect manager" +#~ msgid "Go to Cura Connect" +#~ msgstr "Gehe zu Cura Connect" + +#~ msgctxt "@info" +#~ msgid "All jobs are printed." +#~ msgstr "Alle Aufträge wurden gedruckt." + +#~ msgctxt "@label link to connect manager" +#~ msgid "View print history" +#~ msgstr "Druckauftragshistorie anzeigen" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "Um über das Netzwerk direkt auf Ihrem Drucker zu drucken, stellen Sie bitte sicher, dass der Drucker mit dem Netzwerkkabel verbunden ist oder verbinden Sie Ihren Drucker mit Ihrem WLAN-Netzwerk. Wenn Sie Cura nicht mit Ihrem Drucker verbinden, können Sie dennoch ein USB-Laufwerk für die Übertragung von G-Code-Dateien auf Ihren Drucker verwenden.\n" +#~ "\n" +#~ "Wählen Sie Ihren Drucker aus der folgenden Liste:" + +#~ msgctxt "@info" +#~ msgid "" +#~ "Please make sure your printer has a connection:\n" +#~ "- Check if the printer is turned on.\n" +#~ "- Check if the printer is connected to the network." +#~ msgstr "" +#~ "Stellen Sie bitte sicher, dass Ihr Drucker verbunden ist:\n" +#~ "- Prüfen Sie, ob Ihr Drucker eingeschaltet ist.\n" +#~ "- Prüfen Sie, ob der Drucker mit dem Netzwerk verbunden ist." + +#~ msgctxt "@option:check" +#~ msgid "See only current build plate" +#~ msgstr "Nur aktuelle Druckplatte anzeigen" + +#~ msgctxt "@action:button" +#~ msgid "Arrange to all build plates" +#~ msgstr "An allen Druckplatten ausrichten" + +#~ msgctxt "@action:button" +#~ msgid "Arrange current build plate" +#~ msgstr "An aktueller Druckplatte ausrichten" + +#~ msgctxt "description" +#~ msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." +#~ msgstr "Ermöglicht das Speichern des resultierenden Slices als X3G-Datei, um Drucker zu unterstützen, die dieses Format lesen (Malyan, Makerbot und andere Sailfish-basierte Drucker)." + +#~ msgctxt "name" +#~ msgid "X3GWriter" +#~ msgstr "X3G-Writer" + +#~ msgctxt "description" +#~ msgid "Reads SVG files as toolpaths, for debugging printer movements." +#~ msgstr "Liest SVG-Dateien als Werkzeugwege für die Fehlersuche bei Druckerbewegungen." + +#~ msgctxt "name" +#~ msgid "SVG Toolpath Reader" +#~ msgstr "SVG-Werkzeugweg-Reader" + #~ msgctxt "@item:inmenu" #~ msgid "Changelog" #~ msgstr "Änderungsprotokoll" diff --git a/resources/i18n/de_DE/fdmextruder.def.json.po b/resources/i18n/de_DE/fdmextruder.def.json.po index 7d47548956..be1234cf71 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.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+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 77c8b8e55c..18172c1779 100644 --- a/resources/i18n/de_DE/fdmprinter.def.json.po +++ b/resources/i18n/de_DE/fdmprinter.def.json.po @@ -5,12 +5,12 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" -"PO-Revision-Date: 2019-03-13 14:00+0200\n" -"Last-Translator: Bothof \n" -"Language-Team: German\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" +"PO-Revision-Date: 2019-07-29 15:51+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: German , German \n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -215,6 +215,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "Option für vorhandene beheizte Druckplatte." +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "Verfügt über Temperaturstabilisierung für den Druckraum" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "Zeigt an, ob das Gerät die Temperatur im Druckraum stabilisieren kann." + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -238,7 +248,7 @@ msgstr "Anzahl der Extruder-Elemente. Ein Extruder-Element ist die Kombination a #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders That Are Enabled" -msgstr "" +msgstr "Anzahl der aktivierten Extruder" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -248,7 +258,7 @@ msgstr "Anzahl der aktivierten Extruder-Elemente; wird automatisch in der Softwa #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer Nozzle Diameter" -msgstr "" +msgstr "Düsendurchmesser außen" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter description" @@ -258,7 +268,7 @@ msgstr "Der Außendurchmesser der Düsenspitze." #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle Length" -msgstr "" +msgstr "Düsenlänge" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance description" @@ -268,7 +278,7 @@ msgstr "Der Höhenunterschied zwischen der Düsenspitze und dem untersten Bereic #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle Angle" -msgstr "" +msgstr "Düsenwinkel" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle description" @@ -278,7 +288,7 @@ msgstr "Der Winkel zwischen der horizontalen Planfläche und dem konischen Teil #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat Zone Length" -msgstr "" +msgstr "Heizzonenlänge" #: fdmprinter.def.json msgctxt "machine_heat_zone_length description" @@ -308,7 +318,7 @@ msgstr "Für die Temperatursteuerung von Cura. Schalten Sie diese Funktion aus, #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat Up Speed" -msgstr "" +msgstr "Aufheizgeschwindigkeit" #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed description" @@ -318,7 +328,7 @@ msgstr "Die Geschwindigkeit (°C/Sek.), mit der die Düse durchschnittlich bei n #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool Down Speed" -msgstr "" +msgstr "Abkühlgeschwindigkeit" #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed description" @@ -337,8 +347,8 @@ msgstr "Die Mindestzeit, die ein Extruder inaktiv sein muss, bevor die Düse abk #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" -msgstr "" +msgid "G-code Flavor" +msgstr "G-Code-Variante" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" @@ -403,7 +413,7 @@ msgstr "Definiert, ob Firmware-Einzugsbefehle (G10/G11) anstelle der E-Eigenscha #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed Areas" -msgstr "" +msgstr "Unzulässige Bereiche" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" @@ -423,7 +433,7 @@ msgstr "Eine Liste mit Polygonen mit Bereichen, in welche die Düse nicht eintre #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine Head Polygon" -msgstr "" +msgstr "Gerätekopf Polygon" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -433,7 +443,7 @@ msgstr "Eine 2D-Shilhouette des Druckkopfes (ohne Lüfterkappen)." #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine Head & Fan Polygon" -msgstr "" +msgstr "Gerätekopf und Lüfter Polygon" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -443,7 +453,7 @@ msgstr "Eine 2D-Shilhouette des Druckkopfes (mit Lüfterkappen)." #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry Height" -msgstr "" +msgstr "Brückenhöhe" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -473,7 +483,7 @@ msgstr "Der Innendurchmesser der Düse. Verwenden Sie diese Einstellung, wenn Si #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset with Extruder" -msgstr "" +msgstr "Versatz mit Extruder" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -1270,6 +1280,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "Schärfste Kante" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "Position der Z-Naht" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "Die Position in der Nähe der Stelle, an der die einzelnen Teile einer Ebene gedruckt werden sollen." + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "Hinten links" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "Zurück" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "Hinten rechts" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "Rechts" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "Vorne rechts" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "Vorne" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "Vorne links" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "Links" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1297,8 +1357,8 @@ msgstr "Präferenz Nahtkante" #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "Definieren Sie, ob Kanten am Modell-Umriss die Nahtposition beeinflussen. Keine bedeutet, dass Kanten keinen Einfluss auf die Nahtposition haben. Naht verbergen lässt die Naht mit höherer Wahrscheinlichkeit an einer innenliegenden Kante auftreten. Naht offenlegen lässt die Naht mit höherer Wahrscheinlichkeit an einer Außenkante auftreten. Naht verbergen oder offenlegen lässt die Naht mit höherer Wahrscheinlichkeit an einer innenliegenden oder außenliegenden Kante auftreten." +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "Definieren Sie, ob Kanten am Modell-Umriss die Nahtposition beeinflussen. Keine bedeutet, dass Kanten keinen Einfluss auf die Nahtposition haben. Naht verbergen lässt die Naht mit höherer Wahrscheinlichkeit an einer innenliegenden Kante auftreten. Naht offenlegen lässt die Naht mit höherer Wahrscheinlichkeit an einer Außenkante auftreten. Naht verbergen oder offenlegen lässt die Naht mit höherer Wahrscheinlichkeit an einer innenliegenden oder außenliegenden Kante auftreten. Intelligent verbergen lässt die Naht an innen- oder außenliegenden Kanten auftreten, verwendet aber – falls zweckmäßig – häufiger innenliegende Kanten." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1320,6 +1380,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "Naht verbergen oder offenlegen" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "Intelligent verbergen" + #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" @@ -1332,13 +1397,13 @@ msgstr "Bei Aktivierung sind die Z-Naht-Koordinaten relativ zur Mitte der jeweil #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "Schmale Z-Lücken ignorieren" +msgid "No Skin in Z Gaps" +msgstr "Keine Außenhaut in Z-Lücken" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "Wenn das Modell schmale vertikale Lücken hat, kann etwa 5 % zusätzliche Rechenzeit aufgewendet werden, um eine obere und untere Außenhaut in diesen engen Räumen zu generieren. In diesem Fall deaktivieren Sie die Einstellung." +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "Wenn das Modell kleine, nur wenige Schichten hohe vertikale Lücken aufweist, sind diese normalerweise von einer Außenhaut bedeckt. Aktivieren Sie diese Einstellung, damit bei sehr kleinen Lücken keine Außenhaut gedruckt wird. Dies verkürzt die zum Drucken und Slicen benötigte Zeit, aber die Füllung bleibt der Luft ausgesetzt." #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1357,8 +1422,9 @@ msgstr "Glätten aktivieren" #: fdmprinter.def.json 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." +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." #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1450,6 +1516,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "Die maximale unmittelbare Geschwindigkeitsänderung während des Glättens." +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "Prozentsatz Außenhaut überlappen" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Justieren Sie die Überlappung zwischen den Wänden und den Außenhaut-Mittellinien bzw. den Endpunkten der Außenhaut-Mittellinien als Prozentwert der Linienbreite der Außenhautlinien und der inneren Wand. Eine geringe Überlappung ermöglicht die feste Verbindung der Wände mit der Außenhaut. Beachten Sie, dass bei einer einheitlichen Linienbreite von Außenhaut und Wand jeder Prozentwert über 50 % bereits dazu führen kann, dass die Außenhaut über die Wand hinausgeht, da in diesem Moment die Position der Düse des Außenhaut-Extruders möglicherweise bereits über die Wandmitte hinausgeht." + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "Außenhaut überlappen" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Justieren Sie die Überlappung zwischen den Wänden und den Außenhaut-Mittellinien bzw. den Endpunkten der Außenhaut-Mittellinien. Eine geringe Überlappung ermöglicht die feste Verbindung der Wände mit der Außenhaut. Beachten Sie, dass bei einer einheitlichen Linienbreite von Außenhaut und Wand jeder Wert über die Hälfte der Wandbreite bereits dazu führen kann, dass die Außenhaut über die Wand hinausgeht, da in diesem Moment die Position der Düse des Außenhaut-Extruders möglicherweise bereits über die Wandmitte hinausgeht." + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1615,6 +1701,17 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Das Füllmuster wird um diese Distanz entlang der Y-Achse verschoben." +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +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." + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1669,26 +1766,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "Das Ausmaß des Überlappens zwischen der Füllung und den Wänden. Ein leichtes Überlappen ermöglicht es den Wänden, eine solide Verbindung mit der Füllung herzustellen." -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "Prozentsatz Außenhaut überlappen" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Justieren Sie die Überlappung zwischen den Wänden und den Außenhaut-Mittellinien bzw. den Endpunkten der Außenhaut-Mittellinien als Prozentwert der Linienbreite der Außenhautlinien und der inneren Wand. Eine geringe Überlappung ermöglicht die feste Verbindung der Wände mit der Außenhaut. Beachten Sie, dass bei einer einheitlichen Linienbreite von Außenhaut und Wand jeder Prozentwert über 50 % bereits dazu führen kann, dass die Außenhaut über die Wand hinausgeht, da in diesem Moment die Position der Düse des Außenhaut-Extruders möglicherweise bereits über die Wandmitte hinausgeht." - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "Außenhaut überlappen" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Justieren Sie die Überlappung zwischen den Wänden und den Außenhaut-Mittellinien bzw. den Endpunkten der Außenhaut-Mittellinien. Eine geringe Überlappung ermöglicht die feste Verbindung der Wände mit der Außenhaut. Beachten Sie, dass bei einer einheitlichen Linienbreite von Außenhaut und Wand jeder Wert über die Hälfte der Wandbreite bereits dazu führen kann, dass die Außenhaut über die Wand hinausgeht, da in diesem Moment die Position der Düse des Außenhaut-Extruders möglicherweise bereits über die Wandmitte hinausgeht." - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1872,12 +1949,12 @@ msgstr "Die für den Druck verwendete Standardtemperatur. Dies sollte die „Bas #: fdmprinter.def.json msgctxt "build_volume_temperature label" msgid "Build Volume Temperature" -msgstr "" +msgstr "Temperatur Druckabmessung" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." -msgstr "" +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." +msgstr "Die Temperatur der Druckumgebung. Beträgt der Wert 0, wird die Druckraumtemperatur nicht angepasst." #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1989,6 +2066,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "Schrumpfungsverhältnis in Prozent." +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "Kristallines Material" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "Lässt sich das Material im erhitzten Zustand leicht brechen (kristallin) oder bildet es lange, verflochtene Polymerketten (nicht kristallin)?" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "Einzugsmaß für Sickerschutz" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "Maß, um das das Material eingezogen werden muss, damit es nicht heraussickert." + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "Einzugsgeschwindigkeit für Sickerschutz" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "Geschwindigkeit, mit der das Material beim Filamentwechsel eingezogen werden muss, damit es nicht heraussickert." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "Einzugsmaß für Bruchvorbereitung" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "Streckmaß für das Filament im erhitzten Zustand, bevor es bricht." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "Einzugsgeschwindigkeit für Bruchvorbereitung" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "Geschwindigkeit, mit der das Filament eingezogen werden muss, bevor es beim Einziehen abgebrochen wird." + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "Einzugsmaß für das Brechen" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "Maß, um das das Filament eingezogen werden muss, damit es sauber abgebrochen werden kann." + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "Einzugsgeschwindigkeit für das Brechen" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "Geschwindigkeit, mit der das Filament eingezogen werden muss, damit es sauber abgebrochen werden kann." + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "Bruchtemperatur" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "Die Temperatur, bei der das Filament für eine saubere Bruchstelle gebrochen wird." + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -1999,6 +2156,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "Fluss-Kompensation: Die extrudierte Materialmenge wird mit diesem Wert multipliziert." +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "Wandfluss" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "Durchflusskompensation an Wandlinien." + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "Wandfluss außen" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "Durchflusskompensation an der äußeren Wandlinie." + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "Wandfluss innen" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "Durchflusskompensation an allen Wandlinien bis auf die äußere." + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "Fluss oben/unten" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "Durchflusskompensation an oberen/unteren Linien." + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "Fluss Oberfläche Außenhaut" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "Durchflusskompensation an Linien von Flächen an der Oberseite des Druckobjekts." + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "Fluss der Füllung" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "Durchflusskompensation an Füllungslinien." + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "Skirt/Brim-Fluss" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "Durchflusskompensation an Skirt- oder Brim-Linien." + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "Stützstruktur-Fluss" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "Durchflusskompensation an Stützstrukturlinien." + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "Fluss Stützstruktur-Schnittstelle" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "Durchflusskompensation an Dach- oder Bodenlinien der Stützstruktur." + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "Stützdachfluss" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "Durchflusskompensation an Stützdachlinien." + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "Stützbodenfluss" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "Durchflusskompensation an Stützbodenlinien." + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "Fluss Einzugsturm" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "Durchflusskompensation an Einzugsturmlinien." + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2116,7 +2393,7 @@ msgstr "Stützstruktur-Einzüge einschränken" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." msgstr "Lassen Sie den Einzug beim Vorgehen von Stützstruktur zu Stützstruktur in einer geraden Linie aus. Die Aktivierung dieser Einstellung spart Druckzeit, kann jedoch zu übermäßigem Fadenziehen innerhalb der Stützstruktur führen." #: fdmprinter.def.json @@ -2169,6 +2446,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "Die Geschwindigkeit, mit der das Filament während eines Düsenschaltereinzugs zurückgeschoben wird." +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "Zusätzliche Einzugsmenge bei Düsenwechsel" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "Nach einem Düsenwechsel zusätzlich bereitzustellendes Material." + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2360,14 +2647,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "Die Geschwindigkeit, mit der die Skirt- und Brim-Elemente gedruckt werden. Normalerweise wird dafür die Geschwindigkeit der Basisschicht verwendet. In machen Fällen kann es jedoch vorteilhaft sein, das Skirt- oder Brim-Element mit einer anderen Geschwindigkeit zu drucken." #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "Maximale Z-Geschwindigkeit" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "Sprunghöhe Z" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "Die maximale Geschwindigkeit, mit der die Druckplatte bewegt wird. Eine Einstellung auf Null veranlasst die Verwendung der Firmware-Grundeinstellungen für die maximale Z-Geschwindigkeit." +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "Die Geschwindigkeit, mit der bei Z-Sprüngen die vertikale Bewegung (Z-Achse) erfolgt. Diese liegt in der Regel unterhalb der Druckgeschwindigkeit, da die Bewegung von Druckbett oder Brücke schwieriger ist." #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2869,16 +3156,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "Der Abstand zwischen der Düse und den bereits gedruckten Teilen, wenn diese bei Bewegungen umgangen werden." -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "Startet Schichten mit demselben Teil" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "Beginnen Sie in jeder Schicht mit dem Drucken des Objekts in der Nähe desselben Punkts, sodass keine neue Schicht begonnen wird, wenn das Teil gedruckt wird, mit dem die letzte Schicht geendet hat. Damit lassen sich Überhänge und kleine Teile besser herstellen, allerdings verlängert sich die Druckzeit." - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -2942,12 +3219,12 @@ msgstr "Nachdem das Gerät von einem Extruder zu einem anderen geschaltet hat, w #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height label" msgid "Z Hop After Extruder Switch Height" -msgstr "" +msgstr "Z-Sprung nach Extruder-Schalterhöhe" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height description" msgid "The height difference when performing a Z Hop after extruder switch." -msgstr "" +msgstr "Der Höhenunterschied bei Ausführung eines Z-Sprungs nach Extruder-Schalter." #: fdmprinter.def.json msgctxt "cooling label" @@ -3222,7 +3499,7 @@ msgstr "Quer" #: fdmprinter.def.json msgctxt "support_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "Gyroid" #: fdmprinter.def.json msgctxt "support_wall_count label" @@ -3285,14 +3562,16 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "Der Abstand zwischen der ursprünglichen gedruckten Stützstrukturlinien. Diese Einstellung wird anhand der Dichte der Stützstruktur berechnet." #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "Unterstützung Linienrichtung Füllung" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." -msgstr "Ausrichtung des Füllmusters für Unterstützung. Das Füllmuster für Unterstützung wird in der horizontalen Planfläche gedreht." +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." #: fdmprinter.def.json msgctxt "support_brim_enable label" @@ -3421,8 +3700,8 @@ msgstr "Abstand für Zusammenführung der Stützstrukturen" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." -msgstr "Der Maximalabstand zwischen Stützstrukturen in der X- und Y-Richtung. Wenn sich einzelne Strukturen näher aneinander befinden, als dieser Wert, werden diese Strukturen in eine einzige Struktur zusammengefügt." +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." +msgstr "Der Maximalabstand zwischen Stützstrukturen in der X- und Y-Richtung. Wenn der Abstand einzelner Strukturen zueinander diesen Wert unterschreitet, werden diese Strukturen miteinander kombiniert und bilden eine Struktur." #: fdmprinter.def.json msgctxt "support_offset label" @@ -3759,6 +4038,45 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "Umfang des angewandten Versatzes für die Böden der Stützstruktur." +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +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." + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +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." + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +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." + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3800,13 +4118,13 @@ msgid "The diameter of a special tower." msgstr "Der Durchmesser eines speziellen Pfeilers." #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "Mindestdurchmesser" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "Maximaler Durchmesser für Stützpfeiler" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." msgstr "Der Mindestdurchmesser in den X/Y-Richtungen eines kleinen Bereichs, der durch einen speziellen Stützpfeiler gestützt wird." #: fdmprinter.def.json @@ -4303,16 +4621,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "Drucken Sie einen Turm neben dem Druck, der zum Einziehen des Materials nach jeder Düsenschaltung dient." -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "Einzugsturm kreisförmig" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "Macht den Einzugsturm zu einer Kreisform." - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4353,16 +4661,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "Die Y-Koordinate der Position des Einzugsturms." -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "Fluss Einzugsturm" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "Fluss-Kompensation: Die extrudierte Materialmenge wird mit diesem Wert multipliziert." - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4376,12 +4674,12 @@ msgstr "Nach dem Drucken des Einzugsturms mit einer Düse wird das ausgetretene #: fdmprinter.def.json msgctxt "prime_tower_brim_enable label" msgid "Prime Tower Brim" -msgstr "" +msgstr "Brim Einzugsturm" #: fdmprinter.def.json msgctxt "prime_tower_brim_enable description" msgid "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type." -msgstr "" +msgstr "Einzugstürme benötigen möglicherweise zusätzliche Haftung in Form eines Brims, auch wenn das Modell selbst dies nicht benötigt. Kann derzeit nicht mit dem „Raft“-Haftungstyp verwendet werden." #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4665,8 +4963,8 @@ msgstr "Spiralisieren der äußeren Konturen glätten" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." -msgstr "Glättet die spiralförmigen Konturen, um die Sichtbarkeit der Z-Naht zu reduzieren (die Z-Naht sollte auf dem Druck kaum sichtbar sein, ist jedoch in der Schichtenansicht erkennbar). Beachten Sie, dass das Glätten dazu neigt, feine Oberflächendetails zu verwischen." +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgstr "Glättet die spiralförmigen Konturen, um die Sichtbarkeit der Z-Naht zu reduzieren (die Z-Naht sollte am Druckobjekt kaum sichtbar sein, ist jedoch in der Schichtenansicht erkennbar). Beachten Sie, dass beim Glätten feine Oberflächendetails verwischt werden." #: fdmprinter.def.json msgctxt "relative_extrusion label" @@ -4901,12 +5199,14 @@ msgstr "Die maximale Größe eines Bewegungsliniensegments nach dem Slicen. Wenn #: fdmprinter.def.json msgctxt "meshfix_maximum_deviation label" msgid "Maximum Deviation" -msgstr "" +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." -msgstr "" +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" @@ -5165,8 +5465,8 @@ msgstr "Konische Stützstruktur aktivieren" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "Experimentelle Funktion: Macht die Bereiche der Stützstruktur am Boden kleiner als beim Überhang." +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "Macht die Bereiche der Stützstruktur am Boden kleiner als beim Überhang." #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5510,7 +5810,7 @@ msgstr "Der Abstand zwischen der Düse und den horizontalen Abwärtslinien. Bei #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled label" msgid "Use Adaptive Layers" -msgstr "" +msgstr "Anpassschichten verwenden" #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled description" @@ -5520,7 +5820,7 @@ msgstr "Die Funktion Anpassschichten berechnet die Schichthöhe je nach Form des #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation label" msgid "Adaptive Layers Maximum Variation" -msgstr "" +msgstr "Maximale Abweichung für Anpassschichten" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" @@ -5530,7 +5830,7 @@ msgstr "Die max. zulässige Höhendifferenz von der Basisschichthöhe." #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" msgid "Adaptive Layers Variation Step Size" -msgstr "" +msgstr "Abweichung Schrittgröße für Anpassschichten" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step description" @@ -5540,7 +5840,7 @@ 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 "" +msgstr "Schwellenwert Anpassschichten" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" @@ -5760,152 +6060,194 @@ msgstr "Prozentwert der Lüfterdrehzahl für das Drucken der dritten Brücken-Au #: fdmprinter.def.json msgctxt "clean_between_layers label" msgid "Wipe Nozzle Between Layers" -msgstr "" +msgstr "Düse zwischen den Schichten abwischen" #: fdmprinter.def.json msgctxt "clean_between_layers description" msgid "Whether to include nozzle wipe G-Code between layers. Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working." -msgstr "" +msgstr "Option für das Einfügen eines G-Codes für das Abwischen der Düse zwischen den Schichten. Die Aktivierung dieser Einstellung könnte das Einzugsverhalten beim Schichtenwechsel beeinflussen. Verwenden Sie bitte die Einstellungen für Abwischen bei Einzug, um das Einziehen bei Schichten zu steuern, bei denen das Skript für Wischen aktiv wird." #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe label" msgid "Material Volume Between Wipes" -msgstr "" +msgstr "Materialmenge zwischen den Wischvorgängen" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe description" msgid "Maximum material, that can be extruded before another nozzle wipe is initiated." -msgstr "" +msgstr "Die maximale Materialmenge, die extrudiert werden kann, bevor die Düse ein weiteres Mal abgewischt wird." #: fdmprinter.def.json msgctxt "wipe_retraction_enable label" msgid "Wipe Retraction Enable" -msgstr "" +msgstr "Abwischen bei Einzug aktivieren" #: fdmprinter.def.json msgctxt "wipe_retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area." -msgstr "" +msgstr "Das Filament wird eingezogen, wenn sich die Düse über einen nicht zu bedruckenden Bereich bewegt." #: fdmprinter.def.json msgctxt "wipe_retraction_amount label" msgid "Wipe Retraction Distance" -msgstr "" +msgstr "Einzugsabstand für Abwischen" #: fdmprinter.def.json msgctxt "wipe_retraction_amount description" msgid "Amount to retract the filament so it does not ooze during the wipe sequence." -msgstr "" +msgstr "Wert, um den das Filament eingezogen wird, damit es während des Abwischens nicht austritt." #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount label" msgid "Wipe Retraction Extra Prime Amount" -msgstr "" +msgstr "Zusätzliche Zurückschiebemenge nach Einzug für Abwischen" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount description" msgid "Some material can ooze away during a wipe travel moves, which can be compensated for here." -msgstr "" +msgstr "Während einer Bewegung für den Abwischvorgang kann Material wegsickern, was hier kompensiert werden kann." #: fdmprinter.def.json msgctxt "wipe_retraction_speed label" msgid "Wipe Retraction Speed" -msgstr "" +msgstr "Einzugsgeschwindigkeit für Abwischen" #: fdmprinter.def.json msgctxt "wipe_retraction_speed description" msgid "The speed at which the filament is retracted and primed during a wipe retraction move." -msgstr "" +msgstr "Die Geschwindigkeit, mit der das Filament während einer Einzugsbewegung eingezogen und während einer Einzugsbewegung für Abwischen zurückgeschoben wird." #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed label" msgid "Wipe Retraction Retract Speed" -msgstr "" +msgstr "Einzugsgeschwindigkeit (Einzug) für Abwischen" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed description" msgid "The speed at which the filament is retracted during a wipe retraction move." -msgstr "" +msgstr "Die Geschwindigkeit, mit der das Filament während einer Einzugsbewegung für Abwischen eingezogen wird." #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "Einzugsgeschwindigkeit (Einzug)" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed description" msgid "The speed at which the filament is primed during a wipe retraction move." -msgstr "" +msgstr "Die Geschwindigkeit, mit der das Filament während einer Einzugsbewegung vorbereitet wird." #: fdmprinter.def.json msgctxt "wipe_pause label" msgid "Wipe Pause" -msgstr "" +msgstr "Abwischen pausieren" #: fdmprinter.def.json msgctxt "wipe_pause description" msgid "Pause after the unretract." -msgstr "" +msgstr "Pausieren nach Aufhebung des Einzugs." #: fdmprinter.def.json msgctxt "wipe_hop_enable label" msgid "Wipe Z Hop When Retracted" -msgstr "" +msgstr "Z-Sprung beim Einziehen - Abwischen" #: fdmprinter.def.json msgctxt "wipe_hop_enable description" msgid "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." -msgstr "" +msgstr "Nach dem Einzug wird das Druckbett gesenkt, um einen Abstand zwischen Düse und Druck herzustellen. Das verhindert, dass die Düse den Druck während der Bewegungen anschlägt und verringert die Möglichkeit, dass der Druck vom Druckbett heruntergestoßen wird." #: fdmprinter.def.json msgctxt "wipe_hop_amount label" msgid "Wipe Z Hop Height" -msgstr "" +msgstr "Z-Sprung Höhe - Abwischen" #: fdmprinter.def.json msgctxt "wipe_hop_amount description" msgid "The height difference when performing a Z Hop." -msgstr "" +msgstr "Der Höhenunterschied bei Ausführung eines Z-Sprungs." #: fdmprinter.def.json msgctxt "wipe_hop_speed label" msgid "Wipe Hop Speed" -msgstr "" +msgstr "Sprunghöhe - Abwischen" #: fdmprinter.def.json msgctxt "wipe_hop_speed description" msgid "Speed to move the z-axis during the hop." -msgstr "" +msgstr "Geschwindigkeit für das Verfahren der Z-Achse während des Sprungs." #: fdmprinter.def.json msgctxt "wipe_brush_pos_x label" msgid "Wipe Brush X Position" -msgstr "" +msgstr "X-Position für Bürste - Abwischen" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x description" msgid "X location where wipe script will start." -msgstr "" +msgstr "X-Position, an der das Skript für Abwischen startet." #: fdmprinter.def.json msgctxt "wipe_repeat_count label" msgid "Wipe Repeat Count" -msgstr "" +msgstr "Wiederholungszähler - Abwischen" #: fdmprinter.def.json msgctxt "wipe_repeat_count description" msgid "Number of times to move the nozzle across the brush." -msgstr "" +msgstr "Anzahl der Wiederholungen für das Bewegen der Düse über der Bürste." #: fdmprinter.def.json msgctxt "wipe_move_distance label" msgid "Wipe Move Distance" -msgstr "" +msgstr "Abstand Wischbewegung" #: fdmprinter.def.json msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." -msgstr "" +msgstr "Die Strecke, die der Kopf durch Vorwärts- und Rückwärtsbewegung über die Bürste hinweg fährt." + +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "Max. Lochdurchmesser" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "Löcher und Teilkonturen mit einem kleineren Durchmesser werden mit Small Feature Speed gedruckt." + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "Max. Detaillänge" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "Teile, die kleiner sind als dieser Wert, werden in Detailgeschwindigkeit gedruckt." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +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." +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." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor_0 label" +msgid "First Layer Speed" +msgstr "Geschwindigkeit für erste Schicht" + +#: 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 "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." #: fdmprinter.def.json msgctxt "command_line_settings label" @@ -5967,6 +6309,90 @@ 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 "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." + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "Startet Schichten mit demselben Teil" + +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "Beginnen Sie in jeder Schicht mit dem Drucken des Objekts in der Nähe desselben Punkts, sodass keine neue Schicht begonnen wird, wenn das Teil gedruckt wird, mit dem die letzte Schicht geendet hat. Damit lassen sich Überhänge und kleine Teile besser herstellen, allerdings verlängert sich die Druckzeit." + +#~ msgctxt "support_infill_angles description" +#~ msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +#~ msgstr "Ausrichtung des Füllmusters für Unterstützung. Das Füllmuster für Unterstützung wird in der horizontalen Planfläche gedreht." + +#~ 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." +#~ msgstr "Die maximal zulässige Abweichung bei Reduzierung der Auflösung für die Einstellung der maximalen Auflösung. Wenn Sie diesen Wert erhöhen, wird der Druck ungenauer, der G-Code wird jedoch kleiner." + +#~ msgctxt "machine_gcode_flavor label" +#~ msgid "G-code Flavour" +#~ msgstr "G-Code-Variante" + +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "Definieren Sie, ob Kanten am Modell-Umriss die Nahtposition beeinflussen. Keine bedeutet, dass Kanten keinen Einfluss auf die Nahtposition haben. Naht verbergen lässt die Naht mit höherer Wahrscheinlichkeit an einer innenliegenden Kante auftreten. Naht offenlegen lässt die Naht mit höherer Wahrscheinlichkeit an einer Außenkante auftreten. Naht verbergen oder offenlegen lässt die Naht mit höherer Wahrscheinlichkeit an einer innenliegenden oder außenliegenden Kante auftreten." + +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "Schmale Z-Lücken ignorieren" + +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "Wenn das Modell schmale vertikale Lücken hat, kann etwa 5 % zusätzliche Rechenzeit aufgewendet werden, um eine obere und untere Außenhaut in diesen engen Räumen zu generieren. In diesem Fall deaktivieren Sie die Einstellung." + +#~ msgctxt "build_volume_temperature description" +#~ msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +#~ msgstr "Die für die Druckabmessung verwendete Temperatur. Wenn dieser Wert 0 beträgt, wird die Temperatur der Druckabmessung nicht angepasst." + +#~ msgctxt "limit_support_retractions description" +#~ msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +#~ msgstr "Lassen Sie den Einzug beim Vorgehen von Stützstruktur zu Stützstruktur in einer geraden Linie aus. Die Aktivierung dieser Einstellung spart Druckzeit, kann jedoch zu übermäßigem Fadenziehen innerhalb der Stützstruktur führen." + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "Maximale Z-Geschwindigkeit" + +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "Die maximale Geschwindigkeit, mit der die Druckplatte bewegt wird. Eine Einstellung auf Null veranlasst die Verwendung der Firmware-Grundeinstellungen für die maximale Z-Geschwindigkeit." + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "Der Maximalabstand zwischen Stützstrukturen in der X- und Y-Richtung. Wenn sich einzelne Strukturen näher aneinander befinden, als dieser Wert, werden diese Strukturen in eine einzige Struktur zusammengefügt." + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "Mindestdurchmesser" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "Der Mindestdurchmesser in den X/Y-Richtungen eines kleinen Bereichs, der durch einen speziellen Stützpfeiler gestützt wird." + +#~ msgctxt "prime_tower_circular label" +#~ msgid "Circular Prime Tower" +#~ msgstr "Einzugsturm kreisförmig" + +#~ msgctxt "prime_tower_circular description" +#~ msgid "Make the prime tower as a circular shape." +#~ msgstr "Macht den Einzugsturm zu einer Kreisform." + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "Fluss-Kompensation: Die extrudierte Materialmenge wird mit diesem Wert multipliziert." + +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "Glättet die spiralförmigen Konturen, um die Sichtbarkeit der Z-Naht zu reduzieren (die Z-Naht sollte auf dem Druck kaum sichtbar sein, ist jedoch in der Schichtenansicht erkennbar). Beachten Sie, dass das Glätten dazu neigt, feine Oberflächendetails zu verwischen." + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "Experimentelle Funktion: Macht die Bereiche der Stützstruktur am Boden kleiner als beim Überhang." + #~ msgctxt "extruders_enabled_count label" #~ msgid "Number of Extruders that are enabled" #~ msgstr "Anzahl der aktivierten Extruder" diff --git a/resources/i18n/es_ES/cura.po b/resources/i18n/es_ES/cura.po index 463405ba6d..44487032d0 100644 --- a/resources/i18n/es_ES/cura.po +++ b/resources/i18n/es_ES/cura.po @@ -5,20 +5,20 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" -"PO-Revision-Date: 2019-03-13 14:00+0200\n" -"Last-Translator: Bothof \n" -"Language-Team: Spanish\n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" +"PO-Revision-Date: 2019-07-29 15:51+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Spanish , Spanish \n" "Language: es_ES\n" "MIME-Version: 1.0\n" "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.0.6\n" +"X-Generator: Poedit 2.2.3\n" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "Ajustes de la máquina" @@ -85,36 +85,45 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "El perfil se ha aplanado y activado." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "Archivo AMF" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "Impresión USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Imprimir mediante USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Imprimir mediante USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "Conectado mediante USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "Se está realizando una impresión con USB, si cierra Cura detendrá la impresión. ¿Desea continuar?" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /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/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "Todavía hay una impresión en curso. Cura no puede iniciar otra impresión a través de USB hasta que se haya completado la impresión anterior." + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +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" @@ -126,6 +135,11 @@ 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" @@ -160,7 +174,7 @@ msgid "Save to Removable Drive {0}" msgstr "Guardar en unidad extraíble {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "¡No hay formatos de archivo disponibles con los que escribir!" @@ -197,10 +211,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/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "Error" @@ -229,9 +242,9 @@ 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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "Advertencia" @@ -258,347 +271,149 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Unidad extraíble" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -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/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "Imprime a través de la red" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "Conectado a través de la red." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "Conectado a través de la red. Apruebe la solicitud de acceso en la impresora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "Conectado a través de la red. No hay acceso para controlar la impresora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "Acceso a la impresora solicitado. Apruebe la solicitud en la impresora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "Estado de la autenticación" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "Estado de la autenticación" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "Volver a intentar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "Reenvía la solicitud de acceso" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "Acceso a la impresora aceptado" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "No hay acceso para imprimir con esta impresora. No se puede enviar el trabajo de impresión." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "Solicitar acceso" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "Envía la solicitud de acceso a la impresora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "No se puede iniciar un nuevo trabajo de impresión." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "Un problema con la configuración de Ultimaker impide iniciar la impresión. Soluciónelo antes de continuar." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "Configuración desajustada" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "¿Seguro que desea imprimir con la configuración seleccionada?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "La configuración o calibración de la impresora y de Cura no coinciden. Para obtener el mejor resultado, segmente siempre los PrintCores y los materiales que se insertan en la impresora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "Envío de nuevos trabajos (temporalmente) bloqueado; se sigue enviando el trabajo de impresión previo." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "Enviando datos a la impresora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "Enviando datos" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Cancelar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "No se ha cargado ningún PrintCore en la ranura {slot_number}." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "No se ha cargado ningún material en la ranura {slot_number}." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "PrintCore distinto (Cura: {cura_printcore_name}, impresora: {remote_printcore_name}) seleccionado para extrusor {extruder_id}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "Material distinto (Cura: {0}, impresora: {1}) seleccionado para extrusor {2}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "Sincronizar con la impresora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "¿Desea utilizar la configuración actual de su impresora en Cura?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Los PrintCores o los materiales de la impresora difieren de los del proyecto actual. Para obtener el mejor resultado, segmente siempre los PrintCores y materiales que se hayan insertado en la impresora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "Conectado a través de la red" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "El trabajo de impresión se ha enviado correctamente a la impresora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "Fecha de envío" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "Ver en pantalla" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "{printer_name} ha terminado de imprimir «{job_name}»." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "El trabajo de impresión '{job_name}' ha terminado." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "Impresión terminada" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "Vacío" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "Desconocido" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "Imprimir mediante Cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "Imprimir mediante Cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "Conectado mediante Cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "Error de Cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "No se ha podido exportar el trabajo de impresión." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "No se han podido cargar los datos en la impresora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "mañana" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "hoy" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "Se ha producido un error al conectarse a la nube." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Envíe y supervise sus trabajos de impresión desde cualquier lugar a través de su cuenta de Ultimaker." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "No volver a preguntarme para esta impresora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "Empezar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Ahora ya puede enviar y supervisar sus trabajos de impresión desde cualquier lugar a través de su cuenta de Ultimaker." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "¡Conectado!" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "Revise su conexión" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Conectar a través de la red" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" -msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +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 +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 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "Conectado a través de la red" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "Espere hasta que se envíe el trabajo actual." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "Error de impresión" + +#: /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 "Está intentando conectarse a {0} pero ese no es el host de un grupo. Puede visitar la página web para configurarlo como host de grupo." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "No es un host de grupo" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "Configurar grupo" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "Envíe y supervise sus trabajos de impresión desde cualquier lugar a través de su cuenta de Ultimaker." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "Conectar a Ultimaker Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "Empezar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "Enviando trabajo de impresión" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "Cargando el trabajo de impresión a la impresora." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "El trabajo de impresión se ha enviado correctamente a la impresora." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "Fecha de envío" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "Está intentando conectarse a una impresora que no está ejecutando Ultimaker Connect. Actualice la impresora al firmware más reciente." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "Actualice su impresora" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "Cura ha detectado perfiles de material que aún no estaban instalados en la impresora host del grupo {0}." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "Enviando materiales a la impresora" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "No se han podido cargar los datos en la impresora." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "Error de red" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "mañana" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "hoy" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "Imprimir mediante Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "Imprimir mediante Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" +msgstr "Conectado mediante Cloud" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Supervisar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "No se pudo acceder a la información actualizada." @@ -625,12 +440,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Vista de capas" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Cura no muestra correctamente las capas si la impresión de alambre está habilitada" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "Vista de simulación" @@ -685,6 +500,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Imagen GIF" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "Open Compressed Triangle Mesh" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "COLLADA Digital Asset Exchange" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "glTF binario" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "glTF incrustado JSON" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "Stanford Triangle Format" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "COLLADA Digital Asset Exchange comprimido" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -765,19 +610,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Archivo 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "Tobera" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "Abrir archivo de proyecto" @@ -792,18 +637,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Archivo G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Analizar GCode" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "Datos de GCode" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Asegúrese de que el GCode es adecuado para la impresora y para su configuración antes de enviar el archivo a la misma. Es posible que la representación del GCode no sea precisa." @@ -906,16 +751,16 @@ msgstr "Fallo de inicio de sesión" #: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33 msgctxt "@info:not supported profile" msgid "Not supported" -msgstr "" +msgstr "No compatible" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 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:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -928,116 +773,109 @@ msgid "Invalid file URL:" msgstr "URL del archivo no válida:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" -msgstr "La configuración se ha cambiado para que coincida con los extrusores disponibles en este momento: [%s]." +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 msgctxt "@info:title" msgid "Settings updated" msgstr "Ajustes actualizados" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "Extrusores deshabilitados" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, 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:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, 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:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, 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:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "Exportación correcta" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, 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:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, 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}." +msgstr "No hay ningún perfil personalizado para importar en el archivo {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, 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:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, 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:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "El equipo definido en el perfil {0} ({1}) no coincide con el equipo actual ({2}), no se ha podido importar." - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Perfil {0} importado correctamente" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, 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:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, 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:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "Perfil personalizado" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 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:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1086,7 +924,7 @@ msgstr "Falda" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:84 msgctxt "@tooltip" msgid "Prime Tower" -msgstr "" +msgstr "Torre auxiliar" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:85 msgctxt "@tooltip" @@ -1115,7 +953,7 @@ msgctxt "@action:button" msgid "Next" msgstr "Siguiente" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1123,22 +961,36 @@ 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/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "Cerrar" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" 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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Cancelar" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1155,23 +1007,22 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Todos los archivos (*)" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" -msgstr "" +msgstr "Las siguientes impresoras no pueden conectarse porque forman parte de un grupo" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" -msgstr "" +msgstr "Impresoras en red disponibles" #: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689 msgctxt "@label" @@ -1184,12 +1035,12 @@ msgctxt "@label" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "La altura del volumen de impresión se ha reducido debido al valor del ajuste «Secuencia de impresión» para evitar que el caballete colisione con los modelos impresos." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "Volumen de impresión" @@ -1207,46 +1058,51 @@ msgstr "Se ha intentado restaurar una copia de seguridad de Cura sin tener los d #: /home/ruben/Projects/Cura/cura/Backups/Backup.py:125 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that is higher than the current version." -msgstr "" +msgstr "Se ha intentado restaurar una copia de seguridad de Cura superior a la versión actual." #: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationHelpers.py:79 msgctxt "@message" msgid "Could not read response." -msgstr "" +msgstr "No se ha podido leer la respuesta." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 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/AuthorizationRequestHandler.py:66 +#: /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." -msgstr "" +msgstr "Conceda los permisos necesarios al autorizar esta aplicación." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "Se ha producido un problema al intentar iniciar sesión, vuelva a intentarlo." -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "Multiplicar y colocar objetos" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "Colocando objetos" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "No se puede encontrar una ubicación dentro del volumen de impresión para todos los objetos" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "Colocando objeto" @@ -1395,48 +1251,48 @@ msgstr "Registros" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" -msgstr "Descripción del usuario" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" +msgstr "Descripción del usuario (Nota: es posible que los desarrolladores no hablen su idioma; si es posible, utilice el inglés)" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "Enviar informe" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Cargando máquinas..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Configurando escena..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Cargando interfaz..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, 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:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, 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:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "No se puede cargar el modelo seleccionado, es demasiado pequeño." @@ -1444,103 +1300,108 @@ msgstr "No se puede cargar el modelo seleccionado, es demasiado pequeño." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58 msgctxt "@title:label" msgid "Printer Settings" -msgstr "" +msgstr "Ajustes de la impresora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X (anchura)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (profundidad)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (altura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "Forma de la placa de impresión" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" -msgstr "" +msgstr "Origen en el centro" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" -msgstr "" +msgstr "Plataforma calentada" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "Volumen de impresión calentado" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "Tipo de GCode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" -msgstr "" +msgstr "Ajustes del cabezal de impresión" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X mín." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y mín." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "X máx." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "Y máx." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" -msgstr "" +msgstr "Altura del puente" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "Número de extrusores" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" -msgstr "" +msgstr "Iniciar GCode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" -msgstr "" +msgstr "Finalizar GCode" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:42 msgctxt "@title:tab" @@ -1550,7 +1411,7 @@ msgstr "Impresora" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:63 msgctxt "@title:label" msgid "Nozzle Settings" -msgstr "" +msgstr "Ajustes de la tobera" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:75 msgctxt "@label" @@ -1567,25 +1428,25 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "Desplazamiento de la tobera sobre el eje X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Desplazamiento de la tobera sobre el eje Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "Número de ventilador de enfriamiento" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" -msgstr "" +msgstr "GCode inicial del extrusor" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" -msgstr "" +msgstr "GCode final del extrusor" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 msgctxt "@action:button" @@ -1593,7 +1454,7 @@ msgid "Install" msgstr "Instalar" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "Instalado" @@ -1608,16 +1469,16 @@ msgctxt "@label" msgid "ratings" msgstr "calificaciones" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "Complementos" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "Materiales" @@ -1627,49 +1488,49 @@ msgctxt "@label" msgid "Your rating" msgstr "Su calificación" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "Versión" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "Última actualización" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "Autor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "Descargas" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "Inicie sesión para realizar la instalación o la actualización" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" -msgstr "" +msgstr "Comprar bobinas de material" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "Actualizar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "Actualizando" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1730,17 +1591,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "Salir de Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "Contribuciones de la comunidad" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "Complementos de la comunidad" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "Materiales genéricos" @@ -1801,27 +1662,52 @@ msgctxt "@label" msgid "Featured" msgstr "Destacado" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilidad" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +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" +msgstr "Placa de impresión" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "Soporte" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "Calidad" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "Especificaciones técnicas" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "Especificaciones de seguridad" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "Directrices de impresión" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "Sitio web" @@ -1921,70 +1807,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Se ha producido un error al actualizar el firmware porque falta el firmware." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "Administrar impresora" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "Vidrio" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." -msgstr "Estas opciones no se encuentran disponibles porque está supervisando una impresora en la nube." +msgid "Please update your printer's firmware to manage the queue remotely." +msgstr "Actualice el firmware de la impresora para gestionar la cola de forma remota." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "La cámara web no se encuentra disponible porque está supervisando una impresora en la nube." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "Cargando..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "No disponible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "No se puede conectar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "Sin actividad" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "Sin título" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "Anónimo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "Debe cambiar la configuración" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "Detalles" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "Impresora no disponible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "Primera disponible" @@ -1994,194 +1886,180 @@ msgctxt "@label" msgid "Queued" msgstr "En cola" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" -msgstr "Ir a Cura Connect" +msgid "Manage in browser" +msgstr "Gestionar en el navegador" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "No hay trabajos de impresión en la cola. Segmentar y enviar un trabajo para añadir uno." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "Trabajos de impresión" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "Tiempo de impresión total" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "Esperando" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "Ver historial de impresión" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "Conexión existente" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "Esta impresora o grupo de impresoras ya se ha añadido a Cura. Seleccione otra impresora o grupo de impresoras." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Conectar con la impresora en red" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" -msgstr "Para imprimir directamente en la impresora a través de la red, asegúrese de que ésta está conectada a la red utilizando un cable de red o conéctela a la red wifi. Si no conecta Cura con la impresora, también puede utilizar una unidad USB para transferir archivos GCode a la impresora.\n\nSeleccione la impresora de la siguiente lista:" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." +msgstr "Para imprimir directamente a través de la red, asegúrese de que la impresora está conectada a la red mediante un cable de red o conéctela a la red wifi. Si no conecta Cura con la impresora, también puede utilizar una unidad USB para transferir archivos GCode a la impresora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "Seleccione la impresora en la lista siguiente:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "Editar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "Eliminar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "Actualizar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Si la impresora no aparece en la lista, lea la guía de solución de problemas de impresión y red" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "Tipo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /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:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /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:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 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:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 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:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 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:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "Conectar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" -msgstr "" +msgstr "Dirección IP no válida" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146 msgctxt "@text" msgid "Please enter a valid IP address." -msgstr "" +msgstr "Introduzca una dirección IP válida." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "Dirección de la impresora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." -msgstr "" +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:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "Aceptar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "Cancelado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "Terminado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "Preparando..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "Cancelando..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "Pausando..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "En pausa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." -msgstr "Reanudando" +msgstr "Reanudando..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "Acción requerida" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "Termina el %1 a las %2" @@ -2225,7 +2103,7 @@ msgstr "Pausando..." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenu.qml:104 msgctxt "@label" msgid "Resuming..." -msgstr "Reanudando" +msgstr "Reanudando..." #: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorContextMenu.qml:106 #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284 @@ -2285,73 +2163,65 @@ msgctxt "@action:button" msgid "Override" msgstr "Anular" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" msgstr[0] "Es necesario realizar el siguiente cambio de configuración en la impresora asignada %1:" msgstr[1] "Es necesario realizar los siguientes cambios de configuración en la impresora asignada %1:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "Se ha asignado la impresora %1, pero el trabajo tiene una configuración de material desconocido." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "Cambiar material %1, de %2 a %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "Cargar %3 como material %1 (no se puede anular)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." msgstr "Cambiar print core %1, de %2 a %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "Cambiar la placa de impresión a %1 (no se puede anular)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "Al sobrescribir la configuración se usarán los ajustes especificados con la configuración de impresora existente. Esto podría provocar un fallo en la impresión." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "Aluminio" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "Conecta a una impresora" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" -"Asegúrese de que su impresora está conectada:\n" +"Asegúrese de que la impresora está conectada:\n" "- Compruebe que la impresora está encendida.\n" -"- Compruebe que la impresora está conectada a la red." +"- Compruebe que la impresora está conectada a la red.\n" +"- Compruebe que ha iniciado sesión para ver impresoras conectadas a la nube." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 msgctxt "@info" msgid "Please connect your printer to the network." -msgstr "" +msgstr "Conecte su impresora a la red." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:156 msgctxt "@label link to technical assistance" @@ -2473,17 +2343,17 @@ msgstr "Más información sobre la recopilación de datos anónimos" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:74 msgctxt "@text:window" msgid "Ultimaker Cura collects anonymous data in order to improve the print quality and user experience. Below is an example of all the data that is shared:" -msgstr "" +msgstr "Ultimaker Cura recopila datos anónimos para mejorar la calidad de impresión y la experiencia de usuario. A continuación, hay un ejemplo de todos los datos que se comparten:" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:109 msgctxt "@text:window" msgid "I don't want to send anonymous data" -msgstr "" +msgstr "No deseo enviar datos anónimos" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:118 msgctxt "@text:window" msgid "Allow sending anonymous data" -msgstr "" +msgstr "Permitir el envío de datos anónimos" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2533,7 +2403,7 @@ msgstr "Profundidad (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 msgctxt "@info:tooltip" msgid "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model." -msgstr "" +msgstr "Para las litofanías, los píxeles oscuros deben coincidir con ubicaciones más gruesas para bloquear la entrada de más luz. En los mapas de altura, los píxeles más claros se corresponden con un terreno más alto, por lo que dichos píxeles deben coincidir con ubicaciones más gruesas en el modelo 3D generado." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 msgctxt "@item:inlistbox" @@ -2658,7 +2528,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:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "Ajustes del perfil" @@ -2671,19 +2541,19 @@ 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/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 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:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 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:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2855,18 +2725,24 @@ msgid "Previous" msgstr "Anterior" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "Consejo" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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" @@ -2986,155 +2862,155 @@ 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:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "Mostrar nombre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "Marca" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "Tipo de material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "Color" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "Propiedades" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "Densidad" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "Diámetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "Coste del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "Anchura del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "Longitud del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "Coste por metro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "Desvincular material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "Descripción" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "Información sobre adherencia" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /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:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "Activar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "Crear" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "Duplicado" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "Importar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "Impresora" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "Confirmar eliminación" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 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:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "Importar material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 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:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "Exportar material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 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:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "El material se ha exportado correctamente a %1" @@ -3175,388 +3051,411 @@ msgid "Unit" msgstr "Unidad" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "General" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "Interfaz" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "Idioma:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "Moneda:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "Tema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 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:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "Segmentar automáticamente" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "Comportamiento de la ventanilla" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "Mostrar voladizos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 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:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 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:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 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:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 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:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 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:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +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 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:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 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:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 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:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 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:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 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:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 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:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 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:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 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:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 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:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +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 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "Renderizado de cámara: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "Perspectiva" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "Ortográfica" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "Abrir y guardar archivos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 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:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "Escalar modelos de gran tamaño" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Escalar modelos demasiado pequeños" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 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:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Seleccionar modelos al abrirlos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 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:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 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:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 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:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 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:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 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:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 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:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "Preguntar siempre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Abrir siempre como un proyecto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "Importar modelos siempre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "Perfiles" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 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:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /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:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "Descartar siempre los ajustes modificados" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 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:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "Privacidad" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 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:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Buscar actualizaciones al iniciar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 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:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "Más información" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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:715 +#: /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:720 +#: /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:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "Impresoras" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "Cambiar nombre" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /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:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "Crear" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "Duplicado" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "Crear perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 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:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplicar perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "Cambiar nombre de perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "Importar perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "Exportar perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Impresora: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /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:413 +#: /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:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 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:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "Descartar cambios actuales" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 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:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 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:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "Ajustes globales" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "Marketplace" @@ -3619,33 +3518,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "buscar ajustes" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 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:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 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:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Ocultar 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 "Don't show this setting" msgstr "No mostrar este ajuste" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Mostrar este ajuste" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configurar visibilidad de los ajustes..." @@ -3661,32 +3560,32 @@ msgstr "" "\n" "Haga clic para mostrar estos ajustes." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." -msgstr "" +msgstr "Este ajuste no se utiliza porque los ajustes a los que afecta están sobrescritos." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "Afecta a" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Afectado por" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 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:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 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:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3697,7 +3596,7 @@ msgstr "" "\n" "Haga clic para restaurar el valor del perfil." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3713,7 +3612,7 @@ msgctxt "@button" msgid "Recommended" msgstr "Recomendado" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "Personalizado" @@ -3738,12 +3637,12 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Generar estructuras para soportar piezas del modelo que tengan voladizos. Sin estas estructuras, estas piezas se romperían durante la impresión." -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "Adherencia" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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." @@ -3761,7 +3660,7 @@ msgstr "Ha modificado algunos ajustes del perfil. Si desea cambiarlos, hágalo e #: /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 "" +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" @@ -3797,7 +3696,7 @@ 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." -msgstr "" +msgstr "Configuración de impresión deshabilitada. No se puede modificar el archivo GCode." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:52 msgctxt "@label" @@ -3829,59 +3728,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "Enviar GCode" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "Envíe un comando de GCode personalizado a la impresora conectada. Pulse «Intro» para enviar el comando." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "Temperatura objetivo del extremo caliente. El extremo caliente se calentará o enfriará en función de esta temperatura. Si el valor es 0, el calentamiento del extremo caliente se desactivará." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "Temperatura actual de este extremo caliente." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "Temperatura a la que se va a precalentar el extremo caliente." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "Cancelar" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "Precalentar" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "Caliente el extremo caliente antes de imprimir. Puede continuar ajustando la impresión durante el calentamiento, así no tendrá que esperar a que el extremo caliente se caliente para poder imprimir." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "Color del material en este extrusor." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "Material en este extrusor." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "Tobera insertada en este extrusor." @@ -3926,11 +3825,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "Favoritos" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -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" @@ -3946,32 +3840,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Impresora" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "&Material" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Definir como extrusor activo" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Habilitar extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Deshabilitar extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /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:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "&Perfil" @@ -3981,7 +3875,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "&Posición de la cámara" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "Vista de cámara" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "Perspectiva" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "Ortográfica" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "P&laca de impresión" @@ -4001,17 +3910,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Gestionar visibilidad de los ajustes..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "&Guardar..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "&Exportar..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "Exportar selección..." @@ -4100,22 +4009,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "Abrir &reciente" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "Activar impresión" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "Nombre del trabajo" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "Tiempo de impresión" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "Tiempo restante estimado" @@ -4123,12 +4032,17 @@ msgstr "Tiempo restante estimado" #: /home/ruben/Projects/Cura/resources/qml/ViewsSelector.qml:50 msgctxt "@label" msgid "View type" -msgstr "" +msgstr "Ver tipo" + +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "Lista de objetos" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" -msgstr "" +msgstr "Hola, %1" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:33 msgctxt "@button" @@ -4157,6 +4071,9 @@ msgid "" "- Store your Ultimaker Cura settings in the cloud for use anywhere\n" "- Get exclusive access to print profiles from leading brands" msgstr "" +"- Envíe trabajos de impresión a impresoras Ultimaker fuera de su red local\n" +"- Guarde su configuración de Ultimaker Cura en la nube para poder usarla en cualquier lugar\n" +"- Disfrute de acceso exclusivo a perfiles de impresión de marcas líderes" #: /home/ruben/Projects/Cura/resources/qml/Account/GeneralOperations.qml:78 msgctxt "@button" @@ -4173,32 +4090,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "Ningún cálculo de costes disponible" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "Vista previa" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Segmentando..." -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" -msgstr "" +msgstr "No se puede segmentar" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "Procesando" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "Segmentación" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "Iniciar el proceso de segmentación" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "Cancelar" @@ -4206,12 +4128,12 @@ msgstr "Cancelar" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:31 msgctxt "@label" msgid "Time estimation" -msgstr "" +msgstr "Estimación de tiempos" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:114 msgctxt "@label" msgid "Material estimation" -msgstr "" +msgstr "Estimación de material" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:164 msgctxt "@label m for meter" @@ -4233,233 +4155,238 @@ msgctxt "@label" msgid "Preset printers" msgstr "Impresoras preconfiguradas" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "Agregar impresora" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "Administrar impresoras" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "Mostrar Guía de resolución de problemas en línea" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "Alternar pantalla completa" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "Salir de modo de pantalla completa" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "Des&hacer" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Rehacer" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Salir" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "Vista en 3D" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "Vista frontal" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "Vista superior" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "Vista del lado izquierdo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "Vista del lado derecho" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Configurar Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Agregar impresora..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Adm&inistrar impresoras ..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Administrar materiales..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Actualizar perfil con ajustes o sobrescrituras actuales" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Descartar cambios actuales" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&Crear perfil a partir de ajustes o sobrescrituras actuales..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Administrar perfiles..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Mostrar &documentación en línea" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Informar de un &error" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" -msgstr "" +msgstr "Novedades" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "Acerca de..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "Eliminar modelo seleccionado" msgstr[1] "Eliminar modelos seleccionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Centrar modelo seleccionado" msgstr[1] "Centrar modelos seleccionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Multiplicar modelo seleccionado" msgstr[1] "Multiplicar modelos seleccionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Eliminar modelo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Ce&ntrar modelo en plataforma" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "A&grupar modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Desagrupar modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Co&mbinar modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Multiplicar modelo..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Seleccionar todos los modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Borrar placa de impresión" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Recargar todos los modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Organizar todos los modelos en todas las placas de impresión" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Organizar todos los modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Organizar selección" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Restablecer las posiciones de todos los modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Restablecer las transformaciones de todos los modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Abrir archivo(s)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nuevo proyecto..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Mostrar carpeta de configuración" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "&Marketplace" @@ -4474,52 +4401,52 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Este paquete se instalará después de reiniciar." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "Ajustes" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "Cerrando Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 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:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /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:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "Instalar paquete" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "Abrir archivo(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "Agregar impresora" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" -msgstr "" +msgstr "Novedades" #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 msgctxt "@label %1 is filled in with the name of an extruder" @@ -4741,32 +4668,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Guardar proyecto" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /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:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extrusor %1" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 y material" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" -msgstr "" +msgstr "Material" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 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:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "Guardar" @@ -4799,158 +4726,158 @@ msgstr "Importar modelos" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DropDownWidget.qml:93 msgctxt "@label" msgid "Empty" -msgstr "" +msgstr "Vacío" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:24 msgctxt "@label" msgid "Add a printer" -msgstr "" +msgstr "Agregar una impresora" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:39 msgctxt "@label" msgid "Add a networked printer" -msgstr "" +msgstr "Agregar una impresora en red" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:81 msgctxt "@label" msgid "Add a non-networked printer" -msgstr "" +msgstr "Agregar una impresora fuera de red" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:70 msgctxt "@label" msgid "Add printer by IP address" -msgstr "" +msgstr "Agregar impresora por dirección IP" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:133 msgctxt "@text" msgid "Place enter your printer's IP address." -msgstr "" +msgstr "Introduzca la dirección IP de su impresora." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:158 msgctxt "@button" msgid "Add" -msgstr "" +msgstr "Agregar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:204 msgctxt "@label" msgid "Could not connect to device." -msgstr "" +msgstr "No se ha podido conectar al dispositivo." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:208 msgctxt "@label" msgid "The printer at this address has not responded yet." -msgstr "" +msgstr "La impresora todavía no ha respondido en esta dirección." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:240 msgctxt "@label" msgid "This printer cannot be added because it's an unknown printer or it's not the host of a group." -msgstr "" +msgstr "No se puede agregar la impresora porque es desconocida o no aloja un grupo." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:329 msgctxt "@button" msgid "Back" -msgstr "" +msgstr "Atrás" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:342 msgctxt "@button" msgid "Connect" -msgstr "" +msgstr "Conectar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/FirstStartMachineActionsContent.qml:77 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:123 msgctxt "@button" msgid "Next" -msgstr "" +msgstr "Siguiente" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:23 msgctxt "@label" msgid "User Agreement" -msgstr "" +msgstr "Acuerdo de usuario" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:56 msgctxt "@button" msgid "Agree" -msgstr "" +msgstr "Estoy de acuerdo" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:70 msgctxt "@button" msgid "Decline and close" -msgstr "" +msgstr "Rechazar y cerrar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:24 msgctxt "@label" msgid "Help us to improve Ultimaker Cura" -msgstr "" +msgstr "Ayúdenos a mejorar Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:57 msgctxt "@text" msgid "Ultimaker Cura collects anonymous data to improve print quality and user experience, including:" -msgstr "" +msgstr "Ultimaker Cura recopila datos anónimos para mejorar la calidad de impresión y la experiencia de usuario, entre otros:" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:71 msgctxt "@text" msgid "Machine types" -msgstr "" +msgstr "Tipos de máquina" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:77 msgctxt "@text" msgid "Material usage" -msgstr "" +msgstr "Uso de material" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:83 msgctxt "@text" msgid "Number of slices" -msgstr "" +msgstr "Número de segmentos" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:89 msgctxt "@text" msgid "Print settings" -msgstr "" +msgstr "Ajustes de impresión" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:102 msgctxt "@text" msgid "Data collected by Ultimaker Cura will not contain any personal information." -msgstr "" +msgstr "Los datos recopilados por Ultimaker Cura no contendrán información personal." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:103 msgctxt "@text" msgid "More information" -msgstr "" +msgstr "Más información" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WhatsNewContent.qml:24 msgctxt "@label" msgid "What's new in Ultimaker Cura" -msgstr "" +msgstr "Novedades en Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:42 msgctxt "@label" msgid "There is no printer found over your network." -msgstr "" +msgstr "No se ha encontrado ninguna impresora en su red." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:179 msgctxt "@label" msgid "Refresh" -msgstr "" +msgstr "Actualizar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:190 msgctxt "@label" msgid "Add printer by IP" -msgstr "" +msgstr "Agregar impresora por IP" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:223 msgctxt "@label" msgid "Troubleshooting" -msgstr "" +msgstr "Solución de problemas" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" -msgstr "" +msgstr "Nombre de la impresora" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" -msgstr "" +msgstr "Indique un nombre para su impresora" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:36 msgctxt "@label" @@ -4960,37 +4887,37 @@ msgstr "Ultimaker Cloud" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:77 msgctxt "@text" msgid "The next generation 3D printing workflow" -msgstr "" +msgstr "El flujo de trabajo de impresión 3D de próxima generación" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:94 msgctxt "@text" msgid "- Send print jobs to Ultimaker printers outside your local network" -msgstr "" +msgstr "- Envíe trabajos de impresión a impresoras Ultimaker fuera de su red local" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:97 msgctxt "@text" msgid "- Store your Ultimaker Cura settings in the cloud for use anywhere" -msgstr "" +msgstr "- Guarde su configuración de Ultimaker Cura en la nube para poder usarla en cualquier lugar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:100 msgctxt "@text" msgid "- Get exclusive access to print profiles from leading brands" -msgstr "" +msgstr "- Disfrute de acceso exclusivo a perfiles de impresión de marcas líderes" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:119 msgctxt "@button" msgid "Finish" -msgstr "" +msgstr "Finalizar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:128 msgctxt "@button" msgid "Create an account" -msgstr "" +msgstr "Crear una cuenta" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:29 msgctxt "@label" msgid "Welcome to Ultimaker Cura" -msgstr "" +msgstr "Le damos la bienvenida a Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:47 msgctxt "@text" @@ -4998,26 +4925,13 @@ msgid "" "Please follow these steps to set up\n" "Ultimaker Cura. This will only take a few moments." msgstr "" +"Siga estos pasos para configurar\n" +"Ultimaker Cura. Solo le llevará unos minutos." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:58 msgctxt "@button" msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "Ver solo placa de impresión actual" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "Organizar todas las placas de impresión" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "Organizar placa de impresión actual" +msgstr "Empezar" #: MachineSettingsAction/plugin.json msgctxt "description" @@ -5102,12 +5016,22 @@ msgstr "Actualizador de firmware" #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattened quality changes profile." -msgstr "" +msgstr "Crear un perfil de cambios de calidad aplanado." #: ProfileFlattener/plugin.json msgctxt "name" msgid "Profile Flattener" -msgstr "" +msgstr "Aplanador de perfil" + +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "Proporciona asistencia para leer archivos AMF." + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "Lector de AMF" #: USBPrinting/plugin.json msgctxt "description" @@ -5119,16 +5043,6 @@ msgctxt "name" msgid "USB printing" msgstr "Impresión USB" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "Permite guardar el segmento resultante como un archivo X3G para dar compatibilidad a impresoras que leen este formato (Malyan, Makerbot y otras impresoras basadas en Sailfish)." - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "X3GWriter" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5171,23 +5085,13 @@ msgstr "Complemento de dispositivo de salida de unidad extraíble" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Gestiona las conexiones de red a las impresoras Ultimaker 3." +msgid "Manages network connections to Ultimaker networked printers." +msgstr "Gestiona las conexiones de red de las impresoras Ultimaker conectadas." #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "Conexión de red UM3" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" -msgstr "" +msgid "Ultimaker Network Connection" +msgstr "Conexión en red de Ultimaker" #: MonitorStage/plugin.json msgctxt "description" @@ -5252,12 +5156,12 @@ msgstr "Borrador de soporte" #: UFPReader/plugin.json msgctxt "description" msgid "Provides support for reading Ultimaker Format Packages." -msgstr "" +msgstr "Proporciona soporte para la lectura de paquetes de formato Ultimaker." #: UFPReader/plugin.json msgctxt "name" msgid "UFP Reader" -msgstr "" +msgstr "Lector de UFP" #: SliceInfoPlugin/plugin.json msgctxt "description" @@ -5342,12 +5246,12 @@ msgstr "Actualización de la versión 2.7 a la 3.0" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.5 to Cura 4.0." -msgstr "" +msgstr "Actualiza la configuración de Cura 3.5 a Cura 4.0." #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "name" msgid "Version Upgrade 3.5 to 4.0" -msgstr "" +msgstr "Actualización de la versión 3.5 a la 4.0" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" @@ -5362,12 +5266,12 @@ msgstr "Actualización de la versión 3.4 a la 3.5" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 4.0 to Cura 4.1." -msgstr "" +msgstr "Actualiza la configuración de Cura 4.0 a Cura 4.1." #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "name" msgid "Version Upgrade 4.0 to 4.1" -msgstr "" +msgstr "Actualización de la versión 4.0 a la 4.1" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" @@ -5379,6 +5283,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "Actualización de la versión 3.0 a la 3.1" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "Actualiza la configuración de Cura 4.1 a Cura 4.2." + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "Actualización de la versión 4.1 a la 4.2" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5409,6 +5323,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "Actualización de la versión 2.2 a la 2.4" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "Actualiza la configuración de Cura 4.2 a Cura 4.3." + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "Actualización de la versión 4.2 a la 4.3" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5419,6 +5343,16 @@ msgctxt "name" msgid "Image Reader" msgstr "Lector de imágenes" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "Proporciona asistencia para leer archivos 3D." + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "Lector Trimesh" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5449,16 +5383,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "Lector de 3MF" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5482,12 +5406,12 @@ msgstr "Lector de GCode" #: CuraDrive/plugin.json msgctxt "description" msgid "Backup and restore your configuration." -msgstr "" +msgstr "Realice una copia de seguridad de su configuración y restáurela." #: CuraDrive/plugin.json msgctxt "name" msgid "Cura Backups" -msgstr "" +msgstr "Copias de seguridad de Cura" #: CuraProfileWriter/plugin.json msgctxt "description" @@ -5522,12 +5446,12 @@ msgstr "Escritor de 3MF" #: PreviewStage/plugin.json msgctxt "description" msgid "Provides a preview stage in Cura." -msgstr "" +msgstr "Proporciona una fase de vista previa en Cura." #: PreviewStage/plugin.json msgctxt "name" msgid "Preview Stage" -msgstr "" +msgstr "Fase de vista previa" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -5549,6 +5473,297 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Lector de perfiles de Cura" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "Conectado a través de la red." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "Conectado a través de la red. Apruebe la solicitud de acceso en la impresora." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "Conectado a través de la red. No hay acceso para controlar la impresora." + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "Acceso a la impresora solicitado. Apruebe la solicitud en la impresora" + +#~ msgctxt "@info:title" +#~ msgid "Authentication status" +#~ msgstr "Estado de la autenticación" + +#~ msgctxt "@info:title" +#~ msgid "Authentication Status" +#~ msgstr "Estado de la autenticación" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "Reenvía la solicitud de acceso" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "Acceso a la impresora aceptado" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "No hay acceso para imprimir con esta impresora. No se puede enviar el trabajo de impresión." + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "Solicitar acceso" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "Envía la solicitud de acceso a la impresora" + +#~ msgctxt "@label" +#~ msgid "Unable to start a new print job." +#~ msgstr "No se puede iniciar un nuevo trabajo de impresión." + +#~ msgctxt "@label" +#~ msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." +#~ msgstr "Un problema con la configuración de Ultimaker impide iniciar la impresión. Soluciónelo antes de continuar." + +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "Configuración desajustada" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "¿Seguro que desea imprimir con la configuración seleccionada?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "La configuración o calibración de la impresora y de Cura no coinciden. Para obtener el mejor resultado, segmente siempre los PrintCores y los materiales que se insertan en la impresora." + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "Envío de nuevos trabajos (temporalmente) bloqueado; se sigue enviando el trabajo de impresión previo." + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "Enviando datos a la impresora" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "Enviando datos" + +#~ msgctxt "@info:status" +#~ msgid "No Printcore loaded in slot {slot_number}" +#~ msgstr "No se ha cargado ningún PrintCore en la ranura {slot_number}." + +#~ msgctxt "@info:status" +#~ msgid "No material loaded in slot {slot_number}" +#~ msgstr "No se ha cargado ningún material en la ranura {slot_number}." + +#~ msgctxt "@label" +#~ msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" +#~ msgstr "PrintCore distinto (Cura: {cura_printcore_name}, impresora: {remote_printcore_name}) seleccionado para extrusor {extruder_id}" + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "Material distinto (Cura: {0}, impresora: {1}) seleccionado para extrusor {2}" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "Sincronizar con la impresora" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "¿Desea utilizar la configuración actual de su impresora en Cura?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Los PrintCores o los materiales de la impresora difieren de los del proyecto actual. Para obtener el mejor resultado, segmente siempre los PrintCores y materiales que se hayan insertado en la impresora." + +#~ msgctxt "@action:button" +#~ msgid "View in Monitor" +#~ msgstr "Ver en pantalla" + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "{printer_name} ha terminado de imprimir «{job_name}»." + +#~ msgctxt "@info:status" +#~ msgid "The print job '{job_name}' was finished." +#~ msgstr "El trabajo de impresión '{job_name}' ha terminado." + +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "Impresión terminada" + +#~ msgctxt "@label:material" +#~ msgid "Empty" +#~ msgstr "Vacío" + +#~ msgctxt "@label:material" +#~ msgid "Unknown" +#~ msgstr "Desconocido" + +#~ msgctxt "@info:title" +#~ msgid "Cloud error" +#~ msgstr "Error de Cloud" + +#~ msgctxt "@info:status" +#~ msgid "Could not export print job." +#~ msgstr "No se ha podido exportar el trabajo de impresión." + +#~ msgctxt "@info:description" +#~ msgid "There was an error connecting to the cloud." +#~ msgstr "Se ha producido un error al conectarse a la nube." + +#~ msgctxt "@info:status" +#~ msgid "Uploading via Ultimaker Cloud" +#~ msgstr "Cargando a través de Ultimaker Cloud" + +#~ msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." +#~ msgid "Connect to Ultimaker Cloud" +#~ msgstr "Conectar a Ultimaker Cloud" + +#~ msgctxt "@action" +#~ msgid "Don't ask me again for this printer." +#~ msgstr "No volver a preguntarme para esta impresora." + +#~ msgctxt "@info:status" +#~ msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." +#~ msgstr "Ahora ya puede enviar y supervisar sus trabajos de impresión desde cualquier lugar a través de su cuenta de Ultimaker." + +#~ msgctxt "@info:status" +#~ msgid "Connected!" +#~ msgstr "¡Conectado!" + +#~ msgctxt "@action" +#~ msgid "Review your connection" +#~ msgstr "Revise su conexión" + +#~ msgctxt "@info:status Don't translate the XML tags !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "El equipo definido en el perfil {0} ({1}) no coincide con el equipo actual ({2}), no se ha podido importar." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "Failed to import profile from {0}:" +#~ msgstr "Error al importar el perfil de {0}:" + +#~ msgctxt "@window:title" +#~ msgid "Existing Connection" +#~ msgstr "Conexión existente" + +#~ msgctxt "@message:text" +#~ msgid "This printer/group is already added to Cura. Please select another printer/group." +#~ msgstr "Esta impresora o grupo de impresoras ya se ha añadido a Cura. Seleccione otra impresora o grupo de impresoras." + +#~ msgctxt "@label" +#~ msgid "Enter the IP address or hostname of your printer on the network." +#~ msgstr "Introduzca la dirección IP o el nombre de host de la impresora en la red." + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "Conecta a una impresora" + +#~ msgctxt "@title" +#~ msgid "Cura Settings Guide" +#~ msgstr "Guía de ajustes de Cura" + +#~ msgctxt "@info:tooltip" +#~ msgid "Zooming towards the mouse is not supported in the orthogonal perspective." +#~ msgstr "Hacer zoom en la dirección del ratón no es compatible con la perspectiva ortogonal." + +#~ msgid "Orthogonal" +#~ msgstr "Ortográfica" + +#~ msgctxt "description" +#~ msgid "Manages network connections to Ultimaker 3 printers." +#~ msgstr "Gestiona las conexiones de red a las impresoras Ultimaker 3." + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "Conexión de red UM3" + +#~ msgctxt "description" +#~ msgid "Provides extra information and explanations about settings in Cura, with images and animations." +#~ msgstr "Proporciona información y explicaciones adicionales sobre los ajustes de Cura con imágenes y animaciones." + +#~ msgctxt "name" +#~ msgid "Settings Guide" +#~ msgstr "Guía de ajustes" + +#~ msgctxt "@item:inmenu" +#~ msgid "Cura Settings Guide" +#~ msgstr "Guía de ajustes de Cura" + +#~ msgctxt "@info:generic" +#~ msgid "Settings have been changed to match the current availability of extruders: [%s]" +#~ msgstr "La configuración se ha cambiado para que coincida con los extrusores disponibles en este momento: [%s]." + +#~ msgctxt "@title:groupbox" +#~ msgid "User description" +#~ msgstr "Descripción del usuario" + +#~ msgctxt "@info" +#~ msgid "These options are not available because you are monitoring a cloud printer." +#~ msgstr "Estas opciones no se encuentran disponibles porque está supervisando una impresora en la nube." + +#~ msgctxt "@label link to connect manager" +#~ msgid "Go to Cura Connect" +#~ msgstr "Ir a Cura Connect" + +#~ msgctxt "@info" +#~ msgid "All jobs are printed." +#~ msgstr "Se han imprimido todos los trabajos." + +#~ msgctxt "@label link to connect manager" +#~ msgid "View print history" +#~ msgstr "Ver historial de impresión" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "Para imprimir directamente en la impresora a través de la red, asegúrese de que ésta está conectada a la red utilizando un cable de red o conéctela a la red wifi. Si no conecta Cura con la impresora, también puede utilizar una unidad USB para transferir archivos GCode a la impresora.\n" +#~ "\n" +#~ "Seleccione la impresora de la siguiente lista:" + +#~ msgctxt "@info" +#~ msgid "" +#~ "Please make sure your printer has a connection:\n" +#~ "- Check if the printer is turned on.\n" +#~ "- Check if the printer is connected to the network." +#~ msgstr "" +#~ "Asegúrese de que su impresora está conectada:\n" +#~ "- Compruebe que la impresora está encendida.\n" +#~ "- Compruebe que la impresora está conectada a la red." + +#~ msgctxt "@option:check" +#~ msgid "See only current build plate" +#~ msgstr "Ver solo placa de impresión actual" + +#~ msgctxt "@action:button" +#~ msgid "Arrange to all build plates" +#~ msgstr "Organizar todas las placas de impresión" + +#~ msgctxt "@action:button" +#~ msgid "Arrange current build plate" +#~ msgstr "Organizar placa de impresión actual" + +#~ msgctxt "description" +#~ msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." +#~ msgstr "Permite guardar el segmento resultante como un archivo X3G para dar compatibilidad a impresoras que leen este formato (Malyan, Makerbot y otras impresoras basadas en Sailfish)." + +#~ msgctxt "name" +#~ msgid "X3GWriter" +#~ msgstr "X3GWriter" + +#~ msgctxt "description" +#~ msgid "Reads SVG files as toolpaths, for debugging printer movements." +#~ msgstr "Lee archivos SVG como trayectorias de herramienta para solucionar errores en los movimientos de la impresora." + +#~ msgctxt "name" +#~ msgid "SVG Toolpath Reader" +#~ msgstr "Lector de trayectoria de herramienta de SVG" + #~ msgctxt "@item:inmenu" #~ msgid "Changelog" #~ msgstr "Registro de cambios" diff --git a/resources/i18n/es_ES/fdmextruder.def.json.po b/resources/i18n/es_ES/fdmextruder.def.json.po index 20529ad512..db1bfea9d8 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.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+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 2b5b01cd50..b6c8b1fbf1 100644 --- a/resources/i18n/es_ES/fdmprinter.def.json.po +++ b/resources/i18n/es_ES/fdmprinter.def.json.po @@ -5,17 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" -"PO-Revision-Date: 2019-03-13 14:00+0200\n" -"Last-Translator: Bothof \n" -"Language-Team: Spanish\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" +"PO-Revision-Date: 2019-07-29 15:51+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Spanish , Spanish \n" "Language: es_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.6\n" +"X-Generator: Poedit 2.2.3\n" #: fdmprinter.def.json msgctxt "machine_settings label" @@ -215,6 +215,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "Indica si la máquina tiene una placa de impresión caliente." +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "Tiene estabilización de temperatura del volumen de impresión" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "Si la máquina puede estabilizar la temperatura del volumen de impresión." + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -238,7 +248,7 @@ msgstr "Número de trenes extrusores. Un tren extrusor está formado por un alim #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders That Are Enabled" -msgstr "" +msgstr "Número de extrusores habilitados" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -248,7 +258,7 @@ msgstr "Número de trenes extrusores habilitados y configurados en el software d #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer Nozzle Diameter" -msgstr "" +msgstr "Diámetro exterior de la tobera" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter description" @@ -258,7 +268,7 @@ msgstr "Diámetro exterior de la punta de la tobera." #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle Length" -msgstr "" +msgstr "Longitud de la tobera" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance description" @@ -268,7 +278,7 @@ msgstr "Diferencia de altura entre la punta de la tobera y la parte más baja de #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle Angle" -msgstr "" +msgstr "Ángulo de la tobera" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle description" @@ -278,7 +288,7 @@ msgstr "Ángulo entre el plano horizontal y la parte cónica que hay justo encim #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat Zone Length" -msgstr "" +msgstr "Longitud de la zona térmica" #: fdmprinter.def.json msgctxt "machine_heat_zone_length description" @@ -308,7 +318,7 @@ msgstr "Para controlar la temperatura desde Cura. Si va a controlar la temperatu #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat Up Speed" -msgstr "" +msgstr "Velocidad de calentamiento" #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed description" @@ -318,7 +328,7 @@ msgstr "Velocidad (°C/s) de calentamiento de la tobera calculada como una media #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool Down Speed" -msgstr "" +msgstr "Velocidad de enfriamiento" #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed description" @@ -337,8 +347,8 @@ msgstr "Tiempo mínimo que un extrusor debe permanecer inactivo antes de que la #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" -msgstr "" +msgid "G-code Flavor" +msgstr "Tipo de GCode" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" @@ -403,7 +413,7 @@ msgstr "Utilizar o no los comandos de retracción de firmware (G10/G11) en lugar #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed Areas" -msgstr "" +msgstr "Áreas no permitidas" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" @@ -423,7 +433,7 @@ msgstr "Lista de polígonos con áreas en las que la tobera no tiene permitido e #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine Head Polygon" -msgstr "" +msgstr "Polígono del cabezal de la máquina" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -433,7 +443,7 @@ msgstr "Silueta 2D del cabezal de impresión (sin incluir las tapas del ventilad #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine Head & Fan Polygon" -msgstr "" +msgstr "Polígono del cabezal de la máquina y del ventilador" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -443,7 +453,7 @@ msgstr "Silueta 2D del cabezal de impresión (incluidas las tapas del ventilador #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry Height" -msgstr "" +msgstr "Altura del puente" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -473,7 +483,7 @@ msgstr "Diámetro interior de la tobera. Cambie este ajuste cuando utilice un ta #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset with Extruder" -msgstr "" +msgstr "Desplazamiento con extrusor" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -1270,6 +1280,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "Esquina más pronunciada" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "Posición de costura en Z" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "La posición cerca de donde comenzará la impresión de cada parte de una capa." + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "Posterior izquierda" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "Posterior" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "Posterior derecha" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "Derecha" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "Delantera derecha" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "Delantera" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "Delantera izquierda" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "Izquierda" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1297,8 +1357,8 @@ msgstr "Preferencia de esquina de costura" #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "Controlar si las esquinas del contorno del modelo influyen en la posición de la costura. «Ninguno» significa que las esquinas no influyen en la posición de la costura. «Ocultar costura» significa que es probable que la costura se realice en una esquina interior. «Mostrar costura» significa que es probable que la costura sea en una esquina exterior. «Ocultar o mostrar costura» significa que es probable que la costura se realice en una esquina interior o exterior." +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "Controlar si las esquinas del contorno del modelo influyen en la posición de la costura. «Ninguno» significa que las esquinas no influyen en la posición de la costura. «Ocultar costura» significa que es probable que la costura se realice en una esquina interior. «Mostrar costura» significa que es probable que la costura se realice en una esquina exterior. «Ocultar o mostrar costura» significa que es probable que la costura se realice en una esquina interior o exterior. «Costura inteligente» permite realizar la costura en ambas esquinas, pero opta con más frecuencia por las esquinas interiores, si resulta oportuno." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1320,6 +1380,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "Ocultar o mostrar costura" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "Costura inteligente" + #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" @@ -1332,13 +1397,13 @@ msgstr "Cuando se habilita, las coordenadas de la costura en z son relativas al #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "Ignorar los pequeños huecos en Z" +msgid "No Skin in Z Gaps" +msgstr "Sin forro en huecos en Z" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "Cuando el modelo tiene pequeños huecos verticales, el tiempo de cálculo puede aumentar alrededor de un 5 % para generar el forro superior e inferior en estos espacios estrechos. En tal caso, desactive este ajuste." +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "Cuando el modelo tiene pequeños huecos verticales de solo unas pocas capas, normalmente suele haber forro alrededor de ellas en el espacio estrecho. Active este ajuste para no generar forro si el hueco vertical es muy pequeño. Esto mejora el tiempo de impresión y de segmentación, pero deja el relleno expuesto al aire." #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1357,8 +1422,9 @@ msgstr "Habilitar alisado" #: fdmprinter.def.json 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." +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." #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1450,6 +1516,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "Cambio en la velocidad instantánea máxima durante el alisado." +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "Porcentaje de superposición del forro" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Ajuste la cantidad de superposición entre las paredes y (los extremos de) las líneas centrales del forro, como un porcentaje de los anchos de las líneas del forro y la pared más profunda. Una ligera superposición permite que las paredes estén firmemente unidas al forro. Tenga en cuenta que, con un mismo ancho de la línea del forro y la pared, cualquier porcentaje superior al 50 % ya puede provocar que cualquier forro sobrepase la pared, debido a que en ese punto la posición de la tobera del extrusor del forro ya puede sobrepasar la mitad de la pared." + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "Superposición del forro" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Ajuste la cantidad de superposición entre las paredes y (los extremos de) las líneas centrales del forro. Una ligera superposición permite que las paredes estén firmemente unidas al forro. Tenga en cuenta que, con un mismo ancho de la línea del forro y la pared, cualquier valor superior a la mitad del ancho de la pared ya puede provocar que cualquier forro sobrepase la pared, debido a que en ese punto la posición de la tobera del extrusor del forro ya puede sobrepasar la mitad de la pared." + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1615,6 +1701,16 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "El patrón de relleno se mueve esta distancia a lo largo del eje Y." +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +msgstr "Comienzo de relleno aleatorio" + +#: 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 "Determine qué línea de relleno se imprime primero. Esto evita que un segmento se convierta en el más fuerte, pero a expensas de un movimiento adicional." + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1669,26 +1765,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "Cantidad de superposición entre el relleno y las paredes. Una ligera superposición permite que las paredes conecten firmemente con el relleno." -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "Porcentaje de superposición del forro" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Ajuste la cantidad de superposición entre las paredes y (los extremos de) las líneas centrales del forro, como un porcentaje de los anchos de las líneas del forro y la pared más profunda. Una ligera superposición permite que las paredes estén firmemente unidas al forro. Tenga en cuenta que, con un mismo ancho de la línea del forro y la pared, cualquier porcentaje superior al 50 % ya puede provocar que cualquier forro sobrepase la pared, debido a que en ese punto la posición de la tobera del extrusor del forro ya puede sobrepasar la mitad de la pared." - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "Superposición del forro" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Ajuste la cantidad de superposición entre las paredes y (los extremos de) las líneas centrales del forro. Una ligera superposición permite que las paredes estén firmemente unidas al forro. Tenga en cuenta que, con un mismo ancho de la línea del forro y la pared, cualquier valor superior a la mitad del ancho de la pared ya puede provocar que cualquier forro sobrepase la pared, debido a que en ese punto la posición de la tobera del extrusor del forro ya puede sobrepasar la mitad de la pared." - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1872,12 +1948,12 @@ msgstr "La temperatura predeterminada que se utiliza para imprimir. Debería ser #: fdmprinter.def.json msgctxt "build_volume_temperature label" msgid "Build Volume Temperature" -msgstr "" +msgstr "Temperatura de volumen de impresión" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." -msgstr "" +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." +msgstr "La temperatura del entorno de impresión. Si el valor es 0, la temperatura de volumen de impresión no se ajustará." #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1989,6 +2065,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "Índice de compresión en porcentaje." +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "Material cristalino" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "¿Es este el tipo de material que se desprende limpiamente cuando se calienta (cristalino) o el que produce largas cadenas de polímeros entrelazadas (no cristalino)?" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "Velocidad de retracción antirrezumado" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "Hasta dónde tiene que retraerse el material antes de detener el rezumado." + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "Velocidad de retracción antirrezumado" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "Con qué velocidad tiene que retraerse el material durante un cambio de filamento para evitar el rezumado." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "Posición retraída de preparación de rotura" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "Hasta dónde puede estirarse el filamento antes de que se rompa mientras se calienta." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "Velocidad de retracción de preparación de rotura" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "Con qué velocidad debe retraerse el filamento justo antes de romperse en una retracción." + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "Posición retraída de rotura" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "Hasta dónde debe retraerse el filamento para que se rompa limpiamente." + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "Velocidad de retracción de rotura" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "Velocidad a la que debe retraerse el filamento para que se rompa limpiamente." + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "Temperatura de rotura" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "Temperatura a la que se rompe el filamento de forma limpia." + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -1999,6 +2155,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "Compensación de flujo: la cantidad de material extruido se multiplica por este valor." +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "Flujo de pared" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "Compensación de flujo en líneas de pared." + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "Flujo de pared exterior" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "Compensación de flujo en la línea de pared más externa." + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "Flujo de pared o paredes interiores" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "Compensación de flujo en líneas de pared para todas las líneas excepto la más externa." + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "Flujo superior o inferior" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "Compensación de flujo en las líneas superiores o inferiores." + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "Flujo de forro de superficie superior" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "Compensación de flujo en líneas de las áreas superiores de la impresión." + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "Flujo de relleno" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "Compensación de flujo en líneas de relleno." + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "Flujo de falda/borde" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "Compensación de flujo en líneas de falda o borde." + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "Flujo de soporte" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "Compensación de flujo en líneas de estructura de soporte." + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "Flujo de interfaz de soporte" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "Compensación de flujo en líneas de techo o suelo de soporte." + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "Flujo de techo de soporte" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "Compensación de flujo en líneas de techo de soporte." + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "Flujo de suelo de soporte" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "Compensación de flujo en líneas de suelo de soporte." + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "Flujo de la torre auxiliar" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "Compensación de flujo en líneas de la torre auxiliar." + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2116,7 +2392,7 @@ msgstr "Limitar las retracciones de soporte" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." msgstr "Omitir la retracción al moverse de soporte a soporte en línea recta. Habilitar este ajuste ahorra tiempo de impresión pero puede ocasionar un encordado excesivo en la estructura de soporte." #: fdmprinter.def.json @@ -2169,6 +2445,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "Velocidad a la que se retrae el filamento durante una retracción del cambio de tobera." +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "Volumen de cebado adicional tras cambio de tobera" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "Material adicional que debe cebarse tras el cambio de tobera." + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2360,14 +2646,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "Velocidad a la que se imprimen la falda y el borde. Normalmente, esto se hace a la velocidad de la capa inicial, pero a veces es posible que se prefiera imprimir la falda o el borde a una velocidad diferente." #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "Velocidad máxima de Z" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "Velocidad del salto en Z" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "Velocidad máxima a la que se mueve la placa de impresión. Definir este valor en 0 hace que la impresión utilice los valores predeterminados de la velocidad máxima de Z." +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "Velocidad a la que se realiza el movimiento vertical en la dirección Z para los saltos en Z. Suele ser inferior a la velocidad de impresión porque la placa de impresión o el puente de la máquina es más difícil de desplazar." #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2869,16 +3155,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "Distancia entre la tobera y las partes ya impresas, cuando se evita durante movimientos de desplazamiento." -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "Comenzar capas con la misma parte" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "En cada capa, comenzar imprimiendo el objeto cerca del mismo punto, de forma que no se comienza una capa imprimiendo la pieza en la que finalizó la capa anterior. Esto permite mejorar los voladizos y las partes pequeñas, a costa de un mayor tiempo de impresión." - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -2942,12 +3218,12 @@ msgstr "Cuando la máquina cambia de un extrusor a otro, la placa de impresión #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height label" msgid "Z Hop After Extruder Switch Height" -msgstr "" +msgstr "Salto en Z tras altura de cambio de extrusor" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height description" msgid "The height difference when performing a Z Hop after extruder switch." -msgstr "" +msgstr "Diferencia de altura cuando se realiza un salto en Z después de un cambio de extrusor." #: fdmprinter.def.json msgctxt "cooling label" @@ -3222,7 +3498,7 @@ msgstr "Cruz" #: fdmprinter.def.json msgctxt "support_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "Giroide" #: fdmprinter.def.json msgctxt "support_wall_count label" @@ -3285,14 +3561,16 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "Distancia entre las líneas de estructuras del soporte de la capa inicial impresas. Este ajuste se calcula por la densidad del soporte." #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "Dirección de línea de relleno de soporte" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." -msgstr "Orientación del patrón de relleno para soportes. El patrón de relleno de soporte se gira en el plano horizontal." +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." #: fdmprinter.def.json msgctxt "support_brim_enable label" @@ -3421,8 +3699,8 @@ msgstr "Distancia de unión del soporte" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." -msgstr "Distancia máxima entre las estructuras del soporte en las direcciones X/Y. Cuando estructuras separadas están más cerca entre sí que de este valor, las estructuras se combinan en una." +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." +msgstr "Distancia máxima entre las estructuras del soporte en las direcciones X/Y. Cuando las estructuras separadas están más cerca entre sí que este valor, se combinan en una." #: fdmprinter.def.json msgctxt "support_offset label" @@ -3759,6 +4037,45 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "Cantidad de desplazamiento aplicado a los suelos del soporte." +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +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)." + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +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)." + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +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)." + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3800,14 +4117,14 @@ msgid "The diameter of a special tower." msgstr "Diámetro de una torre especial." #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "Diámetro mínimo" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "Diámetro máximo soportado por la torre" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." -msgstr "Diámetro mínimo en las direcciones X/Y de una pequeña área que soportará una torre de soporte especializada." +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "Diámetro máximo en las direcciones X/Y de una pequeña área que debe ser soportada por una torre de soporte especializada." #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" @@ -4303,16 +4620,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "Imprimir una torre junto a la impresión que sirve para preparar el material tras cada cambio de tobera." -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "Torre auxiliar circular" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "Hacer que la torre auxiliar sea circular." - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4353,16 +4660,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "Coordenada Y de la posición de la torre auxiliar." -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "Flujo de la torre auxiliar" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "Compensación de flujo: la cantidad de material extruido se multiplica por este valor." - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4376,12 +4673,12 @@ msgstr "Tras imprimir la torre auxiliar con una tobera, limpie el material rezum #: fdmprinter.def.json msgctxt "prime_tower_brim_enable label" msgid "Prime Tower Brim" -msgstr "" +msgstr "Borde de la torre auxiliar" #: fdmprinter.def.json msgctxt "prime_tower_brim_enable description" msgid "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type." -msgstr "" +msgstr "Puede que las torres auxiliares necesiten la adherencia adicional que proporciona un borde, aunque no sea requisito del modelo. Actualmente, no se puede usar con el tipo de adherencia «balsa»." #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4665,8 +4962,8 @@ msgstr "Contornos espiralizados suaves" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." -msgstr "Suavice los contornos espiralizados para reducir la visibilidad de la costura Z (la costura Z debería ser apenas visible en la impresora pero seguirá siendo visible en la vista de capas). Tenga en cuenta que la suavización tenderá a desdibujar detalles finos de la superficie." +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgstr "Suaviza los contornos espiralizados para reducir la visibilidad de la costura Z (la costura Z debería ser apenas visible en la impresora pero seguirá siendo visible en la vista de capas). Tenga en cuenta que la suavización tenderá a desdibujar detalles finos de la superficie." #: fdmprinter.def.json msgctxt "relative_extrusion label" @@ -4901,12 +5198,14 @@ msgstr "El tamaño mínimo de un segmento de línea de desplazamiento tras la se #: fdmprinter.def.json msgctxt "meshfix_maximum_deviation label" msgid "Maximum Deviation" -msgstr "" +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." -msgstr "" +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" @@ -5165,8 +5464,8 @@ msgstr "Activar soporte cónico" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "Función experimental: hace áreas de soporte más pequeñas en la parte inferior que en el voladizo." +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "Hace que las áreas de soporte sean más pequeñas en la parte inferior que en el voladizo." #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5510,7 +5809,7 @@ msgstr "Distancia entre la tobera y líneas descendentes en horizontal. Cuanto m #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled label" msgid "Use Adaptive Layers" -msgstr "" +msgstr "Utilizar capas de adaptación" #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled description" @@ -5520,7 +5819,7 @@ msgstr "Las capas de adaptación calculan las alturas de las capas dependiendo d #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation label" msgid "Adaptive Layers Maximum Variation" -msgstr "" +msgstr "Variación máxima de las capas de adaptación" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" @@ -5530,7 +5829,7 @@ msgstr "La diferencia de altura máxima permitida en comparación con la altura #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" msgid "Adaptive Layers Variation Step Size" -msgstr "" +msgstr "Tamaño de pasos de variación de las capas de adaptación" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step description" @@ -5540,7 +5839,7 @@ 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 "" +msgstr "Umbral de las capas de adaptación" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" @@ -5760,152 +6059,193 @@ msgstr "Velocidad del ventilador en porcentaje que se utiliza para imprimir la t #: fdmprinter.def.json msgctxt "clean_between_layers label" msgid "Wipe Nozzle Between Layers" -msgstr "" +msgstr "Limpiar tobera entre capas" #: fdmprinter.def.json msgctxt "clean_between_layers description" msgid "Whether to include nozzle wipe G-Code between layers. Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working." -msgstr "" +msgstr "Posibilidad de incluir GCode de limpieza de tobera entre capas. Habilitar este ajuste puede influir en el comportamiento de retracción en el cambio de capa. Utilice los ajustes de retracción de limpieza para controlar la retracción en las capas donde la secuencia de limpieza estará en curso." #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe label" msgid "Material Volume Between Wipes" -msgstr "" +msgstr "Volumen de material entre limpiezas" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe description" msgid "Maximum material, that can be extruded before another nozzle wipe is initiated." -msgstr "" +msgstr "Material máximo que puede extruirse antes de que se inicie otra limpieza de tobera." #: fdmprinter.def.json msgctxt "wipe_retraction_enable label" msgid "Wipe Retraction Enable" -msgstr "" +msgstr "Habilitación de retracción de limpieza" #: fdmprinter.def.json msgctxt "wipe_retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area." -msgstr "" +msgstr "Retrae el filamento cuando la tobera se mueve sobre un área no impresa." #: fdmprinter.def.json msgctxt "wipe_retraction_amount label" msgid "Wipe Retraction Distance" -msgstr "" +msgstr "Distancia de retracción de limpieza" #: fdmprinter.def.json msgctxt "wipe_retraction_amount description" msgid "Amount to retract the filament so it does not ooze during the wipe sequence." -msgstr "" +msgstr "Cantidad para retraer el filamento para que no rezume durante la secuencia de limpieza." #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount label" msgid "Wipe Retraction Extra Prime Amount" -msgstr "" +msgstr "Cantidad de cebado adicional de retracción de limpieza" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount description" msgid "Some material can ooze away during a wipe travel moves, which can be compensated for here." -msgstr "" +msgstr "Algunos materiales pueden rezumar durante el movimiento de un desplazamiento de limpieza, lo cual se puede corregir aquí." #: fdmprinter.def.json msgctxt "wipe_retraction_speed label" msgid "Wipe Retraction Speed" -msgstr "" +msgstr "Velocidad de retracción de limpieza" #: fdmprinter.def.json msgctxt "wipe_retraction_speed description" msgid "The speed at which the filament is retracted and primed during a wipe retraction move." -msgstr "" +msgstr "Velocidad a la que se retrae el filamento y se prepara durante un movimiento de retracción de limpieza." #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed label" msgid "Wipe Retraction Retract Speed" -msgstr "" +msgstr "Velocidad de retracción en retracción de limpieza" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed description" msgid "The speed at which the filament is retracted during a wipe retraction move." -msgstr "" +msgstr "Velocidad a la que se retrae el filamento durante un movimiento de retracción de limpieza." #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "Velocidad de cebado de retracción" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed description" msgid "The speed at which the filament is primed during a wipe retraction move." -msgstr "" +msgstr "Velocidad a la que se prepara el filamento durante un movimiento de retracción de limpieza." #: fdmprinter.def.json msgctxt "wipe_pause label" msgid "Wipe Pause" -msgstr "" +msgstr "Pausar limpieza" #: fdmprinter.def.json msgctxt "wipe_pause description" msgid "Pause after the unretract." -msgstr "" +msgstr "Pausa después de no haber retracción." #: fdmprinter.def.json msgctxt "wipe_hop_enable label" msgid "Wipe Z Hop When Retracted" -msgstr "" +msgstr "Limpiar salto en Z en la retracción" #: fdmprinter.def.json msgctxt "wipe_hop_enable description" msgid "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." -msgstr "" +msgstr "Siempre que se realiza una retracción, la placa de impresión se baja para crear holgura entre la tobera y la impresión. Impide que la tobera golpee la impresión durante movimientos de desplazamiento, reduciendo las posibilidades de alcanzar la impresión de la placa de impresión." #: fdmprinter.def.json msgctxt "wipe_hop_amount label" msgid "Wipe Z Hop Height" -msgstr "" +msgstr "Limpiar altura del salto en Z" #: fdmprinter.def.json msgctxt "wipe_hop_amount description" msgid "The height difference when performing a Z Hop." -msgstr "" +msgstr "Diferencia de altura cuando se realiza un salto en Z." #: fdmprinter.def.json msgctxt "wipe_hop_speed label" msgid "Wipe Hop Speed" -msgstr "" +msgstr "Limpiar velocidad de salto" #: fdmprinter.def.json msgctxt "wipe_hop_speed description" msgid "Speed to move the z-axis during the hop." -msgstr "" +msgstr "Velocidad para mover el eje Z durante el salto." #: fdmprinter.def.json msgctxt "wipe_brush_pos_x label" msgid "Wipe Brush X Position" -msgstr "" +msgstr "Limpiar posición X de cepillo" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x description" msgid "X location where wipe script will start." -msgstr "" +msgstr "Ubicación X donde se iniciará la secuencia de limpieza." #: fdmprinter.def.json msgctxt "wipe_repeat_count label" msgid "Wipe Repeat Count" -msgstr "" +msgstr "Recuento de repeticiones de limpieza" #: fdmprinter.def.json msgctxt "wipe_repeat_count description" msgid "Number of times to move the nozzle across the brush." -msgstr "" +msgstr "Número de movimientos de la tobera a lo largo del cepillo." #: fdmprinter.def.json msgctxt "wipe_move_distance label" msgid "Wipe Move Distance" -msgstr "" +msgstr "Distancia de movimiento de limpieza" #: fdmprinter.def.json msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." -msgstr "" +msgstr "La distancia para mover el cabezal hacia adelante y hacia atrás a lo largo del cepillo." + +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "Tamaño máximo de agujero pequeño" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "Los agujeros y contornos de las piezas con un diámetro menor que estos se imprimen utilizando la función Velocidad de pequeñas partes." + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "Longitud máxima de pequeñas partes" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "Los contornos de las partes que sean más cortos que esta longitud se imprimen utilizando la función Velocidad de pequeñas partes." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +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." +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" + +#: 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 "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." #: fdmprinter.def.json msgctxt "command_line_settings label" @@ -5967,6 +6307,90 @@ 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 "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." + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "Comenzar capas con la misma parte" + +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "En cada capa, comenzar imprimiendo el objeto cerca del mismo punto, de forma que no se comienza una capa imprimiendo la pieza en la que finalizó la capa anterior. Esto permite mejorar los voladizos y las partes pequeñas, a costa de un mayor tiempo de impresión." + +#~ msgctxt "support_infill_angles description" +#~ msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +#~ msgstr "Orientación del patrón de relleno para soportes. El patrón de relleno de soporte se gira en el plano horizontal." + +#~ 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." +#~ msgstr "La desviación máxima permitida al reducir la resolución en el ajuste de resolución máxima. Si se aumenta el valor, la impresión será menos precisa pero el GCode será más pequeño." + +#~ msgctxt "machine_gcode_flavor label" +#~ msgid "G-code Flavour" +#~ msgstr "Tipo de GCode" + +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "Controlar si las esquinas del contorno del modelo influyen en la posición de la costura. «Ninguno» significa que las esquinas no influyen en la posición de la costura. «Ocultar costura» significa que es probable que la costura se realice en una esquina interior. «Mostrar costura» significa que es probable que la costura sea en una esquina exterior. «Ocultar o mostrar costura» significa que es probable que la costura se realice en una esquina interior o exterior." + +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "Ignorar los pequeños huecos en Z" + +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "Cuando el modelo tiene pequeños huecos verticales, el tiempo de cálculo puede aumentar alrededor de un 5 % para generar el forro superior e inferior en estos espacios estrechos. En tal caso, desactive este ajuste." + +#~ msgctxt "build_volume_temperature description" +#~ msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +#~ msgstr "La temperatura utilizada para el volumen de impresión. Si el valor es 0, la temperatura de volumen de impresión no se ajustará." + +#~ msgctxt "limit_support_retractions description" +#~ msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +#~ msgstr "Omitir la retracción al moverse de soporte a soporte en línea recta. Habilitar este ajuste ahorra tiempo de impresión pero puede ocasionar un encordado excesivo en la estructura de soporte." + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "Velocidad máxima de Z" + +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "Velocidad máxima a la que se mueve la placa de impresión. Definir este valor en 0 hace que la impresión utilice los valores predeterminados de la velocidad máxima de Z." + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "Distancia máxima entre las estructuras del soporte en las direcciones X/Y. Cuando estructuras separadas están más cerca entre sí que de este valor, las estructuras se combinan en una." + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "Diámetro mínimo" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "Diámetro mínimo en las direcciones X/Y de una pequeña área que soportará una torre de soporte especializada." + +#~ msgctxt "prime_tower_circular label" +#~ msgid "Circular Prime Tower" +#~ msgstr "Torre auxiliar circular" + +#~ msgctxt "prime_tower_circular description" +#~ msgid "Make the prime tower as a circular shape." +#~ msgstr "Hacer que la torre auxiliar sea circular." + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "Compensación de flujo: la cantidad de material extruido se multiplica por este valor." + +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "Suavice los contornos espiralizados para reducir la visibilidad de la costura Z (la costura Z debería ser apenas visible en la impresora pero seguirá siendo visible en la vista de capas). Tenga en cuenta que la suavización tenderá a desdibujar detalles finos de la superficie." + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "Función experimental: hace áreas de soporte más pequeñas en la parte inferior que en el voladizo." + #~ msgctxt "extruders_enabled_count label" #~ msgid "Number of Extruders that are enabled" #~ msgstr "Número de extrusores habilitados" diff --git a/resources/i18n/fdmextruder.def.json.pot b/resources/i18n/fdmextruder.def.json.pot index 4238e291b3..66f0c71ccc 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-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+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 d6de2f2dc1..5e386628a0 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-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE\n" @@ -218,6 +218,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "" +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "" + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -362,7 +372,7 @@ msgstr "" #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" +msgid "G-code Flavor" msgstr "" #: fdmprinter.def.json @@ -1412,6 +1422,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1448,7 +1508,9 @@ msgid "" "seam. None means that corners have no influence on the seam position. Hide " "Seam makes the seam more likely to occur on an inside corner. Expose Seam " "makes the seam more likely to occur on an outside corner. Hide or Expose " -"Seam makes the seam more likely to occur at an inside or outside corner." +"Seam makes the seam more likely to occur at an inside or outside corner. " +"Smart Hiding allows both inside and outside corners, but chooses inside " +"corners more frequently, if appropriate." msgstr "" #: fdmprinter.def.json @@ -1471,6 +1533,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "" + #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" @@ -1486,15 +1553,17 @@ msgstr "" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" +msgid "No Skin in Z Gaps" msgstr "" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" msgid "" -"When the model has small vertical gaps, about 5% extra computation time can " -"be spent on generating top and bottom skin in these narrow spaces. In such " -"case, disable the setting." +"When the model has small vertical gaps of only a few layers, there should " +"normally be skin around those layers in the narrow space. Enable this " +"setting to not generate skin if the vertical gap is very small. This " +"improves printing time and slicing time, but technically leaves infill " +"exposed to the air." msgstr "" #: fdmprinter.def.json @@ -1518,9 +1587,10 @@ msgstr "" #: fdmprinter.def.json 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." +"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 "" #: fdmprinter.def.json @@ -1621,6 +1691,39 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "" +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "" +"Adjust the amount of overlap between the walls and (the endpoints of) the " +"skin-centerlines, as a percentage of the line widths of the skin lines and " +"the innermost wall. A slight overlap allows the walls to connect firmly to " +"the skin. Note that, given an equal skin and wall line-width, any percentage " +"over 50% may already cause any skin to go past the wall, because at that " +"point the position of the nozzle of the skin-extruder may already reach past " +"the middle of the wall." +msgstr "" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "" +"Adjust the amount of overlap between the walls and (the endpoints of) the " +"skin-centerlines. A slight overlap allows the walls to connect firmly to the " +"skin. Note that, given an equal skin and wall line-width, any value over " +"half the width of the wall may already cause any skin to go past the wall, " +"because at that point the position of the nozzle of the skin-extruder may " +"already reach past the middle of the wall." +msgstr "" + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1809,6 +1912,19 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "" +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +msgstr "" + +#: 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 "" + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1877,39 +1993,6 @@ msgid "" "allows the walls to connect firmly to the infill." msgstr "" -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "" -"Adjust the amount of overlap between the walls and (the endpoints of) the " -"skin-centerlines, as a percentage of the line widths of the skin lines and " -"the innermost wall. A slight overlap allows the walls to connect firmly to " -"the skin. Note that, given an equal skin and wall line-width, any percentage " -"over 50% may already cause any skin to go past the wall, because at that " -"point the position of the nozzle of the skin-extruder may already reach past " -"the middle of the wall." -msgstr "" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "" -"Adjust the amount of overlap between the walls and (the endpoints of) the " -"skin-centerlines. A slight overlap allows the walls to connect firmly to the " -"skin. Note that, given an equal skin and wall line-width, any value over " -"half the width of the wall may already cause any skin to go past the wall, " -"because at that point the position of the nozzle of the skin-extruder may " -"already reach past the middle of the wall." -msgstr "" - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -2151,8 +2234,8 @@ msgstr "" #: fdmprinter.def.json msgctxt "build_volume_temperature description" msgid "" -"The temperature used for build volume. If this is 0, the build volume " -"temperature will not be adjusted." +"The temperature of the environment to print in. If this is 0, the build " +"volume temperature will not be adjusted." msgstr "" #: fdmprinter.def.json @@ -2278,6 +2361,94 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "" +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "" +"Is this material the type that breaks off cleanly when heated (crystalline), " +"or is it the type that produces long intertwined polymer chains (non-" +"crystalline)?" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "" +"How fast the material needs to be retracted during a filament switch to " +"prevent oozing." +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "" +"How fast the filament needs to be retracted just before breaking it off in a " +"retraction." +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "" +"The speed at which to retract the filament in order to break it cleanly." +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "" + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -2290,6 +2461,127 @@ msgid "" "value." msgstr "" +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "" +"Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "" + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "" + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2426,7 +2718,7 @@ msgstr "" msgctxt "limit_support_retractions description" msgid "" "Omit retraction when moving from support to support in a straight line. " -"Enabling this setting saves print time, but can lead to excesive stringing " +"Enabling this setting saves print time, but can lead to excessive stringing " "within the support structure." msgstr "" @@ -2490,6 +2782,16 @@ msgid "" "retraction." msgstr "" +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "" + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2713,15 +3015,16 @@ msgid "" msgstr "" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" msgstr "" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" +msgctxt "speed_z_hop description" msgid "" -"The maximum speed with which the build plate is moved. Setting this to zero " -"causes the print to use the firmware defaults for the maximum z speed." +"The speed at which the vertical Z movement is made for Z Hops. This is " +"typically lower than the print speed since the build plate or machine's " +"gantry is harder to move." msgstr "" #: fdmprinter.def.json @@ -3285,20 +3588,6 @@ msgid "" "during travel moves." msgstr "" -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "" -"In each layer start with printing the object near the same point, so that we " -"don't start a new layer with printing the piece which the previous layer " -"ended with. This makes for better overhangs and small parts, but increases " -"printing time." -msgstr "" - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -3784,15 +4073,18 @@ msgid "" msgstr "" #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "" #: fdmprinter.def.json -msgctxt "support_infill_angle description" +msgctxt "support_infill_angles description" msgid "" -"Orientation of the infill pattern for supports. The support infill pattern " -"is rotated in the horizontal plane." +"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 "" #: fdmprinter.def.json @@ -3946,7 +4238,7 @@ msgstr "" msgctxt "support_join_distance description" msgid "" "The maximum distance between support structures in the X/Y directions. When " -"seperate structures are closer together than this value, the structures " +"separate structures are closer together than this value, the structures " "merge into one." msgstr "" @@ -4332,6 +4624,54 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "" +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +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 "" + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +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 "" + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +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 "" + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -4380,14 +4720,14 @@ msgid "The diameter of a special tower." msgstr "" #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" msgstr "" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" +msgctxt "support_tower_maximum_supported_diameter description" msgid "" -"Minimum diameter in the X/Y directions of a small area which is to be " +"Maximum diameter in the X/Y directions of a small area which is to be " "supported by a specialized support tower." msgstr "" @@ -4962,16 +5302,6 @@ msgid "" "each nozzle switch." msgstr "" -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "" - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -5014,18 +5344,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "" -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "" -"Flow compensation: the amount of material extruded is multiplied by this " -"value." -msgstr "" - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -5397,7 +5715,7 @@ msgstr "" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" msgid "" -"Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-" +"Smooth the spiralized contours to reduce the visibility of the Z seam (the Z " "seam should be barely visible on the print but will still be visible in the " "layer view). Note that smoothing will tend to blur fine surface details." msgstr "" @@ -5702,7 +6020,9 @@ 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." +"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 @@ -6017,9 +6337,7 @@ msgstr "" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "" -"Experimental feature: Make support areas smaller at the bottom than at the " -"overhang." +msgid "Make support areas smaller at the bottom than at the overhang." msgstr "" #: fdmprinter.def.json @@ -6887,6 +7205,55 @@ msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." msgstr "" +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "" +"Holes and part outlines with a diameter smaller than this will be printed " +"using Small Feature Speed." +msgstr "" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "" +"Feature outlines that are shorter than this length will be printed using " +"Small Feature Speed." +msgstr "" + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +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 "" + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor_0 label" +msgid "First 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 "" + #: fdmprinter.def.json msgctxt "command_line_settings label" msgid "Command Line Settings" diff --git a/resources/i18n/fi_FI/cura.po b/resources/i18n/fi_FI/cura.po index f1884abf56..66d5f9167f 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.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" +"POT-Creation-Date: 2019-09-10 16:55+0200\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:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "Laitteen asetukset" @@ -79,36 +79,45 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Profiili on tasoitettu ja aktivoitu." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USB-tulostus" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Tulosta USB:n kautta" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Tulosta USB:n kautta" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "Yhdistetty USB:n kautta" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /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/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +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" @@ -120,6 +129,11 @@ 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" @@ -154,7 +168,7 @@ msgid "Save to Removable Drive {0}" msgstr "Tallenna siirrettävälle asemalle {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "" @@ -191,10 +205,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/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "Virhe" @@ -223,9 +236,9 @@ 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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "Varoitus" @@ -252,339 +265,141 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Siirrettävä asema" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "Tulosta verkon kautta" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "Tulosta verkon kautta" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "Yhdistetty verkon kautta tulostimeen." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "Yhdistetty verkon kautta. Hyväksy tulostimen käyttöoikeuspyyntö." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "Yhdistetty verkon kautta tulostimeen. Ei käyttöoikeutta tulostimen hallintaan." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "Tulostimen käyttöoikeutta pyydetty. Hyväksy tulostimen pyyntö" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "Yritä uudelleen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "Lähetä käyttöoikeuspyyntö uudelleen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "Tulostimen käyttöoikeus hyväksytty" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "Tällä tulostimella tulostukseen ei ole käyttöoikeutta. Tulostustyön lähetys ei onnistu." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "Pyydä käyttöoikeutta" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "Lähetä tulostimen käyttöoikeuspyyntö" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "Ristiriitainen määritys" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "Haluatko varmasti tulostaa valitulla määrityksellä?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Tulostimen ja Curan määrityksen tai kalibroinnin välillä on ristiriita. Parhaat tulokset saavutetaan viipaloimalla aina tulostimeen asetetuille PrintCoreille ja materiaaleille." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "Uusien töiden lähettäminen (tilapäisesti) estetty, edellistä tulostustyötä lähetetään vielä." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "Lähetetään tietoja tulostimeen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "Lähetetään tietoja" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Peruuta" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "Eri materiaali (Cura: {0}, tulostin: {1}) valittu suulakkeelle {2}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "Synkronoi tulostimen kanssa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "Haluatko käyttää nykyistä tulostimen määritystä Curassa?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Tulostimen PrintCoret tai materiaalit eivät vastaa tulostettavan projektin asetuksia. Parhaat tulokset saavutetaan viipaloimalla aina tulostimeen asetetuille PrintCoreille ja materiaaleille." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "{printer_name} on tulostanut työn '{job_name}'." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "Tulosta valmis" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Yhdistä verkon kautta" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +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 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "Tulosta verkon kautta" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "" + +#: /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 "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" msgstr "" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 @@ -592,7 +407,7 @@ msgctxt "@item:inmenu" msgid "Monitor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "Päivitystietoja ei löytynyt." @@ -619,12 +434,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Kerrosnäkymä" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Cura ei näytä kerroksia täsmällisesti, kun rautalankatulostus on käytössä" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "" @@ -679,6 +494,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF-kuva" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -759,19 +604,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF-tiedosto" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "Suutin" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "" @@ -786,18 +631,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G File -tiedosto" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-coden jäsennys" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "G-coden tiedot" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Varmista, että G-code on tulostimelle ja sen tulostusasetuksille soveltuva, ennen kuin lähetät tiedoston siihen. G-coden esitys ei välttämättä ole tarkka." @@ -903,13 +748,13 @@ msgid "Not supported" msgstr "" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 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:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -922,9 +767,8 @@ msgid "Invalid file URL:" msgstr "" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" +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 @@ -932,106 +776,100 @@ msgctxt "@info:title" msgid "Settings updated" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, 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:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, 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:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, 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:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, 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:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, 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:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, 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:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, 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:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "" - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Onnistuneesti tuotu profiili {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, 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:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "Mukautettu profiili" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Profiilista puuttuu laatutyyppi." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1109,7 +947,7 @@ msgctxt "@action:button" msgid "Next" msgstr "" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1117,22 +955,36 @@ msgstr "" #: /home/ruben/Projects/Cura/cura/UI/WhatsNewPagesModel.py:17 #: /home/ruben/Projects/Cura/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "Sulje" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" 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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Peruuta" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1149,20 +1001,19 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" msgstr "" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" msgstr "" @@ -1178,12 +1029,12 @@ msgctxt "@label" msgid "Custom" msgstr "Mukautettu" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "Tulostustilavuuden korkeutta on vähennetty tulostusjärjestysasetuksen vuoksi, jotta koroke ei osuisi tulostettuihin malleihin." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "Tulostustilavuus" @@ -1208,39 +1059,44 @@ msgctxt "@message" msgid "Could not read response." msgstr "" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 msgctxt "@info" msgid "Unable to reach the Ultimaker account server." msgstr "" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:66 +#: /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." msgstr "" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." msgstr "" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "Kappaleiden kertominen ja sijoittelu" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Kaikille kappaleille ei löydy paikkaa tulostustilavuudessa." -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "Sijoitetaan kappaletta" @@ -1381,48 +1237,48 @@ msgstr "" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" msgstr "" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Ladataan laitteita..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Asetetaan näkymää..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Ladataan käyttöliittymää..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, 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:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, 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:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "" @@ -1432,98 +1288,103 @@ msgctxt "@title:label" msgid "Printer Settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X (leveys)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (syvyys)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (korkeus)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "Alustan muoto" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X väh." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y väh." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "X enint." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "Y enint." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "Suulakkeiden määrä" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" msgstr "" @@ -1553,22 +1414,22 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "Suuttimen X-siirtymä" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Suuttimen Y-siirtymä" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" msgstr "" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" msgstr "" @@ -1579,7 +1440,7 @@ msgid "Install" msgstr "" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "Asennettu" @@ -1594,16 +1455,16 @@ msgctxt "@label" msgid "ratings" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "Materiaalit" @@ -1613,49 +1474,49 @@ msgctxt "@label" msgid "Your rating" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1716,17 +1577,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "" @@ -1784,27 +1645,52 @@ msgctxt "@label" msgid "Featured" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +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" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "" @@ -1904,70 +1790,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Laiteohjelmiston päivitys epäonnistui puuttuvan laiteohjelmiston takia." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." +msgid "Please update your printer's firmware to manage the queue remotely." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "" @@ -1977,197 +1869,180 @@ msgctxt "@label" msgid "Queued" msgstr "Jonossa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" +msgid "Manage in browser" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Yhdistä verkkotulostimeen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." msgstr "" -"Tulosta suoraan tulostimeen verkon kautta yhdistämällä tulostin verkkoon verkkokaapelilla tai yhdistämällä tulostin Wi-Fi-verkkoon. Jos Curaa ei yhdistetä tulostimeen, GCode-tiedostot voidaan silti siirtää tulostimeen USB-aseman avulla.\n" -"\n" -"Valitse tulostin alla olevasta luettelosta:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "Muokkaa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "Poista" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "Päivitä" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Jos tulostinta ei ole luettelossa, lue verkkotulostuksen vianetsintäopas" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "Tyyppi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /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:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /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:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 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:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 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:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 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:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "Yhdistä" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /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:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "Tulostimen osoite" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." +msgid "Enter the IP address of your printer on the network." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "Valmis" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "Vaatii toimenpiteitä" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "" @@ -2271,64 +2146,55 @@ msgctxt "@action:button" msgid "Override" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" msgstr[0] "" msgstr[1] "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "Yhdistä tulostimeen" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 @@ -2641,7 +2507,7 @@ msgid "Printer Group" msgstr "" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "Profiilin asetukset" @@ -2654,19 +2520,19 @@ 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/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 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:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 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:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2838,18 +2704,24 @@ msgid "Previous" msgstr "" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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 "" @@ -2969,155 +2841,155 @@ 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:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "Näytä nimi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "Merkki" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "Materiaalin tyyppi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "Väri" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "Ominaisuudet" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "Tiheys" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "Läpimitta" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "Tulostuslangan hinta" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "Tulostuslangan paino" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "Tulostuslangan pituus" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "Hinta metriä kohden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "Poista materiaalin linkitys" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "Kuvaus" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "Tarttuvuustiedot" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /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:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "Aktivoi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "Luo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "Jäljennös" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "Tuo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 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:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "Tuo materiaali" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 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:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "Vie materiaali" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 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:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "Materiaalin vieminen onnistui kohteeseen %1" @@ -3158,388 +3030,411 @@ msgid "Unit" msgstr "Yksikkö" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "Yleiset" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "Käyttöliittymä" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "Kieli:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "Valuutta:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "Teema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Viipaloi automaattisesti, kun asetuksia muutetaan." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "Viipaloi automaattisesti" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "Näyttöikkunan käyttäytyminen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "Näytä uloke" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 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:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 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:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 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:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 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:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 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:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +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 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Zoomaa hiiren suuntaan" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 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:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 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:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 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:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 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:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "Pakotetaanko kerros yhteensopivuustilaan?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 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:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +msgctxt "@info:tooltip" +msgid "What type of camera rendering should be used?" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "Tiedostojen avaaminen ja tallentaminen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 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:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "Skaalaa suuret mallit" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Skaalaa erittäin pienet mallit" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@option:check" msgid "Select models when loaded" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 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:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 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:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 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:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 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:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Projektitiedoston avaamisen oletustoimintatapa" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Projektitiedoston avaamisen oletustoimintatapa: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Avaa aina projektina" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "Tuo mallit aina" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 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:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /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:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:discardOrKeep" msgid "Always transfer changed settings to new profile" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "Tietosuoja" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 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:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 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:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Lähetä (anonyymit) tulostustiedot" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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:715 +#: /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:720 +#: /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:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "Tulostimet" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "Nimeä uudelleen" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /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:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "Luo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "Jäljennös" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "Luo profiili" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 msgctxt "@info" msgid "Please provide a name for this profile." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Monista profiili" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "Nimeä profiili uudelleen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "Profiilin tuonti" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "Profiilin vienti" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Tulostin: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /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:413 +#: /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:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 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:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "Hylkää tehdyt muutokset" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 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:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 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:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "Yleiset asetukset" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "" @@ -3602,33 +3497,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Kopioi arvo kaikkiin suulakepuristimiin" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Piilota tämä asetus" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525 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:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Pidä tämä asetus näkyvissä" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Määritä asetusten näkyvyys..." @@ -3644,32 +3539,32 @@ msgstr "" "\n" "Tee asetuksista näkyviä napsauttamalla." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "Koskee seuraavia:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Riippuu seuraavista:" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 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:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 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:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3680,7 +3575,7 @@ msgstr "" "\n" "Palauta profiilin arvo napsauttamalla." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3696,7 +3591,7 @@ msgctxt "@button" msgid "Recommended" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "" @@ -3721,12 +3616,12 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Muodosta rakenteita, jotka tukevat mallin ulokkeita sisältäviä osia. Ilman tukirakenteita kyseiset osat luhistuvat tulostuksen aikana." -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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." @@ -3812,59 +3707,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "Suulake" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "Kuuman pään kohdelämpötila. Kuuma pää lämpenee tai viilenee kohti tätä lämpötilaa. Jos asetus on 0, kuuman pään lämmitys sammutetaan." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "Peruuta" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "Esilämmitä" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "Tämän suulakkeen materiaalin väri." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "Tämän suulakkeen materiaali." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "Tähän suulakkeeseen liitetty suutin." @@ -3909,11 +3804,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -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" @@ -3929,32 +3819,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Tulostin" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "&Materiaali" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Aseta aktiiviseksi suulakepuristimeksi" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /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:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "&Profiili" @@ -3964,7 +3854,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "" @@ -3984,17 +3889,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "" @@ -4083,22 +3988,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "Avaa &viimeisin" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "Aktiivinen tulostustyö" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "Työn nimi" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "Tulostusaika" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "Aikaa jäljellä arviolta" @@ -4108,6 +4013,11 @@ msgctxt "@label" msgid "View type" msgstr "" +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "" + #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" @@ -4156,32 +4066,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Viipaloidaan..." -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "" @@ -4216,233 +4131,238 @@ msgctxt "@label" msgid "Preset printers" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "Vaihda koko näyttöön" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&Kumoa" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "Tee &uudelleen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Lopeta" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Määritä Curan asetukset..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "L&isää tulostin..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Tulostinten &hallinta..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Hallitse materiaaleja..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Päivitä nykyiset asetukset tai ohitukset profiiliin" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Hylkää tehdyt muutokset" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&Luo profiili nykyisten asetusten tai ohitusten perusteella..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Profiilien hallinta..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Näytä sähköinen &dokumentaatio" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Ilmoita &virheestä" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "Tietoja..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "Poista valittu malli" msgstr[1] "Poista valitut mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Keskitä valittu malli" msgstr[1] "Keskitä valitut mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Kerro valittu malli" msgstr[1] "Kerro valitut mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Poista malli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Ke&skitä malli alustalle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Ryhmittele mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Poista mallien ryhmitys" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Yhdistä mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Kerro malli..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Valitse kaikki mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Tyhjennä tulostusalusta" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Lataa kaikki mallit uudelleen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Järjestä kaikki mallit" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Järjestä valinta" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Määritä kaikkien mallien positiot uudelleen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Määritä kaikkien mallien muutokset uudelleen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Avaa tiedosto(t)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Uusi projekti..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Näytä määrityskansio" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "" @@ -4457,49 +4377,49 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "Asetukset" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 msgctxt "@label" msgid "Are you sure you want to exit Cura?" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /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:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "Avaa tiedosto(t)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "Lisää tulostin" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" msgstr "" @@ -4724,32 +4644,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Tallenna projekti" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /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:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "Suulake %1" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & materiaali" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 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:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "Tallenna" @@ -4925,12 +4845,12 @@ msgctxt "@label" msgid "Troubleshooting" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" msgstr "" @@ -4987,21 +4907,6 @@ msgctxt "@button" msgid "Get started" msgstr "" -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "" - #: MachineSettingsAction/plugin.json msgctxt "description" msgid "Provides a way to change machine settings (such as build volume, nozzle size, etc.)." @@ -5092,6 +4997,16 @@ msgctxt "name" msgid "Profile Flattener" msgstr "" +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "" + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "" + #: USBPrinting/plugin.json msgctxt "description" msgid "Accepts G-Code and sends them to a printer. Plugin can also update firmware." @@ -5102,16 +5017,6 @@ msgctxt "name" msgid "USB printing" msgstr "USB-tulostus" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "" - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5154,22 +5059,12 @@ msgstr "Irrotettavan aseman tulostusvälineen laajennus" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." +msgid "Manages network connections to Ultimaker networked printers." msgstr "" #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "UM3-verkkoyhteys" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" +msgid "Ultimaker Network Connection" msgstr "" #: MonitorStage/plugin.json @@ -5362,6 +5257,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "" + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5392,6 +5297,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "Päivitys versiosta 2.2 versioon 2.4" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "" + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5402,6 +5317,16 @@ msgctxt "name" msgid "Image Reader" msgstr "Kuvanlukija" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "" + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5432,16 +5357,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "3MF-lukija" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5532,6 +5447,108 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura-profiilin lukija" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "Yhdistetty verkon kautta tulostimeen." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "Yhdistetty verkon kautta. Hyväksy tulostimen käyttöoikeuspyyntö." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "Yhdistetty verkon kautta tulostimeen. Ei käyttöoikeutta tulostimen hallintaan." + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "Tulostimen käyttöoikeutta pyydetty. Hyväksy tulostimen pyyntö" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "Lähetä käyttöoikeuspyyntö uudelleen" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "Tulostimen käyttöoikeus hyväksytty" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "Tällä tulostimella tulostukseen ei ole käyttöoikeutta. Tulostustyön lähetys ei onnistu." + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "Pyydä käyttöoikeutta" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "Lähetä tulostimen käyttöoikeuspyyntö" + +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "Ristiriitainen määritys" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "Haluatko varmasti tulostaa valitulla määrityksellä?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Tulostimen ja Curan määrityksen tai kalibroinnin välillä on ristiriita. Parhaat tulokset saavutetaan viipaloimalla aina tulostimeen asetetuille PrintCoreille ja materiaaleille." + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "Uusien töiden lähettäminen (tilapäisesti) estetty, edellistä tulostustyötä lähetetään vielä." + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "Lähetetään tietoja tulostimeen" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "Lähetetään tietoja" + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "Eri materiaali (Cura: {0}, tulostin: {1}) valittu suulakkeelle {2}" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "Synkronoi tulostimen kanssa" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "Haluatko käyttää nykyistä tulostimen määritystä Curassa?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Tulostimen PrintCoret tai materiaalit eivät vastaa tulostettavan projektin asetuksia. Parhaat tulokset saavutetaan viipaloimalla aina tulostimeen asetetuille PrintCoreille ja materiaaleille." + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "{printer_name} on tulostanut työn '{job_name}'." + +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "Tulosta valmis" + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "Yhdistä tulostimeen" + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "UM3-verkkoyhteys" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "Tulosta suoraan tulostimeen verkon kautta yhdistämällä tulostin verkkoon verkkokaapelilla tai yhdistämällä tulostin Wi-Fi-verkkoon. Jos Curaa ei yhdistetä tulostimeen, GCode-tiedostot voidaan silti siirtää tulostimeen USB-aseman avulla.\n" +#~ "\n" +#~ "Valitse tulostin alla olevasta luettelosta:" + #~ msgctxt "@item:inmenu" #~ msgid "Show Changelog" #~ msgstr "Näytä muutosloki" diff --git a/resources/i18n/fi_FI/fdmextruder.def.json.po b/resources/i18n/fi_FI/fdmextruder.def.json.po index e03d0c345f..764e9ea028 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.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+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 9fb7cfcd8f..a9f1caa636 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.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" "PO-Revision-Date: 2017-09-27 12:27+0200\n" "Last-Translator: Bothof \n" "Language-Team: Finnish\n" @@ -210,6 +210,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "Sisältääkö laite lämmitettävän alustan." +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "" + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -332,7 +342,7 @@ msgstr "Minimiaika, jonka suulakkeen on oltava ei-aktiivinen, ennen kuin suutin #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" +msgid "G-code Flavor" msgstr "" #: fdmprinter.def.json @@ -1265,6 +1275,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "Terävin kulma" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1292,8 +1352,8 @@ msgstr "Saumakulmien asetus" #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "Määritä, vaikuttavatko mallin ulkolinjan kulmat sauman sijaintiin. Ei mitään tarkoittaa, että kulmilla ei ole vaikutusta sauman sijaintiin. Piilota sauma -valinnalla sauman sijainti sisäkulmassa on todennäköisempää. Paljasta sauma -valinnalla sauman sijainti ulkokulmassa on todennäköisempää. Piilota tai paljasta sauma -valinnalla sauman sijainti sisä- tai ulkokulmassa on todennäköisempää." +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1315,6 +1375,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "Piilota tai paljasta sauma" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "" + #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" @@ -1327,13 +1392,13 @@ msgstr "Kun tämä on käytössä, Z-sauman koordinaatit ovat suhteessa kunkin o #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "Ohita pienet Z-raot" +msgid "No Skin in Z Gaps" +msgstr "" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "Kun mallissa on pieniä pystyrakoja, ylä- ja alapuolen pintakalvon tekemiseen näihin kapeisiin paikkoihin voi kulua noin 5 % ylimääräistä laskenta-aikaa. Poista siinä tapauksessa tämä asetus käytöstä." +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "" #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1352,8 +1417,8 @@ msgstr "Ota silitys käyttöön" #: fdmprinter.def.json 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." +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 "" #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1445,6 +1510,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "Silityksen aikainen nopeuden hetkellinen maksimimuutos." +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "Pintakalvon limityksen prosentti" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "Pintakalvon limitys" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "" + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1610,6 +1695,16 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "" +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +msgstr "" + +#: 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 "" + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1662,26 +1757,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "Limityksen määrä täytön ja seinämien välillä. Pienellä limityksellä seinämät liittyvät tukevasti täyttöön." -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "Pintakalvon limityksen prosentti" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "Pintakalvon limitys" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "" - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1869,7 +1944,7 @@ msgstr "" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." msgstr "" #: fdmprinter.def.json @@ -1982,6 +2057,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "" +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "" + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -1992,6 +2147,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "Virtauksen kompensointi: pursotetun materiaalin määrä kerrotaan tällä arvolla." +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "" + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "Esitäyttötornin virtaus" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "" + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2109,7 +2384,7 @@ msgstr "" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." msgstr "" #: fdmprinter.def.json @@ -2162,6 +2437,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "Nopeus, jolla tulostuslanka työnnetään takaisin suuttimen vaihdon takaisinvedon jälkeen." +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "" + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2353,14 +2638,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "Nopeus, jolla helma ja reunus tulostetaan. Yleensä se tehdään alkukerroksen nopeudella. Joskus helma tai reunus halutaan kuitenkin tulostaa eri nopeudella." #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "Z:n maksiminopeus" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "Maksiminopeus, jolla alustaa liikutetaan. Jos tämä määritetään nollaan, tulostuksessa käytetään laiteohjelmiston oletusasetuksia Z:n maksiminopeudelle." +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "" #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2862,16 +3147,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "Suuttimen ja aiemmin tulostetun osan välinen etäisyys siirtoliikkeiden yhteydessä." -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "Aloita kerrokset samalla osalla" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "Aloita tulostus jokaisessa kerroksessa tulostamalla kappale, joka on lähellä samaa pistettä, jotta uutta kerrosta ei aloiteta tulostamalla kappaletta, johon edellinen kerros päättyi. Näin saadaan aikaan paremmat ulokkeet ja pienet osat, mutta tulostus kestää kauemmin." - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -3278,13 +3553,13 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "" #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +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 "" #: fdmprinter.def.json @@ -3414,8 +3689,8 @@ msgstr "Tuen liitosetäisyys" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." -msgstr "Tukirakenteiden maksimietäisyys toisistaan X-/Y-suunnissa. Kun erilliset rakenteet ovat tätä arvoa lähempänä toisiaan, rakenteet sulautuvat toisiinsa." +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." +msgstr "" #: fdmprinter.def.json msgctxt "support_offset label" @@ -3752,6 +4027,36 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "" +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +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 "" + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +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 "" + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +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 "" + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3793,14 +4098,14 @@ msgid "The diameter of a special tower." msgstr "Erityistornin läpimitta." #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "Minimiläpimitta" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." -msgstr "Erityisellä tukitornilla tuettavan pienen alueen minimiläpimitta X- ja Y-suunnissa." +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "" #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" @@ -4294,16 +4599,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "Tulosta tulosteen viereen torni, jolla materiaali esitäytetään aina suuttimen vaihdon jälkeen." -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "" - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4344,16 +4639,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "Esitäyttötornin sijainnin Y-koordinaatti." -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "Esitäyttötornin virtaus" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "Virtauksen kompensointi: pursotetun materiaalin määrä kerrotaan tällä arvolla." - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4656,8 +4941,8 @@ msgstr "Kierukoitujen ääriviivojen tasoittaminen" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." -msgstr "Vähennä Z-sauman näkyvyyttä tasoittamalla kierukoidut ääriviivat (Z-sauman pitäisi olla lähes näkymätön tulosteessa, mutta kerrosnäkymässä sen voi edelleen havaita). Ota huomioon, että tasoittaminen usein sumentaa pinnan pieniä yksityiskohtia." +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgstr "" #: fdmprinter.def.json msgctxt "relative_extrusion label" @@ -4896,7 +5181,7 @@ 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." +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 @@ -5156,8 +5441,8 @@ msgstr "Ota kartiomainen tuki käyttöön" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "Kokeellinen ominaisuus: tekee tukialueet pienemmiksi alaosassa verrattuna ulokkeeseen." +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "" #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5898,6 +6183,46 @@ msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." msgstr "" +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "" + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +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 "" + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor_0 label" +msgid "First 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 "" + #: fdmprinter.def.json msgctxt "command_line_settings label" msgid "Command Line Settings" @@ -5958,6 +6283,62 @@ 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 "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." + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "Aloita kerrokset samalla osalla" + +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "Aloita tulostus jokaisessa kerroksessa tulostamalla kappale, joka on lähellä samaa pistettä, jotta uutta kerrosta ei aloiteta tulostamalla kappaletta, johon edellinen kerros päättyi. Näin saadaan aikaan paremmat ulokkeet ja pienet osat, mutta tulostus kestää kauemmin." + +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "Määritä, vaikuttavatko mallin ulkolinjan kulmat sauman sijaintiin. Ei mitään tarkoittaa, että kulmilla ei ole vaikutusta sauman sijaintiin. Piilota sauma -valinnalla sauman sijainti sisäkulmassa on todennäköisempää. Paljasta sauma -valinnalla sauman sijainti ulkokulmassa on todennäköisempää. Piilota tai paljasta sauma -valinnalla sauman sijainti sisä- tai ulkokulmassa on todennäköisempää." + +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "Ohita pienet Z-raot" + +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "Kun mallissa on pieniä pystyrakoja, ylä- ja alapuolen pintakalvon tekemiseen näihin kapeisiin paikkoihin voi kulua noin 5 % ylimääräistä laskenta-aikaa. Poista siinä tapauksessa tämä asetus käytöstä." + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "Z:n maksiminopeus" + +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "Maksiminopeus, jolla alustaa liikutetaan. Jos tämä määritetään nollaan, tulostuksessa käytetään laiteohjelmiston oletusasetuksia Z:n maksiminopeudelle." + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "Tukirakenteiden maksimietäisyys toisistaan X-/Y-suunnissa. Kun erilliset rakenteet ovat tätä arvoa lähempänä toisiaan, rakenteet sulautuvat toisiinsa." + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "Minimiläpimitta" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "Erityisellä tukitornilla tuettavan pienen alueen minimiläpimitta X- ja Y-suunnissa." + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "Virtauksen kompensointi: pursotetun materiaalin määrä kerrotaan tällä arvolla." + +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "Vähennä Z-sauman näkyvyyttä tasoittamalla kierukoidut ääriviivat (Z-sauman pitäisi olla lähes näkymätön tulosteessa, mutta kerrosnäkymässä sen voi edelleen havaita). Ota huomioon, että tasoittaminen usein sumentaa pinnan pieniä yksityiskohtia." + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "Kokeellinen ominaisuus: tekee tukialueet pienemmiksi alaosassa verrattuna ulokkeeseen." + #~ msgctxt "machine_nozzle_tip_outer_diameter label" #~ msgid "Outer nozzle diameter" #~ msgstr "Suuttimen ulkoläpimitta" diff --git a/resources/i18n/fr_FR/cura.po b/resources/i18n/fr_FR/cura.po index 58e23e37da..ab3190c316 100644 --- a/resources/i18n/fr_FR/cura.po +++ b/resources/i18n/fr_FR/cura.po @@ -5,20 +5,20 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" -"PO-Revision-Date: 2019-03-13 14:00+0200\n" -"Last-Translator: Bothof \n" -"Language-Team: French\n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" +"PO-Revision-Date: 2019-07-29 15:51+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: French , French \n" "Language: fr_FR\n" "MIME-Version: 1.0\n" "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.0.6\n" +"X-Generator: Poedit 2.2.3\n" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "Paramètres de la machine" @@ -85,36 +85,45 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Le profil a été aplati et activé." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "Fichier AMF" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "Impression par USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Imprimer via USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Imprimer via USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "Connecté via USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "Une impression USB est en cours, la fermeture de Cura arrêtera cette impression. Êtes-vous sûr ?" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /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/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "Une impression est encore en cours. Cura ne peut pas démarrer une autre impression via USB tant que l'impression précédente n'est pas terminée." + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +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" @@ -126,6 +135,11 @@ 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" @@ -160,7 +174,7 @@ msgid "Save to Removable Drive {0}" msgstr "Enregistrer sur un lecteur amovible {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Aucun format de fichier n'est disponible pour écriture !" @@ -197,10 +211,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/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "Erreur" @@ -229,9 +242,9 @@ 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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "Avertissement" @@ -258,347 +271,149 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Lecteur amovible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "Imprimer sur le réseau" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "Imprimer sur le réseau" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "Connecté sur le réseau." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "Connecté sur le réseau. Veuillez approuver la demande d'accès sur l'imprimante." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "Connecté sur le réseau. Pas d'accès pour commander l'imprimante." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "Accès à l'imprimante demandé. Veuillez approuver la demande sur l'imprimante" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "Statut d'authentification" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "Statut d'authentification" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "Réessayer" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "Renvoyer la demande d'accès" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "Accès à l'imprimante accepté" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "Aucun accès pour imprimer avec cette imprimante. Impossible d'envoyer la tâche d'impression." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "Demande d'accès" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "Envoyer la demande d'accès à l'imprimante" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "Impossible de démarrer une nouvelle tâche d'impression." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "Un problème avec la configuration de votre Ultimaker empêche le démarrage de l'impression. Veuillez résoudre ce problème avant de continuer." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "Configuration différente" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "Êtes-vous sûr(e) de vouloir imprimer avec la configuration sélectionnée ?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Problème de compatibilité entre la configuration ou l'étalonnage de l'imprimante et Cura. Pour un résultat optimal, découpez toujours pour les PrintCores et matériaux insérés dans votre imprimante." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "Envoi de nouvelles tâches (temporairement) bloqué, envoi de la tâche d'impression précédente en cours." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "Envoi des données à l'imprimante" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "Envoi des données" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Annuler" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "Pas de PrintCore inséré dans la fente {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "Aucun matériau inséré dans la fente {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "PrintCore différent (Cura : {cura_printcore_name}, Imprimante : {remote_printcore_name}) sélectionné pour l'extrudeuse {extruder_id}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "Matériau différent (Cura : {0}, Imprimante : {1}) sélectionné pour l'extrudeuse {2}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "Synchroniser avec votre imprimante" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "Voulez-vous utiliser votre configuration d'imprimante actuelle dans Cura ?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Les PrintCores et / ou matériaux sur votre imprimante diffèrent de ceux de votre projet actuel. Pour un résultat optimal, découpez toujours pour les PrintCores et matériaux insérés dans votre imprimante." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "Connecté sur le réseau" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "L'envoi de la tâche d'impression à l'imprimante a réussi." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "Données envoyées" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "Afficher sur le moniteur" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "{printer_name} a terminé d'imprimer '{job_name}'." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "La tâche d'impression '{job_name}' est terminée." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "Impression terminée" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "Vide" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "Inconnu" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "Imprimer via le cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "Imprimer via le cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "Connecté via le cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "Erreur de cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "Impossible d'exporter la tâche d'impression." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "Impossible de transférer les données à l'imprimante." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "demain" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "aujourd'hui" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "Une erreur s'est produite lors de la connexion au cloud." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Lancez et surveillez des impressions où que vous soyez avec votre compte Ultimaker." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "Ne plus me demander pour cette imprimante." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "Prise en main" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Vous pouvez maintenant lancer et surveiller des impressions où que vous soyez avec votre compte Ultimaker." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "Connecté !" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "Consulter votre connexion" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Connecter via le réseau" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" -msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +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 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "Imprimer sur le réseau" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "Connecté sur le réseau" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "Veuillez patienter jusqu'à ce que la tâche en cours ait été envoyée." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "Erreur d'impression" + +#: /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 "Vous tentez de vous connecter à {0} mais ce n'est pas l'hôte de groupe. Vous pouvez visiter la page Web pour la configurer en tant qu'hôte de groupe." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "Pas un hôte de groupe" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "Configurer le groupe" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "Lancez et surveillez des impressions où que vous soyez avec votre compte Ultimaker." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "Se connecter à Ultimaker Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "Prise en main" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "Lancement d'une tâche d'impression" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "Téléchargement de la tâche d'impression sur l'imprimante." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "L'envoi de la tâche d'impression à l'imprimante a réussi." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "Données envoyées" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "Vous tentez de vous connecter à une imprimante qui n'exécute pas Ultimaker Connect. Veuillez mettre à jour l'imprimante avec le dernier micrologiciel." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "Mettre à jour votre imprimante" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "Cura a détecté des profils de matériau qui ne sont pas encore installés sur l'imprimante hôte du groupe {0}." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "Envoi de matériaux à l'imprimante" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "Impossible de transférer les données à l'imprimante." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "Erreur de réseau" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "demain" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "aujourd'hui" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "Imprimer via le cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "Imprimer via le cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" +msgstr "Connecté via le cloud" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Surveiller" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "Impossible d'accéder aux informations de mise à jour." @@ -625,12 +440,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Vue en couches" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Cura n'affiche pas les couches avec précision lorsque l'impression filaire est activée" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "Vue simulation" @@ -685,6 +500,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Image GIF" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "Ouvrir le maillage triangulaire compressé" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "COLLADA Digital Asset Exchange" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "glTF binaire" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "JSON incorporé glTF" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "Format Triangle de Stanford" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "COLLADA Digital Asset Exchange compressé" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -765,19 +610,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Fichier 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "Buse" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "Ouvrir un fichier de projet" @@ -792,18 +637,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Fichier G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Analyse du G-Code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "Détails G-Code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Assurez-vous que le g-code est adapté à votre imprimante et à la configuration de l'imprimante avant d'y envoyer le fichier. La représentation du g-code peut ne pas être exacte." @@ -906,16 +751,16 @@ msgstr "La connexion a échoué" #: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33 msgctxt "@info:not supported profile" msgid "Not supported" -msgstr "" +msgstr "Non pris en charge" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 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:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -928,116 +773,109 @@ msgid "Invalid file URL:" msgstr "URL de fichier invalide :" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" -msgstr "Les paramètres ont été modifiés pour correspondre aux extrudeuses actuellement disponibles : [%s]" +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 msgctxt "@info:title" msgid "Settings updated" msgstr "Paramètres mis à jour" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "Extrudeuse(s) désactivée(s)" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, 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:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, 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:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, 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:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "L'exportation a réussi" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, 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:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, 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:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, 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:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, 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:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "La machine définie dans le profil {0} ({1}) ne correspond pas à votre machine actuelle ({2}) ; échec de l'importation." - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, 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:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, 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:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, 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:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "Personnaliser le profil" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 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:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1086,7 +924,7 @@ msgstr "Jupe" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:84 msgctxt "@tooltip" msgid "Prime Tower" -msgstr "" +msgstr "Tour primaire" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:85 msgctxt "@tooltip" @@ -1115,7 +953,7 @@ msgctxt "@action:button" msgid "Next" msgstr "Suivant" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1123,22 +961,36 @@ 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/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "Fermer" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" 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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Annuler" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1155,23 +1007,22 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Tous les fichiers (*)" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" -msgstr "" +msgstr "Les imprimantes ci-dessous ne peuvent pas être connectées car elles font partie d'un groupe" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" -msgstr "" +msgstr "Imprimantes en réseau disponibles" #: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689 msgctxt "@label" @@ -1184,12 +1035,12 @@ msgctxt "@label" msgid "Custom" msgstr "Personnalisé" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "La hauteur du volume d'impression a été réduite en raison de la valeur du paramètre « Séquence d'impression » afin d'éviter que le portique ne heurte les modèles imprimés." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "Volume d'impression" @@ -1207,46 +1058,51 @@ msgstr "A essayé de restaurer une sauvegarde Cura sans disposer de données ou #: /home/ruben/Projects/Cura/cura/Backups/Backup.py:125 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that is higher than the current version." -msgstr "" +msgstr "A essayé de restaurer une sauvegarde Cura supérieure à la version actuelle." #: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationHelpers.py:79 msgctxt "@message" msgid "Could not read response." -msgstr "" +msgstr "Impossible de lire la réponse." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 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/AuthorizationRequestHandler.py:66 +#: /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." -msgstr "" +msgstr "Veuillez donner les permissions requises lors de l'autorisation de cette application." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "Une erreur s'est produite lors de la connexion, veuillez réessayer." -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "Multiplication et placement d'objets" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "Placement des objets" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Impossible de trouver un emplacement dans le volume d'impression pour tous les objets" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "Placement de l'objet" @@ -1395,48 +1251,48 @@ msgstr "Journaux" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" -msgstr "Description de l'utilisateur" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" +msgstr "Description de l'utilisateur (Remarque : les développeurs peuvent ne pas partler votre langue. Veuillez utiliser l'anglais si possible)" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "Envoyer rapport" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Chargement des machines..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Préparation de la scène..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Chargement de l'interface..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, 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:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, 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:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Le modèle sélectionné était trop petit pour être chargé." @@ -1444,103 +1300,108 @@ msgstr "Le modèle sélectionné était trop petit pour être chargé." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58 msgctxt "@title:label" msgid "Printer Settings" -msgstr "" +msgstr "Paramètres de l'imprimante" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X (Largeur)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Profondeur)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Hauteur)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "Forme du plateau" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" -msgstr "" +msgstr "Origine au centre" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" -msgstr "" +msgstr "Plateau chauffant" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "Volume de fabrication chauffant" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "Parfum G-Code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" -msgstr "" +msgstr "Paramètres de la tête d'impression" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "X max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "Y max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" -msgstr "" +msgstr "Hauteur du portique" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "Nombre d'extrudeuses" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" -msgstr "" +msgstr "G-Code de démarrage" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" -msgstr "" +msgstr "G-Code de fin" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:42 msgctxt "@title:tab" @@ -1550,7 +1411,7 @@ msgstr "Imprimante" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:63 msgctxt "@title:label" msgid "Nozzle Settings" -msgstr "" +msgstr "Paramètres de la buse" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:75 msgctxt "@label" @@ -1567,25 +1428,25 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "Décalage buse X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Décalage buse Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "Numéro du ventilateur de refroidissement" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" -msgstr "" +msgstr "Extrudeuse G-Code de démarrage" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" -msgstr "" +msgstr "Extrudeuse G-Code de fin" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 msgctxt "@action:button" @@ -1593,7 +1454,7 @@ msgid "Install" msgstr "Installer" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "Installé" @@ -1608,16 +1469,16 @@ msgctxt "@label" msgid "ratings" msgstr "évaluations" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "Plug-ins" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "Matériaux" @@ -1627,49 +1488,49 @@ msgctxt "@label" msgid "Your rating" msgstr "Votre évaluation" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "Version" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "Dernière mise à jour" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "Auteur" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "Téléchargements" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "Connexion nécessaire pour l'installation ou la mise à jour" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" -msgstr "" +msgstr "Acheter des bobines de matériau" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "Mise à jour" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "Mise à jour" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1730,17 +1591,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "Quitter Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "Contributions de la communauté" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "Plug-ins de la communauté" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "Matériaux génériques" @@ -1801,27 +1662,52 @@ msgctxt "@label" msgid "Featured" msgstr "Fonctionnalités" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilité" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +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" +msgstr "Plateau" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "Support" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "Qualité" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "Fiche technique" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "Fiche de sécurité" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "Directives d'impression" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "Site Internet" @@ -1921,70 +1807,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Échec de la mise à jour du firmware en raison du firmware manquant." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "Gérer l'imprimante" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "Verre" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." -msgstr "Ces options ne sont pas disponibles car vous surveillez une imprimante cloud." +msgid "Please update your printer's firmware to manage the queue remotely." +msgstr "Veuillez mettre à jour le Firmware de votre imprimante pour gérer la file d'attente à distance." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "La webcam n'est pas disponible car vous surveillez une imprimante cloud." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "Chargement..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "Indisponible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "Injoignable" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "Inactif" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "Sans titre" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "Anonyme" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "Nécessite des modifications de configuration" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "Détails" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "Imprimante indisponible" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "Premier disponible" @@ -1994,197 +1886,180 @@ msgctxt "@label" msgid "Queued" msgstr "Mis en file d'attente" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" -msgstr "Aller à Cura Connect" +msgid "Manage in browser" +msgstr "Gérer dans le navigateur" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "Il n'y a pas de travaux d'impression dans la file d'attente. Découpez et envoyez une tache pour en ajouter une." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "Tâches d'impression" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "Temps total d'impression" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "Attente de" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "Voir l'historique d'impression" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "Connexion existante" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "Ce groupe / cette imprimante a déjà été ajouté à Cura. Veuillez sélectionner un autre groupe / imprimante." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Connecter à l'imprimante en réseau" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" -msgstr "" -"Pour imprimer directement sur votre imprimante sur le réseau, assurez-vous que votre imprimante est connectée au réseau via un câble réseau ou en connectant votre imprimante à votre réseau Wi-Fi. Si vous ne connectez pas Cura avec votre imprimante, vous pouvez utiliser une clé USB pour transférer les fichiers g-code sur votre imprimante.\n" -"\n" -"Sélectionnez votre imprimante dans la liste ci-dessous :" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." +msgstr "Pour imprimer directement sur votre imprimante via le réseau, assurez-vous que votre imprimante est connectée au réseau via un câble Ethernet ou en connectant votre imprimante à votre réseau Wi-Fi. Si vous ne connectez pas Cura avec votre imprimante, vous pouvez utiliser une clé USB pour transférer les fichiers g-code sur votre imprimante." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "Sélectionnez votre imprimante dans la liste ci-dessous :" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "Modifier" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "Supprimer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "Rafraîchir" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Si votre imprimante n'apparaît pas dans la liste, lisez le guide de dépannage de l'impression en réseau" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "Type" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /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:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /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:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 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:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 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:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 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:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "Connecter" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" -msgstr "" +msgstr "Adresse IP non valide" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146 msgctxt "@text" msgid "Please enter a valid IP address." -msgstr "" +msgstr "Veuillez saisir une adresse IP valide." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "Adresse de l'imprimante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." -msgstr "" +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:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "Abandonné" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "Terminé" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "Préparation..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "Abandon..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "Mise en pause..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "En pause" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "Reprise..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "Action requise" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "Finit %1 à %2" @@ -2288,73 +2163,64 @@ msgctxt "@action:button" msgid "Override" msgstr "Remplacer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" msgstr[0] "L'imprimante assignée, %1, nécessite la modification de configuration suivante :" msgstr[1] "L'imprimante assignée, %1, nécessite les modifications de configuration suivantes :" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "L'imprimante %1 est assignée, mais le projet contient une configuration matérielle inconnue." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "Changer le matériau %1 de %2 à %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "Charger %3 comme matériau %1 (Ceci ne peut pas être remplacé)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." msgstr "Changer le print core %1 de %2 à %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "Changer le plateau en %1 (Ceci ne peut pas être remplacé)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "Si vous sélectionnez « Remplacer », les paramètres de la configuration actuelle de l'imprimante seront utilisés. Cela peut entraîner l'échec de l'impression." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "Aluminium" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "Connecter à une imprimante" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" "Assurez-vous que votre imprimante est connectée :\n" "- Vérifiez si l'imprimante est sous tension.\n" -"- Vérifiez si l'imprimante est connectée au réseau." +"- Vérifiez si l'imprimante est connectée au réseau.- Vérifiez si vous êtes connecté pour découvrir les imprimantes connectées au cloud." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 msgctxt "@info" msgid "Please connect your printer to the network." -msgstr "" +msgstr "Veuillez connecter votre imprimante au réseau." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:156 msgctxt "@label link to technical assistance" @@ -2476,17 +2342,17 @@ msgstr "Plus d'informations sur la collecte de données anonymes" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:74 msgctxt "@text:window" msgid "Ultimaker Cura collects anonymous data in order to improve the print quality and user experience. Below is an example of all the data that is shared:" -msgstr "" +msgstr "Ultimaker Cura recueille des données anonymes afin d'améliorer la qualité d'impression et l'expérience utilisateur. Voici un exemple de toutes les données partagées :" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:109 msgctxt "@text:window" msgid "I don't want to send anonymous data" -msgstr "" +msgstr "Je ne veux pas envoyer de données anonymes" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:118 msgctxt "@text:window" msgid "Allow sending anonymous data" -msgstr "" +msgstr "Autoriser l'envoi de données anonymes" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2536,7 +2402,7 @@ msgstr "Profondeur (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 msgctxt "@info:tooltip" msgid "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model." -msgstr "" +msgstr "Pour les lithophanies, les pixels foncés doivent correspondre à des emplacements plus épais afin d'empêcher la lumière de passer. Pour des cartes de hauteur, les pixels clairs signifient un terrain plus élevé, de sorte que les pixels clairs doivent correspondre à des emplacements plus épais dans le modèle 3D généré." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 msgctxt "@item:inlistbox" @@ -2661,7 +2527,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:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "Paramètres de profil" @@ -2674,19 +2540,19 @@ 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/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 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:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 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:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2858,18 +2724,24 @@ 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:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "Astuce" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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" @@ -2989,155 +2861,155 @@ 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:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "Afficher le nom" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "Marque" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "Type de matériau" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "Couleur" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "Propriétés" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "Densité" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "Diamètre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "Coût du filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "Poids du filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "Longueur du filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "Coût au mètre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "Délier le matériau" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "Description" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "Informations d'adhérence" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /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:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "Activer" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "Créer" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "Dupliquer" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "Importer" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "Imprimante" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "Confirmer la suppression" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 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:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "Importer un matériau" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 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:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "Exporter un matériau" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 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:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "Matériau exporté avec succès vers %1" @@ -3178,388 +3050,411 @@ msgid "Unit" msgstr "Unité" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "Général" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "Interface" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "Langue :" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "Devise :" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "Thème :" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 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:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "Découper automatiquement" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "Comportement Viewport" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "Mettre en surbrillance les porte-à-faux" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 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:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 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:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 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:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 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:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 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:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +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 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:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 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:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 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:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 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:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 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:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 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:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 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:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 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:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 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:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +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 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "Rendu caméra : " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "Perspective" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "Orthographique" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "Ouvrir et enregistrer des fichiers" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 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:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 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:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 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:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 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:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 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:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 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:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 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:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 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:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 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:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 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:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 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:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "Toujours me demander" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Toujours ouvrir comme projet" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "Toujours importer les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "Profils" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 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:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /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:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 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:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 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:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "Confidentialité" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 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:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 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:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 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:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "Plus d'informations" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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:715 +#: /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:720 +#: /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:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "Imprimantes" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "Renommer" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /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:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "Créer" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "Dupliquer" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "Créer un profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 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:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Dupliquer un profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "Renommer le profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "Importer un profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "Exporter un profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Imprimante : %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /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:413 +#: /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:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 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:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "Ignorer les modifications actuelles" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 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:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 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:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "Paramètres généraux" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "Marché en ligne" @@ -3622,33 +3517,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "paramètres de recherche" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 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:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 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:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide 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 "Don't show this setting" msgstr "Masquer ce paramètre" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Afficher ce paramètre" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configurer la visibilité des paramètres..." @@ -3664,32 +3559,32 @@ msgstr "" "\n" "Cliquez pour rendre ces paramètres visibles." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." -msgstr "" +msgstr "Ce paramètre n'est pas utilisé car tous les paramètres qu'il influence sont remplacés." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "Touche" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Touché par" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 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:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 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:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3700,7 +3595,7 @@ msgstr "" "\n" "Cliquez pour restaurer la valeur du profil." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3716,7 +3611,7 @@ msgctxt "@button" msgid "Recommended" msgstr "Recommandé" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "Personnalisé" @@ -3741,12 +3636,12 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Générer des structures pour soutenir les parties du modèle qui possèdent des porte-à-faux. Sans ces structures, ces parties s'effondreront durant l'impression." -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "Adhérence" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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." @@ -3764,7 +3659,7 @@ msgstr "Vous avez modifié certains paramètres du profil. Si vous souhaitez les #: /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 "" +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" @@ -3800,7 +3695,7 @@ 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." -msgstr "" +msgstr "Configuration d'impression désactivée. Le fichier G-Code ne peut pas être modifié." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:52 msgctxt "@label" @@ -3832,59 +3727,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "Envoyer G-Code" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "Envoyer une commande G-Code personnalisée à l'imprimante connectée. Appuyez sur « Entrée » pour envoyer la commande." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "Extrudeuse" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "Température cible de l'extrémité chauffante. L'extrémité chauffante sera chauffée ou refroidie pour tendre vers cette température. Si la valeur est 0, le chauffage de l'extrémité chauffante sera coupé." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "Température actuelle de cette extrémité chauffante." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "Température jusqu'à laquelle préchauffer l'extrémité chauffante." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "Annuler" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "Préchauffer" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "Préchauffez l'extrémité chauffante avant l'impression. Vous pouvez continuer l'ajustement de votre impression pendant qu'elle chauffe, ce qui vous évitera un temps d'attente lorsque vous serez prêt à lancer l'impression." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "Couleur du matériau dans cet extrudeur." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "Matériau dans cet extrudeur." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "Buse insérée dans cet extrudeur." @@ -3929,11 +3824,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "Favoris" -#: /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/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3949,32 +3839,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Im&primante" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "&Matériau" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Définir comme extrudeur actif" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Activer l'extrudeuse" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Désactiver l'extrudeuse" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /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:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" @@ -3984,7 +3874,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "Position de la &caméra" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "Vue de la caméra" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "Perspective" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "Orthographique" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "&Plateau" @@ -4004,17 +3909,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Gérer la visibilité des paramètres..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "Enregi&strer..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "&Exporter..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "Exporter la sélection..." @@ -4103,22 +4008,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "Ouvrir un fichier &récent" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "Activer l'impression" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "Nom de la tâche" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "Durée d'impression" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "Durée restante estimée" @@ -4126,12 +4031,17 @@ msgstr "Durée restante estimée" #: /home/ruben/Projects/Cura/resources/qml/ViewsSelector.qml:50 msgctxt "@label" msgid "View type" -msgstr "" +msgstr "Type d'affichage" + +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "Liste d'objets" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" -msgstr "" +msgstr "Bonjour %1" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:33 msgctxt "@button" @@ -4160,6 +4070,9 @@ msgid "" "- Store your Ultimaker Cura settings in the cloud for use anywhere\n" "- Get exclusive access to print profiles from leading brands" msgstr "" +"- Envoyez des tâches d'impression à des imprimantes Ultimaker hors de votre réseau local\n" +"- Stockez vos paramètres Ultimaker Cura dans le cloud pour les utiliser où que vous soyez\n" +"- Obtenez un accès exclusif aux profils d'impression des principales marques" #: /home/ruben/Projects/Cura/resources/qml/Account/GeneralOperations.qml:78 msgctxt "@button" @@ -4176,32 +4089,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "Aucune estimation des coûts n'est disponible" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "Aperçu" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Découpe en cours..." -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" -msgstr "" +msgstr "Impossible de découper" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "Traitement" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "Découper" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "Démarrer le processus de découpe" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "Annuler" @@ -4209,12 +4127,12 @@ msgstr "Annuler" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:31 msgctxt "@label" msgid "Time estimation" -msgstr "" +msgstr "Estimation de durée" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:114 msgctxt "@label" msgid "Material estimation" -msgstr "" +msgstr "Estimation du matériau" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:164 msgctxt "@label m for meter" @@ -4236,233 +4154,238 @@ msgctxt "@label" msgid "Preset printers" msgstr "Imprimantes préréglées" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "Ajouter une imprimante" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "Gérer les imprimantes" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "Afficher le guide de dépannage en ligne" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "Passer en Plein écran" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "Quitter le mode plein écran" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&Annuler" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Rétablir" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Quitter" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "Vue 3D" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "Vue de face" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "Vue du dessus" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "Vue latérale gauche" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "Vue latérale droite" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Configurer Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Ajouter une imprimante..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Gérer les &imprimantes..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Gérer les matériaux..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" 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/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Ignorer les modifications actuelles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&Créer un profil à partir des paramètres / forçages actuels..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Gérer les profils..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Afficher la &documentation en ligne" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Notifier un &bug" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" -msgstr "" +msgstr "Quoi de neuf" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "À propos de..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "Supprimer le modèle sélectionné" msgstr[1] "Supprimer les modèles sélectionnés" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Centrer le modèle sélectionné" msgstr[1] "Centrer les modèles sélectionnés" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Multiplier le modèle sélectionné" msgstr[1] "Multiplier les modèles sélectionnés" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Supprimer le modèle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Ce&ntrer le modèle sur le plateau" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Grouper les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Dégrouper les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Fusionner les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Multiplier le modèle..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Sélectionner tous les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Supprimer les objets du plateau" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Recharger tous les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Réorganiser tous les modèles sur tous les plateaux" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Réorganiser tous les modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Réorganiser la sélection" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Réinitialiser toutes les positions des modèles" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Réinitialiser tous les modèles et transformations" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Ouvrir le(s) fichier(s)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nouveau projet..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Afficher le dossier de configuration" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "&Marché en ligne" @@ -4477,52 +4400,52 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Ce paquet sera installé après le redémarrage." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "Paramètres" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "Fermeture de Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 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:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /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:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "Installer le paquet" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "Ouvrir le(s) fichier(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "Ajouter une imprimante" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" -msgstr "" +msgstr "Quoi de neuf" #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 msgctxt "@label %1 is filled in with the name of an extruder" @@ -4744,32 +4667,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Enregistrer le projet" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /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:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extrudeuse %1" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & matériau" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" -msgstr "" +msgstr "Matériau" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 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:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "Enregistrer" @@ -4802,158 +4725,158 @@ msgstr "Importer les modèles" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DropDownWidget.qml:93 msgctxt "@label" msgid "Empty" -msgstr "" +msgstr "Vide" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:24 msgctxt "@label" msgid "Add a printer" -msgstr "" +msgstr "Ajouter une imprimante" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:39 msgctxt "@label" msgid "Add a networked printer" -msgstr "" +msgstr "Ajouter une imprimante en réseau" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:81 msgctxt "@label" msgid "Add a non-networked printer" -msgstr "" +msgstr "Ajouter une imprimante hors réseau" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:70 msgctxt "@label" msgid "Add printer by IP address" -msgstr "" +msgstr "Ajouter une imprimante par adresse IP" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:133 msgctxt "@text" msgid "Place enter your printer's IP address." -msgstr "" +msgstr "Saisissez l'adresse IP de votre imprimante." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:158 msgctxt "@button" msgid "Add" -msgstr "" +msgstr "Ajouter" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:204 msgctxt "@label" msgid "Could not connect to device." -msgstr "" +msgstr "Impossible de se connecter à l'appareil." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:208 msgctxt "@label" msgid "The printer at this address has not responded yet." -msgstr "" +msgstr "L'imprimante à cette adresse n'a pas encore répondu." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:240 msgctxt "@label" msgid "This printer cannot be added because it's an unknown printer or it's not the host of a group." -msgstr "" +msgstr "Cette imprimante ne peut pas être ajoutée parce qu'il s'agit d'une imprimante inconnue ou de l'hôte d'un groupe." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:329 msgctxt "@button" msgid "Back" -msgstr "" +msgstr "Précédent" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:342 msgctxt "@button" msgid "Connect" -msgstr "" +msgstr "Se connecter" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/FirstStartMachineActionsContent.qml:77 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:123 msgctxt "@button" msgid "Next" -msgstr "" +msgstr "Suivant" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:23 msgctxt "@label" msgid "User Agreement" -msgstr "" +msgstr "Accord utilisateur" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:56 msgctxt "@button" msgid "Agree" -msgstr "" +msgstr "Accepter" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:70 msgctxt "@button" msgid "Decline and close" -msgstr "" +msgstr "Décliner et fermer" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:24 msgctxt "@label" msgid "Help us to improve Ultimaker Cura" -msgstr "" +msgstr "Aidez-nous à améliorer Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:57 msgctxt "@text" msgid "Ultimaker Cura collects anonymous data to improve print quality and user experience, including:" -msgstr "" +msgstr "Ultimaker Cura recueille des données anonymes pour améliorer la qualité d'impression et l'expérience utilisateur, notamment :" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:71 msgctxt "@text" msgid "Machine types" -msgstr "" +msgstr "Types de machines" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:77 msgctxt "@text" msgid "Material usage" -msgstr "" +msgstr "Utilisation du matériau" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:83 msgctxt "@text" msgid "Number of slices" -msgstr "" +msgstr "Nombre de découpes" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:89 msgctxt "@text" msgid "Print settings" -msgstr "" +msgstr "Paramètres d'impression" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:102 msgctxt "@text" msgid "Data collected by Ultimaker Cura will not contain any personal information." -msgstr "" +msgstr "Les données recueillies par Ultimaker Cura ne contiendront aucun renseignement personnel." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:103 msgctxt "@text" msgid "More information" -msgstr "" +msgstr "Plus d'informations" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WhatsNewContent.qml:24 msgctxt "@label" msgid "What's new in Ultimaker Cura" -msgstr "" +msgstr "Quoi de neuf dans Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:42 msgctxt "@label" msgid "There is no printer found over your network." -msgstr "" +msgstr "Aucune imprimante n'a été trouvée sur votre réseau." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:179 msgctxt "@label" msgid "Refresh" -msgstr "" +msgstr "Rafraîchir" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:190 msgctxt "@label" msgid "Add printer by IP" -msgstr "" +msgstr "Ajouter une imprimante par IP" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:223 msgctxt "@label" msgid "Troubleshooting" -msgstr "" +msgstr "Dépannage" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" -msgstr "" +msgstr "Nom de l'imprimante" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" -msgstr "" +msgstr "Veuillez donner un nom à votre imprimante" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:36 msgctxt "@label" @@ -4963,37 +4886,37 @@ msgstr "Ultimaker Cloud" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:77 msgctxt "@text" msgid "The next generation 3D printing workflow" -msgstr "" +msgstr "Le flux d'impression 3D de nouvelle génération" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:94 msgctxt "@text" msgid "- Send print jobs to Ultimaker printers outside your local network" -msgstr "" +msgstr "- Envoyez des tâches d'impression à des imprimantes Ultimaker hors de votre réseau local" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:97 msgctxt "@text" msgid "- Store your Ultimaker Cura settings in the cloud for use anywhere" -msgstr "" +msgstr "- Stockez vos paramètres Ultimaker Cura dans le cloud pour les utiliser où que vous soyez" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:100 msgctxt "@text" msgid "- Get exclusive access to print profiles from leading brands" -msgstr "" +msgstr "- Accédez en exclusivité aux profils d'impression des plus grandes marques" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:119 msgctxt "@button" msgid "Finish" -msgstr "" +msgstr "Fin" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:128 msgctxt "@button" msgid "Create an account" -msgstr "" +msgstr "Créer un compte" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:29 msgctxt "@label" msgid "Welcome to Ultimaker Cura" -msgstr "" +msgstr "Bienvenue dans Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:47 msgctxt "@text" @@ -5001,26 +4924,13 @@ msgid "" "Please follow these steps to set up\n" "Ultimaker Cura. This will only take a few moments." msgstr "" +"Veuillez suivre ces étapes pour configurer\n" +"Ultimaker Cura. Cela ne prendra que quelques instants." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:58 msgctxt "@button" msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "Afficher uniquement le plateau actuel" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "Réorganiser sur tous les plateaux" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "Réorganiser le plateau actuel" +msgstr "Prise en main" #: MachineSettingsAction/plugin.json msgctxt "description" @@ -5105,12 +5015,22 @@ msgstr "Programme de mise à jour du firmware" #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattened quality changes profile." -msgstr "" +msgstr "Créer un profil de changements de qualité aplati." #: ProfileFlattener/plugin.json msgctxt "name" msgid "Profile Flattener" -msgstr "" +msgstr "Aplatisseur de profil" + +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "Fournit la prise en charge de la lecture de fichiers AMF." + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "Lecteur AMF" #: USBPrinting/plugin.json msgctxt "description" @@ -5122,16 +5042,6 @@ msgctxt "name" msgid "USB printing" msgstr "Impression par USB" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "Permet de sauvegarder la tranche résultante sous forme de fichier X3G, pour prendre en charge les imprimantes qui lisent ce format (Malyan, Makerbot et autres imprimantes basées sur Sailfish)." - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "X3GWriter" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5174,23 +5084,13 @@ msgstr "Plugin de périphérique de sortie sur disque amovible" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Gère les connexions réseau vers les imprimantes Ultimaker 3." +msgid "Manages network connections to Ultimaker networked printers." +msgstr "Gère les connexions réseau vers les imprimantes Ultimaker en réseau." #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "Connexion au réseau UM3" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" -msgstr "" +msgid "Ultimaker Network Connection" +msgstr "Connexion réseau Ultimaker" #: MonitorStage/plugin.json msgctxt "description" @@ -5255,12 +5155,12 @@ msgstr "Effaceur de support" #: UFPReader/plugin.json msgctxt "description" msgid "Provides support for reading Ultimaker Format Packages." -msgstr "" +msgstr "Fournit un support pour la lecture des paquets de format Ultimaker." #: UFPReader/plugin.json msgctxt "name" msgid "UFP Reader" -msgstr "" +msgstr "Lecteur UFP" #: SliceInfoPlugin/plugin.json msgctxt "description" @@ -5345,12 +5245,12 @@ msgstr "Mise à niveau de version, de 2.7 vers 3.0" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.5 to Cura 4.0." -msgstr "" +msgstr "Configurations des mises à niveau de Cura 3.5 vers Cura 4.0." #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "name" msgid "Version Upgrade 3.5 to 4.0" -msgstr "" +msgstr "Mise à niveau de 3.5 vers 4.0" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" @@ -5365,12 +5265,12 @@ msgstr "Mise à niveau de 3.4 vers 3.5" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 4.0 to Cura 4.1." -msgstr "" +msgstr "Configurations des mises à niveau de Cura 4.0 vers Cura 4.1." #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "name" msgid "Version Upgrade 4.0 to 4.1" -msgstr "" +msgstr "Mise à niveau de 4.0 vers 4.1" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" @@ -5382,6 +5282,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "Mise à niveau de version, de 3.0 vers 3.1" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "Configurations des mises à jour de Cura 4.1 vers Cura 4.2." + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "Mise à jour de 4.1 vers 4.2" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5412,6 +5322,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "Mise à niveau de 2.2 vers 2.4" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "Configurations des mises à jour de Cura 4.2 vers Cura 4.3." + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "Mise à jour de 4.2 vers 4.3" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5422,6 +5342,16 @@ msgctxt "name" msgid "Image Reader" msgstr "Lecteur d'images" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "Fournit la prise en charge de la lecture de fichiers modèle 3D." + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "Lecteur de Trimesh" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5452,16 +5382,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "Lecteur 3MF" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5485,12 +5405,12 @@ msgstr "Lecteur G-Code" #: CuraDrive/plugin.json msgctxt "description" msgid "Backup and restore your configuration." -msgstr "" +msgstr "Sauvegardez et restaurez votre configuration." #: CuraDrive/plugin.json msgctxt "name" msgid "Cura Backups" -msgstr "" +msgstr "Sauvegardes Cura" #: CuraProfileWriter/plugin.json msgctxt "description" @@ -5525,12 +5445,12 @@ msgstr "Générateur 3MF" #: PreviewStage/plugin.json msgctxt "description" msgid "Provides a preview stage in Cura." -msgstr "" +msgstr "Fournit une étape de prévisualisation dans Cura." #: PreviewStage/plugin.json msgctxt "name" msgid "Preview Stage" -msgstr "" +msgstr "Étape de prévisualisation" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -5552,6 +5472,297 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Lecteur de profil Cura" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "Connecté sur le réseau." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "Connecté sur le réseau. Veuillez approuver la demande d'accès sur l'imprimante." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "Connecté sur le réseau. Pas d'accès pour commander l'imprimante." + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "Accès à l'imprimante demandé. Veuillez approuver la demande sur l'imprimante" + +#~ msgctxt "@info:title" +#~ msgid "Authentication status" +#~ msgstr "Statut d'authentification" + +#~ msgctxt "@info:title" +#~ msgid "Authentication Status" +#~ msgstr "Statut d'authentification" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "Renvoyer la demande d'accès" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "Accès à l'imprimante accepté" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "Aucun accès pour imprimer avec cette imprimante. Impossible d'envoyer la tâche d'impression." + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "Demande d'accès" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "Envoyer la demande d'accès à l'imprimante" + +#~ msgctxt "@label" +#~ msgid "Unable to start a new print job." +#~ msgstr "Impossible de démarrer une nouvelle tâche d'impression." + +#~ msgctxt "@label" +#~ msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." +#~ msgstr "Un problème avec la configuration de votre Ultimaker empêche le démarrage de l'impression. Veuillez résoudre ce problème avant de continuer." + +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "Configuration différente" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "Êtes-vous sûr(e) de vouloir imprimer avec la configuration sélectionnée ?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Problème de compatibilité entre la configuration ou l'étalonnage de l'imprimante et Cura. Pour un résultat optimal, découpez toujours pour les PrintCores et matériaux insérés dans votre imprimante." + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "Envoi de nouvelles tâches (temporairement) bloqué, envoi de la tâche d'impression précédente en cours." + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "Envoi des données à l'imprimante" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "Envoi des données" + +#~ msgctxt "@info:status" +#~ msgid "No Printcore loaded in slot {slot_number}" +#~ msgstr "Pas de PrintCore inséré dans la fente {slot_number}" + +#~ msgctxt "@info:status" +#~ msgid "No material loaded in slot {slot_number}" +#~ msgstr "Aucun matériau inséré dans la fente {slot_number}" + +#~ msgctxt "@label" +#~ msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" +#~ msgstr "PrintCore différent (Cura : {cura_printcore_name}, Imprimante : {remote_printcore_name}) sélectionné pour l'extrudeuse {extruder_id}" + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "Matériau différent (Cura : {0}, Imprimante : {1}) sélectionné pour l'extrudeuse {2}" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "Synchroniser avec votre imprimante" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "Voulez-vous utiliser votre configuration d'imprimante actuelle dans Cura ?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Les PrintCores et / ou matériaux sur votre imprimante diffèrent de ceux de votre projet actuel. Pour un résultat optimal, découpez toujours pour les PrintCores et matériaux insérés dans votre imprimante." + +#~ msgctxt "@action:button" +#~ msgid "View in Monitor" +#~ msgstr "Afficher sur le moniteur" + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "{printer_name} a terminé d'imprimer '{job_name}'." + +#~ msgctxt "@info:status" +#~ msgid "The print job '{job_name}' was finished." +#~ msgstr "La tâche d'impression '{job_name}' est terminée." + +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "Impression terminée" + +#~ msgctxt "@label:material" +#~ msgid "Empty" +#~ msgstr "Vide" + +#~ msgctxt "@label:material" +#~ msgid "Unknown" +#~ msgstr "Inconnu" + +#~ msgctxt "@info:title" +#~ msgid "Cloud error" +#~ msgstr "Erreur de cloud" + +#~ msgctxt "@info:status" +#~ msgid "Could not export print job." +#~ msgstr "Impossible d'exporter la tâche d'impression." + +#~ msgctxt "@info:description" +#~ msgid "There was an error connecting to the cloud." +#~ msgstr "Une erreur s'est produite lors de la connexion au cloud." + +#~ msgctxt "@info:status" +#~ msgid "Uploading via Ultimaker Cloud" +#~ msgstr "Téléchargement via Ultimaker Cloud" + +#~ msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." +#~ msgid "Connect to Ultimaker Cloud" +#~ msgstr "Se connecter à Ultimaker Cloud" + +#~ msgctxt "@action" +#~ msgid "Don't ask me again for this printer." +#~ msgstr "Ne plus me demander pour cette imprimante." + +#~ msgctxt "@info:status" +#~ msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." +#~ msgstr "Vous pouvez maintenant lancer et surveiller des impressions où que vous soyez avec votre compte Ultimaker." + +#~ msgctxt "@info:status" +#~ msgid "Connected!" +#~ msgstr "Connecté !" + +#~ msgctxt "@action" +#~ msgid "Review your connection" +#~ msgstr "Consulter votre connexion" + +#~ msgctxt "@info:status Don't translate the XML tags !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "La machine définie dans le profil {0} ({1}) ne correspond pas à votre machine actuelle ({2}) ; échec de l'importation." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "Failed to import profile from {0}:" +#~ msgstr "Échec de l'importation du profil depuis le fichier {0} :" + +#~ msgctxt "@window:title" +#~ msgid "Existing Connection" +#~ msgstr "Connexion existante" + +#~ msgctxt "@message:text" +#~ msgid "This printer/group is already added to Cura. Please select another printer/group." +#~ msgstr "Ce groupe / cette imprimante a déjà été ajouté à Cura. Veuillez sélectionner un autre groupe / imprimante." + +#~ msgctxt "@label" +#~ msgid "Enter the IP address or hostname of your printer on the network." +#~ msgstr "Saisissez l'adresse IP ou le nom d'hôte de votre imprimante sur le réseau." + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "Connecter à une imprimante" + +#~ msgctxt "@title" +#~ msgid "Cura Settings Guide" +#~ msgstr "Guide des paramètres de Cura" + +#~ msgctxt "@info:tooltip" +#~ msgid "Zooming towards the mouse is not supported in the orthogonal perspective." +#~ msgstr "Zoom vers la souris n'est pas pris en charge dans la perspective orthogonale." + +#~ msgid "Orthogonal" +#~ msgstr "Orthogonale" + +#~ msgctxt "description" +#~ msgid "Manages network connections to Ultimaker 3 printers." +#~ msgstr "Gère les connexions réseau vers les imprimantes Ultimaker 3." + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "Connexion au réseau UM3" + +#~ msgctxt "description" +#~ msgid "Provides extra information and explanations about settings in Cura, with images and animations." +#~ msgstr "Fournit des informations et explications supplémentaires sur les paramètres de Cura, avec des images et des animations." + +#~ msgctxt "name" +#~ msgid "Settings Guide" +#~ msgstr "Guide des paramètres" + +#~ msgctxt "@item:inmenu" +#~ msgid "Cura Settings Guide" +#~ msgstr "Guide des paramètres de Cura" + +#~ msgctxt "@info:generic" +#~ msgid "Settings have been changed to match the current availability of extruders: [%s]" +#~ msgstr "Les paramètres ont été modifiés pour correspondre aux extrudeuses actuellement disponibles : [%s]" + +#~ msgctxt "@title:groupbox" +#~ msgid "User description" +#~ msgstr "Description de l'utilisateur" + +#~ msgctxt "@info" +#~ msgid "These options are not available because you are monitoring a cloud printer." +#~ msgstr "Ces options ne sont pas disponibles car vous surveillez une imprimante cloud." + +#~ msgctxt "@label link to connect manager" +#~ msgid "Go to Cura Connect" +#~ msgstr "Aller à Cura Connect" + +#~ msgctxt "@info" +#~ msgid "All jobs are printed." +#~ msgstr "Toutes les tâches ont été imprimées." + +#~ msgctxt "@label link to connect manager" +#~ msgid "View print history" +#~ msgstr "Voir l'historique d'impression" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "Pour imprimer directement sur votre imprimante sur le réseau, assurez-vous que votre imprimante est connectée au réseau via un câble réseau ou en connectant votre imprimante à votre réseau Wi-Fi. Si vous ne connectez pas Cura avec votre imprimante, vous pouvez utiliser une clé USB pour transférer les fichiers g-code sur votre imprimante.\n" +#~ "\n" +#~ "Sélectionnez votre imprimante dans la liste ci-dessous :" + +#~ msgctxt "@info" +#~ msgid "" +#~ "Please make sure your printer has a connection:\n" +#~ "- Check if the printer is turned on.\n" +#~ "- Check if the printer is connected to the network." +#~ msgstr "" +#~ "Assurez-vous que votre imprimante est connectée :\n" +#~ "- Vérifiez si l'imprimante est sous tension.\n" +#~ "- Vérifiez si l'imprimante est connectée au réseau." + +#~ msgctxt "@option:check" +#~ msgid "See only current build plate" +#~ msgstr "Afficher uniquement le plateau actuel" + +#~ msgctxt "@action:button" +#~ msgid "Arrange to all build plates" +#~ msgstr "Réorganiser sur tous les plateaux" + +#~ msgctxt "@action:button" +#~ msgid "Arrange current build plate" +#~ msgstr "Réorganiser le plateau actuel" + +#~ msgctxt "description" +#~ msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." +#~ msgstr "Permet de sauvegarder la tranche résultante sous forme de fichier X3G, pour prendre en charge les imprimantes qui lisent ce format (Malyan, Makerbot et autres imprimantes basées sur Sailfish)." + +#~ msgctxt "name" +#~ msgid "X3GWriter" +#~ msgstr "X3GWriter" + +#~ msgctxt "description" +#~ msgid "Reads SVG files as toolpaths, for debugging printer movements." +#~ msgstr "Lit les fichiers SVG comme des Toolpaths, pour déboguer les mouvements de l'imprimante." + +#~ msgctxt "name" +#~ msgid "SVG Toolpath Reader" +#~ msgstr "Lecteur de Toolpaths SVG" + #~ msgctxt "@item:inmenu" #~ msgid "Changelog" #~ msgstr "Récapitulatif des changements" diff --git a/resources/i18n/fr_FR/fdmextruder.def.json.po b/resources/i18n/fr_FR/fdmextruder.def.json.po index c855187d83..45dd52774f 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.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+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 b201e470e2..e21e5ea1e6 100644 --- a/resources/i18n/fr_FR/fdmprinter.def.json.po +++ b/resources/i18n/fr_FR/fdmprinter.def.json.po @@ -5,12 +5,12 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" -"PO-Revision-Date: 2019-03-13 14:00+0200\n" -"Last-Translator: Bothof \n" -"Language-Team: French\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" +"PO-Revision-Date: 2019-07-29 15:51+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: French , French \n" "Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -215,6 +215,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "Si la machine a un plateau chauffé présent." +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "Est dotée de la stabilisation de la température du volume d'impression" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "Si la machine est capable de stabiliser la température du volume d'impression." + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -238,7 +248,7 @@ msgstr "Nombre de trains d'extrudeuse. Un train d'extrudeuse est la combinaison #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders That Are Enabled" -msgstr "" +msgstr "Nombre d'extrudeuses activées" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -248,7 +258,7 @@ msgstr "Nombre de trains d'extrusion activés ; automatiquement défini dans le #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer Nozzle Diameter" -msgstr "" +msgstr "Diamètre extérieur de la buse" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter description" @@ -258,7 +268,7 @@ msgstr "Le diamètre extérieur de la pointe de la buse." #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle Length" -msgstr "" +msgstr "Longueur de la buse" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance description" @@ -268,7 +278,7 @@ msgstr "La différence de hauteur entre la pointe de la buse et la partie la plu #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle Angle" -msgstr "" +msgstr "Angle de la buse" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle description" @@ -278,7 +288,7 @@ msgstr "L'angle entre le plan horizontal et la partie conique juste au-dessus de #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat Zone Length" -msgstr "" +msgstr "Longueur de la zone chauffée" #: fdmprinter.def.json msgctxt "machine_heat_zone_length description" @@ -308,7 +318,7 @@ msgstr "Contrôler ou non la température depuis Cura. Désactivez cette option #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat Up Speed" -msgstr "" +msgstr "Vitesse de chauffage" #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed description" @@ -318,7 +328,7 @@ msgstr "La vitesse (°C/s) à laquelle la buse chauffe, sur une moyenne de la pl #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool Down Speed" -msgstr "" +msgstr "Vitesse de refroidissement" #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed description" @@ -337,8 +347,8 @@ msgstr "La durée minimale pendant laquelle une extrudeuse doit être inactive a #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" -msgstr "" +msgid "G-code Flavor" +msgstr "Parfum G-Code" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" @@ -403,7 +413,7 @@ msgstr "S'il faut utiliser les commandes de rétraction du firmware (G10 / G11 #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed Areas" -msgstr "" +msgstr "Zones interdites" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" @@ -423,7 +433,7 @@ msgstr "Une liste de polygones comportant les zones dans lesquelles le bec n'a p #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine Head Polygon" -msgstr "" +msgstr "Polygone de la tête de machine" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -433,7 +443,7 @@ msgstr "Une silhouette 2D de la tête d'impression (sans les capuchons du ventil #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine Head & Fan Polygon" -msgstr "" +msgstr "Polygone de la tête de la machine et du ventilateur" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -443,7 +453,7 @@ msgstr "Une silhouette 2D de la tête d'impression (avec les capuchons du ventil #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry Height" -msgstr "" +msgstr "Hauteur du portique" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -473,7 +483,7 @@ msgstr "Le diamètre intérieur de la buse. Modifiez ce paramètre si vous utili #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset with Extruder" -msgstr "" +msgstr "Décalage avec extrudeuse" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -1223,7 +1233,7 @@ msgstr "Imprimer les parties du modèle qui sont horizontalement plus fines que #: fdmprinter.def.json msgctxt "xy_offset label" msgid "Horizontal Expansion" -msgstr "Vitesse d’impression horizontale" +msgstr "Expansion horizontale" #: fdmprinter.def.json msgctxt "xy_offset description" @@ -1270,6 +1280,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "Angle le plus aigu" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "Position de la jointure en Z" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "La position près de laquelle démarre l'impression de chaque partie dans une couche." + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "Arrière gauche" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "Précédent" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "Arrière droit" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "Droite" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "Avant droit" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "Avant" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "Avant gauche" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "Gauche" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1297,8 +1357,8 @@ msgstr "Préférence de jointure d'angle" #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "Vérifie si les angles du contour du modèle influencent l'emplacement de la jointure. « Aucune » signifie que les angles n'ont aucune influence sur l'emplacement de la jointure. « Masquer jointure » génère généralement le positionnement de la jointure sur un angle intérieur. « Exposer jointure » génère généralement le positionnement de la jointure sur un angle extérieur. « Masquer ou exposer jointure » génère généralement le positionnement de la jointure sur un angle intérieur ou extérieur." +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "Vérifie si les angles du contour du modèle influencent l'emplacement de la jointure. « Aucune » signifie que les angles n'ont aucune influence sur l'emplacement de la jointure. « Masquer la jointure » génère le positionnement de la jointure sur un angle intérieur. « Exposer la jointure » génère le positionnement de la jointure sur un angle extérieur. « Masquer ou exposer la jointure » génère le positionnement de la jointure sur un angle intérieur ou extérieur. « Jointure intelligente » autorise les angles intérieurs et extérieurs, mais choisit plus fréquemment les angles intérieurs, le cas échéant." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1320,6 +1380,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "Masquer ou exposer jointure" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "Masquage intelligent" + #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" @@ -1332,13 +1397,13 @@ msgstr "Si cette option est activée, les coordonnées de la jointure z sont rel #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "Ignorer les petits trous en Z" +msgid "No Skin in Z Gaps" +msgstr "Aucune couche dans les trous en Z" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "Quand le modèle présente de petits trous verticaux, environ 5 % de temps de calcul supplémentaire peut être alloué à la génération de couches du dessus et du dessous dans ces espaces étroits. Dans ce cas, désactivez ce paramètre." +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "Lorsque le modèle comporte de petits trous verticaux de quelques couches seulement, il doit normalement y avoir une couche autour de celles-ci dans l'espace étroit. Activez ce paramètre pour ne pas générer de couche si le trou vertical est très petit. Cela améliore le temps d'impression et le temps de découpage, mais laisse techniquement le remplissage exposé à l'air." #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1357,8 +1422,9 @@ msgstr "Activer l'étirage" #: fdmprinter.def.json 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." +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." #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1450,6 +1516,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "Le changement instantané maximal de vitesse lors de l'étirage." +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "Pourcentage de chevauchement de la couche extérieure" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Ajuster le degré de chevauchement entre les parois et les (extrémités des) lignes centrales de la couche extérieure, en pourcentage de la largeur des lignes de la couche extérieure et de la paroi intérieure. Un chevauchement léger permet de relier fermement les parois à la couche extérieure. Notez que, si la largeur de la couche extérieure est égale à celle de la ligne de la paroi, un pourcentage supérieur à 50 % peut déjà faire dépasser la couche extérieure de la paroi, car dans ce cas la position de la buse de l'extrudeuse peut déjà atteindre le milieu de la paroi." + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "Chevauchement de la couche extérieure" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Ajuster le degré de chevauchement entre les parois et les (extrémités des) lignes centrales de la couche extérieure. Un chevauchement léger permet de relier fermement les parois à la couche extérieure. Notez que, si la largeur de la couche extérieure est égale à celle de la ligne de la paroi, une valeur supérieure à la moitié de la largeur de la paroi peut déjà faire dépasser la couche extérieure de la paroi, car dans ce cas la position de la buse de l'extrudeuse peut déjà atteindre le milieu de la paroi." + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1615,6 +1701,17 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Le motif de remplissage est décalé de cette distance sur l'axe Y." +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +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." + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1669,26 +1766,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "Le degré de chevauchement entre le remplissage et les parois. Un léger chevauchement permet de lier fermement les parois au remplissage." -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "Pourcentage de chevauchement de la couche extérieure" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Ajuster le degré de chevauchement entre les parois et les (extrémités des) lignes centrales de la couche extérieure, en pourcentage de la largeur des lignes de la couche extérieure et de la paroi intérieure. Un chevauchement léger permet de relier fermement les parois à la couche extérieure. Notez que, si la largeur de la couche extérieure est égale à celle de la ligne de la paroi, un pourcentage supérieur à 50 % peut déjà faire dépasser la couche extérieure de la paroi, car dans ce cas la position de la buse de l'extrudeuse peut déjà atteindre le milieu de la paroi." - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "Chevauchement de la couche extérieure" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Ajuster le degré de chevauchement entre les parois et les (extrémités des) lignes centrales de la couche extérieure. Un chevauchement léger permet de relier fermement les parois à la couche extérieure. Notez que, si la largeur de la couche extérieure est égale à celle de la ligne de la paroi, une valeur supérieure à la moitié de la largeur de la paroi peut déjà faire dépasser la couche extérieure de la paroi, car dans ce cas la position de la buse de l'extrudeuse peut déjà atteindre le milieu de la paroi." - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1872,12 +1949,12 @@ msgstr "La température par défaut utilisée pour l'impression. Il doit s'agir #: fdmprinter.def.json msgctxt "build_volume_temperature label" msgid "Build Volume Temperature" -msgstr "" +msgstr "Température du volume d'impression" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." -msgstr "" +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." +msgstr "La température de l'environnement d'impression. Si cette valeur est 0, la température du volume d'impression ne sera pas ajustée." #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1989,6 +2066,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "Taux de contraction en pourcentage." +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "Matériau cristallin" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "Ce matériau se casse-t-il proprement lorsqu'il est chauffé (cristallin) ou est-ce le type qui produit de longues chaînes polymères entrelacées (non cristallines) ?" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "Position anti-suintage rétractée" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "Jusqu'où le matériau doit être rétracté avant qu'il cesse de suinter." + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "Vitesse de rétraction de l'anti-suintage" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "À quelle vitesse le matériau doit-il être rétracté lors d'un changement de filament pour empêcher le suintage." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "Préparation de rupture Position rétractée" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "Jusqu'où le filament peut être étiré avant qu'il ne se casse, pendant qu'il est chauffé." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "Vitesse de rétraction de préparation de rupture" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "La vitesse à laquelle le filament doit être rétracté juste avant de le briser dans une rétraction." + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "Position rétractée de rupture" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "Jusqu'où rétracter le filament afin de le casser proprement." + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "Vitesse de rétraction de rupture" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "La vitesse à laquelle rétracter le filament afin de le rompre proprement." + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "Température de rupture" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "La température à laquelle le filament est cassé pour une rupture propre." + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -1999,6 +2156,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "Compensation du débit : la quantité de matériau extrudée est multipliée par cette valeur." +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "Débit de paroi" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "Compensation de débit sur les lignes de la paroi." + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "Débit de paroi externe" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "Compensation de débit sur la ligne de la paroi la plus à l'extérieur." + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "Débit de paroi(s) interne(s)" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "Compensation de débit sur les lignes de la paroi pour toutes les lignes de paroi, à l'exception de la ligne la plus externe." + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "Débit du dessus/dessous" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "Compensation de débit sur les lignes du dessus/dessous." + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "Débit de la surface du dessus" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "Compensation de débit sur les lignes des zones en haut de l'impression." + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "Débit de remplissage" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "Compensation de débit sur les lignes de remplissage." + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "Débit de la jupe/bordure" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "Compensation de débit sur les lignes de jupe ou bordure." + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "Débit du support" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "Compensation de débit sur les lignes de support." + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "Débit de l'interface de support" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "Compensation de débit sur les lignes de plafond ou de bas de support." + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "Débit du plafond de support" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "Compensation de débit sur les lignes du plafond de support." + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "Débit du bas de support" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "Compensation de débit sur les lignes de bas de support." + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "Débit de la tour primaire" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "Compensation de débit sur les lignes de la tour primaire." + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2116,8 +2393,8 @@ msgstr "Limiter les rétractations du support" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." -msgstr "Omettre la rétraction lors du passage entre supports en ligne droite. L'activation de ce paramètre permet de gagner du temps lors de l'impression, mais peut conduire à un cordage excessif à l'intérieur de la structure de support." +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." +msgstr "Omettre la rétraction lors du passage entre supports en ligne droite. L'activation de ce paramètre permet de gagner du temps lors de l'impression, mais peut conduire à un stringing excessif à l'intérieur de la structure de support." #: fdmprinter.def.json msgctxt "material_standby_temperature label" @@ -2169,6 +2446,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "La vitesse à laquelle le filament est poussé vers l'arrière après une rétraction de changement de buse." +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "Montant de l'amorce supplémentaire lors d'un changement de buse" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "Matériel supplémentaire à amorcer après le changement de buse." + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2360,14 +2647,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "La vitesse à laquelle la jupe et la bordure sont imprimées. Normalement, cette vitesse est celle de la couche initiale, mais il est parfois nécessaire d’imprimer la jupe ou la bordure à une vitesse différente." #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "Vitesse Z maximale" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "Vitesse du décalage en Z" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "La vitesse maximale à laquelle le plateau se déplace. Définir cette valeur sur zéro impose à l'impression d'utiliser les valeurs par défaut du firmware pour la vitesse z maximale." +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "La vitesse à laquelle le mouvement vertical en Z est effectué pour des décalages en Z. Cette vitesse est généralement inférieure à la vitesse d'impression car le plateau ou le portique de la machine est plus difficile à déplacer." #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2869,16 +3156,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "La distance entre la buse et les pièces déjà imprimées lors du contournement pendant les déplacements." -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "Démarrer les couches avec la même partie" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "Dans chaque couche, démarre l'impression de l'objet à proximité du même point, de manière à ce que nous ne commencions pas une nouvelle couche en imprimant la pièce avec laquelle la couche précédente s'est terminée. Cela renforce les porte-à-faux et les petites pièces, mais augmente le temps d'impression." - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -2942,12 +3219,12 @@ msgstr "Une fois que la machine est passée d'une extrudeuse à l'autre, le plat #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height label" msgid "Z Hop After Extruder Switch Height" -msgstr "" +msgstr "Décalage en Z après changement de hauteur d'extrudeuse" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height description" msgid "The height difference when performing a Z Hop after extruder switch." -msgstr "" +msgstr "La différence de hauteur lors de la réalisation d'un décalage en Z après changement d'extrudeuse." #: fdmprinter.def.json msgctxt "cooling label" @@ -3222,7 +3499,7 @@ msgstr "Entrecroisé" #: fdmprinter.def.json msgctxt "support_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "Gyroïde" #: fdmprinter.def.json msgctxt "support_wall_count label" @@ -3285,14 +3562,16 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "Distance entre les lignes de la structure de support de la couche initiale imprimée. Ce paramètre est calculé en fonction de la densité du support." #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "Direction de ligne de remplissage du support" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." -msgstr "Orientation du motif de remplissage pour les supports. Le motif de remplissage du support pivote dans le plan horizontal." +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é)." #: fdmprinter.def.json msgctxt "support_brim_enable label" @@ -3421,8 +3700,8 @@ msgstr "Distance de jointement des supports" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." -msgstr "La distance maximale entre les supports dans les directions X/Y. Lorsque des supports séparés sont plus rapprochés que cette valeur, ils fusionnent." +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." +msgstr "La distance maximale entre les supports dans les directions X/Y. Lorsque des modèle séparés sont plus rapprochés que cette valeur, ils fusionnent." #: fdmprinter.def.json msgctxt "support_offset label" @@ -3759,6 +4038,45 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "Quantité de décalage appliqué aux bas du support." +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +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)." + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +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)." + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +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)." + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3800,14 +4118,14 @@ msgid "The diameter of a special tower." msgstr "Le diamètre d’une tour spéciale." #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "Diamètre minimal" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "Diamètre maximal supporté par la tour" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." -msgstr "Le diamètre minimal sur les axes X/Y d’une petite zone qui doit être soutenue par une tour de soutien spéciale." +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "Le diamètre maximal sur les axes X/Y d’une petite zone qui doit être soutenue par une tour de soutien spéciale." #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" @@ -4303,16 +4621,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "Imprimer une tour à côté de l'impression qui sert à amorcer le matériau après chaque changement de buse." -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "Tour primaire circulaire" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "Réaliser la tour primaire en forme circulaire." - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4353,16 +4661,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "Les coordonnées Y de la position de la tour primaire." -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "Débit de la tour primaire" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "Compensation du débit : la quantité de matériau extrudée est multipliée par cette valeur." - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4376,12 +4674,12 @@ msgstr "Après l'impression de la tour primaire à l'aide d'une buse, nettoyer l #: fdmprinter.def.json msgctxt "prime_tower_brim_enable label" msgid "Prime Tower Brim" -msgstr "" +msgstr "Bordure de la tour primaire" #: fdmprinter.def.json msgctxt "prime_tower_brim_enable description" msgid "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type." -msgstr "" +msgstr "Les tours primaires peuvent avoir besoin de l'adhérence supplémentaire d'une bordure, même si le modèle n'en a pas besoin. Ne peut actuellement pas être utilisé avec le type d'adhérence « Raft » (radeau)." #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4665,8 +4963,8 @@ msgstr "Lisser les contours spiralisés" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." -msgstr "Lisser les contours spiralisés pour réduire la visibilité de la jointure en Z (la jointure en Z doit être à peine visible sur l'impression mais sera toujours visible dans la vue en couches). Veuillez remarquer que le lissage aura tendance à estomper les détails fins de la surface." +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgstr "Lisser les contours spiralisés pour réduire la visibilité de la jointure en Z (la jointure en Z doit être à peine visible sur l'impression mais sera toujours visible dans la vue en couches). Veuillez remarquer que le lissage aura tendance à estomper les détails très fins de la surface." #: fdmprinter.def.json msgctxt "relative_extrusion label" @@ -4901,12 +5199,14 @@ msgstr "Taille minimale d'un segment de ligne de déplacement après la découpe #: fdmprinter.def.json msgctxt "meshfix_maximum_deviation label" msgid "Maximum Deviation" -msgstr "" +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." -msgstr "" +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" @@ -5165,8 +5465,8 @@ msgstr "Activer les supports coniques" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "Fonctionnalité expérimentale : rendre les aires de support plus petites en bas qu'au niveau du porte-à-faux à supporter." +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "Rendre les aires de support plus petites en bas qu'au niveau du porte-à-faux à supporter." #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5510,7 +5810,7 @@ msgstr "Distance entre la buse et les lignes descendantes horizontalement. Un es #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled label" msgid "Use Adaptive Layers" -msgstr "" +msgstr "Utiliser des couches adaptatives" #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled description" @@ -5520,7 +5820,7 @@ msgstr "Cette option calcule la hauteur des couches en fonction de la forme du m #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation label" msgid "Adaptive Layers Maximum Variation" -msgstr "" +msgstr "Variation maximale des couches adaptatives" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" @@ -5530,7 +5830,7 @@ msgstr "Hauteur maximale autorisée par rapport à la couche de base." #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" msgid "Adaptive Layers Variation Step Size" -msgstr "" +msgstr "Taille des étapes de variation des couches adaptatives" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step description" @@ -5540,7 +5840,7 @@ 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 "" +msgstr "Limite des couches adaptatives" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" @@ -5760,152 +6060,194 @@ msgstr "Vitesse du ventilateur en pourcentage à utiliser pour l'impression de l #: fdmprinter.def.json msgctxt "clean_between_layers label" msgid "Wipe Nozzle Between Layers" -msgstr "" +msgstr "Essuyer la buse entre les couches" #: fdmprinter.def.json msgctxt "clean_between_layers description" msgid "Whether to include nozzle wipe G-Code between layers. Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working." -msgstr "" +msgstr "Inclure ou non le G-Code d'essuyage de la buse entre les couches. L'activation de ce paramètre peut influencer le comportement de la rétraction lors du changement de couche. Veuillez utiliser les paramètres de rétraction d'essuyage pour contrôler la rétraction aux couches où le script d'essuyage sera exécuté." #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe label" msgid "Material Volume Between Wipes" -msgstr "" +msgstr "Volume de matériau entre les essuyages" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe description" msgid "Maximum material, that can be extruded before another nozzle wipe is initiated." -msgstr "" +msgstr "Le volume maximum de matériau qui peut être extrudé avant qu'un autre essuyage de buse ne soit lancé." #: fdmprinter.def.json msgctxt "wipe_retraction_enable label" msgid "Wipe Retraction Enable" -msgstr "" +msgstr "Activation de la rétraction d'essuyage" #: fdmprinter.def.json msgctxt "wipe_retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area." -msgstr "" +msgstr "Rétracte le filament quand la buse se déplace vers une zone non imprimée." #: fdmprinter.def.json msgctxt "wipe_retraction_amount label" msgid "Wipe Retraction Distance" -msgstr "" +msgstr "Distance de rétraction d'essuyage" #: fdmprinter.def.json msgctxt "wipe_retraction_amount description" msgid "Amount to retract the filament so it does not ooze during the wipe sequence." -msgstr "" +msgstr "La distance de rétraction du filament afin qu'il ne suinte pas pendant la séquence d'essuyage." #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount label" msgid "Wipe Retraction Extra Prime Amount" -msgstr "" +msgstr "Degré supplémentaire de rétraction d'essuyage primaire" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount description" msgid "Some material can ooze away during a wipe travel moves, which can be compensated for here." -msgstr "" +msgstr "Du matériau peut suinter pendant un déplacement d'essuyage, ce qui peut être compensé ici." #: fdmprinter.def.json msgctxt "wipe_retraction_speed label" msgid "Wipe Retraction Speed" -msgstr "" +msgstr "Vitesse de rétraction d'essuyage" #: fdmprinter.def.json msgctxt "wipe_retraction_speed description" msgid "The speed at which the filament is retracted and primed during a wipe retraction move." -msgstr "" +msgstr "La vitesse à laquelle le filament est rétracté et préparé pendant un déplacement de rétraction d'essuyage." #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed label" msgid "Wipe Retraction Retract Speed" -msgstr "" +msgstr "Vitesse de rétraction d'essuyage" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed description" msgid "The speed at which the filament is retracted during a wipe retraction move." -msgstr "" +msgstr "La vitesse à laquelle le filament est rétracté pendant un déplacement de rétraction d'essuyage." #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "Vitesse de rétraction primaire" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed description" msgid "The speed at which the filament is primed during a wipe retraction move." -msgstr "" +msgstr "La vitesse à laquelle le filament est préparé pendant un déplacement de rétraction d'essuyage." #: fdmprinter.def.json msgctxt "wipe_pause label" msgid "Wipe Pause" -msgstr "" +msgstr "Pause d'essuyage" #: fdmprinter.def.json msgctxt "wipe_pause description" msgid "Pause after the unretract." -msgstr "" +msgstr "Pause après l'irrétraction." #: fdmprinter.def.json msgctxt "wipe_hop_enable label" msgid "Wipe Z Hop When Retracted" -msgstr "" +msgstr "Décalage en Z d'essuyage lors d’une rétraction" #: fdmprinter.def.json msgctxt "wipe_hop_enable description" msgid "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." -msgstr "" +msgstr "À chaque rétraction, le plateau est abaissé pour créer un espace entre la buse et l'impression. Cela évite que la buse ne touche l'impression pendant les déplacements, réduisant ainsi le risque de heurter l'impression à partir du plateau." #: fdmprinter.def.json msgctxt "wipe_hop_amount label" msgid "Wipe Z Hop Height" -msgstr "" +msgstr "Hauteur du décalage en Z d'essuyage" #: fdmprinter.def.json msgctxt "wipe_hop_amount description" msgid "The height difference when performing a Z Hop." -msgstr "" +msgstr "La différence de hauteur lors de la réalisation d'un décalage en Z." #: fdmprinter.def.json msgctxt "wipe_hop_speed label" msgid "Wipe Hop Speed" -msgstr "" +msgstr "Vitesse du décalage d'essuyage" #: fdmprinter.def.json msgctxt "wipe_hop_speed description" msgid "Speed to move the z-axis during the hop." -msgstr "" +msgstr "Vitesse de déplacement de l'axe Z pendant le décalage." #: fdmprinter.def.json msgctxt "wipe_brush_pos_x label" msgid "Wipe Brush X Position" -msgstr "" +msgstr "Position X de la brosse d'essuyage" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x description" msgid "X location where wipe script will start." -msgstr "" +msgstr "Emplacement X où le script d'essuyage démarrera." #: fdmprinter.def.json msgctxt "wipe_repeat_count label" msgid "Wipe Repeat Count" -msgstr "" +msgstr "Nombre de répétitions d'essuyage" #: fdmprinter.def.json msgctxt "wipe_repeat_count description" msgid "Number of times to move the nozzle across the brush." -msgstr "" +msgstr "Le nombre de déplacements de la buse à travers la brosse." #: fdmprinter.def.json msgctxt "wipe_move_distance label" msgid "Wipe Move Distance" -msgstr "" +msgstr "Distance de déplacement d'essuyage" #: fdmprinter.def.json msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." -msgstr "" +msgstr "La distance de déplacement de la tête d'avant en arrière à travers la brosse." + +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "Taille maximale des petits trous" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "Les trous et les contours des pièces dont le diamètre est inférieur à celui-ci seront imprimés en utilisant l'option Vitesse de petite structure." + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "Longueur max de petite structure" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "Les contours des structures dont le diamètre est inférieur à cette longueur seront imprimés en utilisant l'option Vitesse de petite structure." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +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." +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" + +#: 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 "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." #: fdmprinter.def.json msgctxt "command_line_settings label" @@ -5967,6 +6309,90 @@ 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 "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." + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "Démarrer les couches avec la même partie" + +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "Dans chaque couche, démarre l'impression de l'objet à proximité du même point, de manière à ce que nous ne commencions pas une nouvelle couche en imprimant la pièce avec laquelle la couche précédente s'est terminée. Cela renforce les porte-à-faux et les petites pièces, mais augmente le temps d'impression." + +#~ msgctxt "support_infill_angles description" +#~ msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +#~ msgstr "Orientation du motif de remplissage pour les supports. Le motif de remplissage du support pivote dans le plan horizontal." + +#~ 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." +#~ 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." + +#~ msgctxt "machine_gcode_flavor label" +#~ msgid "G-code Flavour" +#~ msgstr "Parfum G-Code" + +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "Vérifie si les angles du contour du modèle influencent l'emplacement de la jointure. « Aucune » signifie que les angles n'ont aucune influence sur l'emplacement de la jointure. « Masquer jointure » génère généralement le positionnement de la jointure sur un angle intérieur. « Exposer jointure » génère généralement le positionnement de la jointure sur un angle extérieur. « Masquer ou exposer jointure » génère généralement le positionnement de la jointure sur un angle intérieur ou extérieur." + +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "Ignorer les petits trous en Z" + +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "Quand le modèle présente de petits trous verticaux, environ 5 % de temps de calcul supplémentaire peut être alloué à la génération de couches du dessus et du dessous dans ces espaces étroits. Dans ce cas, désactivez ce paramètre." + +#~ msgctxt "build_volume_temperature description" +#~ msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +#~ msgstr "La température utilisée pour le volume d'impression. Si cette valeur est 0, la température du volume d'impression ne sera pas ajustée." + +#~ msgctxt "limit_support_retractions description" +#~ msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +#~ msgstr "Omettre la rétraction lors du passage entre supports en ligne droite. L'activation de ce paramètre permet de gagner du temps lors de l'impression, mais peut conduire à un cordage excessif à l'intérieur de la structure de support." + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "Vitesse Z maximale" + +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "La vitesse maximale à laquelle le plateau se déplace. Définir cette valeur sur zéro impose à l'impression d'utiliser les valeurs par défaut du firmware pour la vitesse z maximale." + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "La distance maximale entre les supports dans les directions X/Y. Lorsque des supports séparés sont plus rapprochés que cette valeur, ils fusionnent." + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "Diamètre minimal" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "Le diamètre minimal sur les axes X/Y d’une petite zone qui doit être soutenue par une tour de soutien spéciale." + +#~ msgctxt "prime_tower_circular label" +#~ msgid "Circular Prime Tower" +#~ msgstr "Tour primaire circulaire" + +#~ msgctxt "prime_tower_circular description" +#~ msgid "Make the prime tower as a circular shape." +#~ msgstr "Réaliser la tour primaire en forme circulaire." + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "Compensation du débit : la quantité de matériau extrudée est multipliée par cette valeur." + +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "Lisser les contours spiralisés pour réduire la visibilité de la jointure en Z (la jointure en Z doit être à peine visible sur l'impression mais sera toujours visible dans la vue en couches). Veuillez remarquer que le lissage aura tendance à estomper les détails fins de la surface." + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "Fonctionnalité expérimentale : rendre les aires de support plus petites en bas qu'au niveau du porte-à-faux à supporter." + #~ msgctxt "extruders_enabled_count label" #~ msgid "Number of Extruders that are enabled" #~ msgstr "Nombre d'extrudeuses activées" diff --git a/resources/i18n/it_IT/cura.po b/resources/i18n/it_IT/cura.po index 8ffaf40bfc..0d4d32caef 100644 --- a/resources/i18n/it_IT/cura.po +++ b/resources/i18n/it_IT/cura.po @@ -5,12 +5,12 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" -"PO-Revision-Date: 2019-03-14 14:31+0100\n" -"Last-Translator: Bothof \n" -"Language-Team: Italian\n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" +"PO-Revision-Date: 2019-07-29 15:51+0100\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Italian , Italian \n" "Language: it_IT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\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:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "Impostazioni macchina" @@ -85,36 +85,45 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Il profilo è stato appiattito e attivato." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "File AMF" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "Stampa USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Stampa tramite USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Stampa tramite USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "Connesso tramite USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "Stampa tramite USB in corso, la chiusura di Cura interrompe la stampa. Confermare?" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /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/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "Stampa ancora in corso. Cura non può avviare un'altra stampa tramite USB finché la precedente non è stata completata." + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +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" @@ -126,6 +135,11 @@ 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" @@ -160,7 +174,7 @@ msgid "Save to Removable Drive {0}" msgstr "Salva su unità rimovibile {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Non ci sono formati di file disponibili per la scrittura!" @@ -197,10 +211,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/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "Errore" @@ -229,9 +242,9 @@ 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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "Avvertenza" @@ -258,347 +271,149 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Unità rimovibile" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "Stampa sulla rete" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "Stampa sulla rete" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "Collegato alla rete." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "Collegato alla rete. Si prega di approvare la richiesta di accesso sulla stampante." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "Collegato alla rete. Nessun accesso per controllare la stampante." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "Richiesto accesso alla stampante. Approvare la richiesta sulla stampante" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "Stato di autenticazione" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "Stato di autenticazione" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "Riprova" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "Invia nuovamente la richiesta di accesso" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "Accesso alla stampante accettato" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "Nessun accesso per stampare con questa stampante. Impossibile inviare il processo di stampa." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "Richiesta di accesso" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "Invia la richiesta di accesso alla stampante" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "Impossibile avviare un nuovo processo di stampa." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "È presente un problema di configurazione della stampante che rende impossibile l’avvio della stampa. Risolvere il problema prima di continuare." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "Mancata corrispondenza della configurazione" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "Sei sicuro di voler stampare con la configurazione selezionata?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Le configurazioni o la calibrazione della stampante e di Cura non corrispondono. Per ottenere i migliori risultati, sezionare sempre per i PrintCore e i materiali inseriti nella stampante utilizzata." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "Invio nuovi processi (temporaneamente) bloccato, invio in corso precedente processo di stampa." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "Invio dati alla stampante in corso" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "Invio dati" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Annulla" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "Nessun PrintCore caricato nello slot {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "Nessun materiale caricato nello slot {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "PrintCore diverso (Cura: {cura_printcore_name}, Stampante: {remote_printcore_name}) selezionata per estrusore {extruder_id}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "Materiale diverso (Cura: {0}, Stampante: {1}) selezionato per l’estrusore {2}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "Sincronizzazione con la stampante" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "Desideri utilizzare la configurazione corrente della tua stampante in Cura?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "I PrintCore e/o i materiali sulla stampante differiscono da quelli contenuti nel tuo attuale progetto. Per ottenere i risultati migliori, sezionare sempre per i PrintCore e i materiali inseriti nella stampante utilizzata." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "Collegato alla rete" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "Processo di stampa inviato con successo alla stampante." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "Dati inviati" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "Visualizzazione in Controlla" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "La stampante '{printer_name}' ha finito di stampare '{job_name}'." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "Il processo di stampa '{job_name}' è terminato." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "Stampa finita" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "Vuoto" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "Sconosciuto" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "Stampa tramite Cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "Stampa tramite Cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "Collegato tramite Cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "Errore cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "Impossibile esportare il processo di stampa." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "Impossibile caricare i dati sulla stampante." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "domani" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "oggi" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "Si è verificato un errore di collegamento al cloud." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Invia e controlla i processi di stampa ovunque con l’account Ultimaker." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "Non chiedere nuovamente per questa stampante." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "Per iniziare" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Ora è possibile inviare e controllare i processi di stampa ovunque con l’account Ultimaker." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "Collegato!" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "Controlla collegamento" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Collega tramite rete" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" -msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +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 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "Stampa sulla rete" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "Collegato alla rete" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "Attendere che sia stato inviato il processo corrente." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "Errore di stampa" + +#: /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 "Tentativo di connessione a {0} in corso, che non è l'host di un gruppo. È possibile visitare la pagina web per configurarla come host del gruppo." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "Non host del gruppo" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "Configurare il gruppo" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "Invia e controlla i processi di stampa ovunque con l’account Ultimaker." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "Connettiti a Ultimaker Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "Per iniziare" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "Invio di un processo di stampa" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "Caricamento del processo di stampa sulla stampante." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "Processo di stampa inviato con successo alla stampante." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "Dati inviati" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "Si sta tentando di connettersi a una stampante che non esegue Ultimaker Connect. Aggiornare la stampante con il firmware più recente." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "Aggiornare la stampante" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "Cura ha rilevato dei profili di materiale non ancora installati sulla stampante host del gruppo {0}." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "Invio dei materiali alla stampante" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "Impossibile caricare i dati sulla stampante." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "Errore di rete" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "domani" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "oggi" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "Stampa tramite Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "Stampa tramite Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" +msgstr "Collegato tramite Cloud" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Controlla" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "Non è possibile accedere alle informazioni di aggiornamento." @@ -625,12 +440,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Visualizzazione strato" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Cura non visualizza in modo accurato gli strati se la funzione Wire Printing è abilitata" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "Vista simulazione" @@ -685,6 +500,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Immagine GIF" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "Open Compressed Triangle Mesh" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "COLLADA Digital Asset Exchange" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "glTF Binary" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "glTF Embedded JSON" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "Stanford Triangle Format" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "Compressed COLLADA Digital Asset Exchange" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -765,19 +610,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "File 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "Ugello" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "Apri file progetto" @@ -792,18 +637,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "File G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Parsing codice G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "Dettagli codice G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Verifica che il codice G sia idoneo alla tua stampante e alla sua configurazione prima di trasmettere il file. La rappresentazione del codice G potrebbe non essere accurata." @@ -906,16 +751,16 @@ msgstr "Login non riuscito" #: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33 msgctxt "@info:not supported profile" msgid "Not supported" -msgstr "" +msgstr "Non supportato" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 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:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -928,116 +773,109 @@ msgid "Invalid file URL:" msgstr "File URL non valido:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" -msgstr "Le impostazioni sono state modificate in base all’attuale disponibilità di estrusori: [%s]" +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 msgctxt "@info:title" msgid "Settings updated" msgstr "Impostazioni aggiornate" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "Estrusore disabilitato" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, 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:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, 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:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, 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:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "Esportazione riuscita" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, 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:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, 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:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, 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:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, 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:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "La macchina definita nel profilo {0} ({1}) non corrisponde alla macchina corrente ({2}), impossibile importarla." - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Profilo importato correttamente {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, 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:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, 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:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "Profilo personalizzato" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 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:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1086,7 +924,7 @@ msgstr "Skirt" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:84 msgctxt "@tooltip" msgid "Prime Tower" -msgstr "" +msgstr "Torre di innesco" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:85 msgctxt "@tooltip" @@ -1115,7 +953,7 @@ msgctxt "@action:button" msgid "Next" msgstr "Avanti" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1123,22 +961,36 @@ 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/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "Chiudi" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" 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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Annulla" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1155,23 +1007,22 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Tutti i file (*)" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" -msgstr "" +msgstr "Le stampanti riportate di seguito non possono essere collegate perché fanno parte di un gruppo" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" -msgstr "" +msgstr "Stampanti disponibili in rete" #: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689 msgctxt "@label" @@ -1184,12 +1035,12 @@ msgctxt "@label" msgid "Custom" msgstr "Personalizzata" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "L’altezza del volume di stampa è stata ridotta a causa del valore dell’impostazione \"Sequenza di stampa” per impedire la collisione del gantry con i modelli stampati." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "Volume di stampa" @@ -1207,46 +1058,51 @@ msgstr "Tentativo di ripristinare un backup di Cura senza dati o metadati approp #: /home/ruben/Projects/Cura/cura/Backups/Backup.py:125 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that is higher than the current version." -msgstr "" +msgstr "Tentativo di ripristinare un backup di Cura di versione superiore rispetto a quella corrente." #: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationHelpers.py:79 msgctxt "@message" msgid "Could not read response." -msgstr "" +msgstr "Impossibile leggere la risposta." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 msgctxt "@info" msgid "Unable to reach the Ultimaker account server." msgstr "Impossibile raggiungere il server account Ultimaker." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:66 +#: /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." -msgstr "" +msgstr "Fornire i permessi necessari al momento dell'autorizzazione di questa applicazione." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "Si è verificato qualcosa di inatteso durante il tentativo di accesso, riprovare." -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "Moltiplicazione e collocazione degli oggetti" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "Sistemazione oggetti" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Impossibile individuare una posizione nel volume di stampa per tutti gli oggetti" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "Sistemazione oggetto" @@ -1395,48 +1251,48 @@ msgstr "Registri" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" -msgstr "Descrizione utente" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" +msgstr "Descrizione utente (Nota: gli sviluppatori potrebbero non parlare la lingua dell'utente. Se possibile, usare l'inglese)" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "Invia report" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Caricamento macchine in corso..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Impostazione scena in corso..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Caricamento interfaccia in corso..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, 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:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, 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:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Il modello selezionato è troppo piccolo per il caricamento." @@ -1444,103 +1300,108 @@ msgstr "Il modello selezionato è troppo piccolo per il caricamento." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58 msgctxt "@title:label" msgid "Printer Settings" -msgstr "" +msgstr "Impostazioni della stampante" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X (Larghezza)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Profondità)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Altezza)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "Forma del piano di stampa" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" -msgstr "" +msgstr "Origine al centro" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" -msgstr "" +msgstr "Piano riscaldato" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "Volume di stampa riscaldato" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "Versione codice G" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" -msgstr "" +msgstr "Impostazioni della testina di stampa" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "X max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "Y max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" -msgstr "" +msgstr "Altezza gantry" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "Numero di estrusori" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" -msgstr "" +msgstr "Codice G avvio" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" -msgstr "" +msgstr "Codice G fine" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:42 msgctxt "@title:tab" @@ -1550,7 +1411,7 @@ msgstr "Stampante" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:63 msgctxt "@title:label" msgid "Nozzle Settings" -msgstr "" +msgstr "Impostazioni ugello" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:75 msgctxt "@label" @@ -1567,25 +1428,25 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "Scostamento X ugello" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Scostamento Y ugello" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "Numero ventola di raffreddamento" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" -msgstr "" +msgstr "Codice G avvio estrusore" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" -msgstr "" +msgstr "Codice G fine estrusore" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 msgctxt "@action:button" @@ -1593,7 +1454,7 @@ msgid "Install" msgstr "Installazione" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "Installa" @@ -1608,16 +1469,16 @@ msgctxt "@label" msgid "ratings" msgstr "valori" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "Plugin" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "Materiali" @@ -1627,49 +1488,49 @@ msgctxt "@label" msgid "Your rating" msgstr "I tuoi valori" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "Versione" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "Ultimo aggiornamento" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "Autore" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "Download" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "Log in deve essere installato o aggiornato" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" -msgstr "" +msgstr "Acquista bobine di materiale" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "Aggiorna" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "Aggiornamento in corso" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1730,17 +1591,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "Esci da Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "Contributi della comunità" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "Plugin della comunità" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "Materiali generici" @@ -1801,27 +1662,52 @@ msgctxt "@label" msgid "Featured" msgstr "In primo piano" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilità" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +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" +msgstr "Piano di stampa" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "Supporto" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "Qualità" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "Scheda dati tecnici" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "Scheda dati di sicurezza" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "Linee guida di stampa" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "Sito web" @@ -1921,70 +1807,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Aggiornamento firmware non riuscito per firmware mancante." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "Gestione stampanti" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "Vetro" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." -msgstr "Queste opzioni non sono disponibili perché si sta controllando una stampante cloud." +msgid "Please update your printer's firmware to manage the queue remotely." +msgstr "Aggiornare il firmware della stampante per gestire la coda da remoto." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "La webcam non è disponibile perché si sta controllando una stampante cloud." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "Caricamento in corso..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "Non disponibile" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "Non raggiungibile" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "Ferma" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "Senza titolo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "Anonimo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "Richiede modifiche di configurazione" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "Dettagli" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "Stampante non disponibile" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "Primo disponibile" @@ -1994,197 +1886,180 @@ msgctxt "@label" msgid "Queued" msgstr "Coda di stampa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" -msgstr "Vai a Cura Connect" +msgid "Manage in browser" +msgstr "Gestisci nel browser" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "Non sono presenti processi di stampa nella coda. Eseguire lo slicing e inviare un processo per aggiungerne uno." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "Processi di stampa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "Tempo di stampa totale" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "In attesa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "Visualizza cronologia di stampa" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "Collegamento esistente" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "Stampante/gruppo già aggiunto a Cura. Selezionare un’altra stampante o un altro gruppo." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Collega alla stampante in rete" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" -msgstr "" -"Per stampare direttamente sulla stampante in rete, verificare che la stampante desiderata sia collegata alla rete mediante un cavo di rete o mediante collegamento alla rete WIFI. Se si collega Cura alla stampante, è comunque possibile utilizzare una chiavetta USB per trasferire i file codice G alla stampante.\n" -"\n" -"Selezionare la stampante dall’elenco seguente:" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." +msgstr "Per stampare direttamente sulla stampante in rete, verificare che la stampante desiderata sia collegata alla rete mediante un cavo di rete o mediante collegamento alla rete WIFI. Se non si esegue il collegamento di Cura alla stampante, è comunque possibile utilizzare una chiavetta USB per trasferire i file codice G alla stampante." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "Selezionare la stampante dall’elenco seguente:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "Modifica" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "Rimuovi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "Aggiorna" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Se la stampante non è nell’elenco, leggere la guida alla risoluzione dei problemi per la stampa in rete" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "Tipo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /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:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /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:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 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:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 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:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 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:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "Collega" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" -msgstr "" +msgstr "Indirizzo IP non valido" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146 msgctxt "@text" msgid "Please enter a valid IP address." -msgstr "" +msgstr "Inserire un indirizzo IP valido." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "Indirizzo stampante" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." -msgstr "" +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:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "Interrotto" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "Terminato" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "Preparazione in corso..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "Interr. in corso..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "Messa in pausa..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "In pausa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "Ripresa in corso..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "Richiede un'azione" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "Finisce %1 a %2" @@ -2288,73 +2163,65 @@ msgctxt "@action:button" msgid "Override" msgstr "Override" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" msgstr[0] "La stampante assegnata, %1, richiede la seguente modifica di configurazione:" msgstr[1] "La stampante assegnata, %1, richiede le seguenti modifiche di configurazione:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "La stampante %1 è assegnata, ma il processo contiene una configurazione materiale sconosciuta." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "Cambia materiale %1 da %2 a %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "Caricare %3 come materiale %1 (Operazione non annullabile)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." msgstr "Cambia print core %1 da %2 a %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "Cambia piano di stampa a %1 (Operazione non annullabile)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "L’override utilizza le impostazioni specificate con la configurazione stampante esistente. Ciò può causare una stampa non riuscita." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "Alluminio" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "Collega a una stampante" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" "Accertarsi che la stampante sia collegata:\n" "- Controllare se la stampante è accesa.\n" -"- Controllare se la stampante è collegata alla rete." +"- Controllare se la stampante è collegata alla rete.\n" +"- Controllare se è stato effettuato l'accesso per rilevare le stampanti collegate al cloud." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 msgctxt "@info" msgid "Please connect your printer to the network." -msgstr "" +msgstr "Collegare la stampante alla rete." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:156 msgctxt "@label link to technical assistance" @@ -2476,17 +2343,17 @@ msgstr "Maggiori informazioni sulla raccolta di dati anonimi" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:74 msgctxt "@text:window" msgid "Ultimaker Cura collects anonymous data in order to improve the print quality and user experience. Below is an example of all the data that is shared:" -msgstr "" +msgstr "Ultimaker Cura acquisisce dati anonimi per migliorare la qualità di stampa e l'esperienza dell'utente. Di seguito è riportato un esempio dei dati condivisi:" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:109 msgctxt "@text:window" msgid "I don't want to send anonymous data" -msgstr "" +msgstr "Non desidero inviare dati anonimi" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:118 msgctxt "@text:window" msgid "Allow sending anonymous data" -msgstr "" +msgstr "Consenti l'invio di dati anonimi" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2536,7 +2403,7 @@ msgstr "Profondità (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 msgctxt "@info:tooltip" msgid "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model." -msgstr "" +msgstr "Per le litofanie, i pixel scuri devono corrispondere alle posizioni più spesse per bloccare maggiormente il passaggio della luce. Per le mappe con altezze superiori, i pixel più chiari indicano un terreno più elevato, quindi nel modello 3D generato i pixel più chiari devono corrispondere alle posizioni più spesse." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 msgctxt "@item:inlistbox" @@ -2661,7 +2528,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:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "Impostazioni profilo" @@ -2674,19 +2541,19 @@ 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/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 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:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 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:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2858,18 +2725,24 @@ msgid "Previous" msgstr "Precedente" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "Suggerimento" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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" @@ -2989,155 +2862,155 @@ 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:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "Visualizza nome" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "Marchio" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "Tipo di materiale" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "Colore" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "Proprietà" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "Densità" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "Diametro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "Costo del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "Peso del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "Lunghezza del filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "Costo al metro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "Scollega materiale" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "Descrizione" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "Informazioni sull’aderenza" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /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:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "Attiva" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "Crea" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "Duplica" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "Importa" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "Stampante" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "Conferma rimozione" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 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:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "Importa materiale" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 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:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "Esporta materiale" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 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:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "Materiale esportato correttamente su %1" @@ -3178,388 +3051,411 @@ msgid "Unit" msgstr "Unità" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "Generale" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "Interfaccia" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "Lingua:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "Valuta:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "Tema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 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:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "Seziona automaticamente" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "Comportamento del riquadro di visualizzazione" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "Visualizza sbalzo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 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:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 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:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 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:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 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:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 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:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +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 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Zoom verso la direzione del mouse" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 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:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 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:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 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:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 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:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 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:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 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:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 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:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 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:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +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 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "Rendering fotocamera: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "Prospettiva" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "Ortogonale" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "Apertura e salvataggio file" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 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:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "Ridimensiona i modelli troppo grandi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Ridimensiona i modelli eccessivamente piccoli" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 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:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Selezionare i modelli dopo il caricamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 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:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 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:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 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:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 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:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 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:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 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:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "Chiedi sempre" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Apri sempre come progetto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "Importa sempre i modelli" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "Profili" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 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:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /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:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "Elimina sempre le impostazioni modificate" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 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:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "Privacy" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 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:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Controlla aggiornamenti all’avvio" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Invia informazioni di stampa (anonime)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "Ulteriori informazioni" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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:715 +#: /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:720 +#: /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:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "Stampanti" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "Rinomina" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /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:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "Crea" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "Duplica" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "Crea profilo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 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:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplica profilo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "Rinomina profilo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "Importa profilo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "Esporta profilo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Stampante: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /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:413 +#: /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:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 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:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "Elimina le modifiche correnti" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 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:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 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:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "Impostazioni globali" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "Mercato" @@ -3622,33 +3518,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "impostazioni ricerca" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 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:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 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:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide 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 "Don't show this setting" msgstr "Nascondi questa impostazione" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Mantieni visibile questa impostazione" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configura visibilità delle impostazioni..." @@ -3664,32 +3560,32 @@ msgstr "" "\n" "Fare clic per rendere visibili queste impostazioni." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." -msgstr "" +msgstr "Questa impostazione non è utilizzata perché tutte le impostazioni che influenza sono sottoposte a override." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "Influisce su" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Influenzato da" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 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:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 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:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3700,7 +3596,7 @@ msgstr "" "\n" "Fare clic per ripristinare il valore del profilo." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3716,7 +3612,7 @@ msgctxt "@button" msgid "Recommended" msgstr "Consigliata" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "Personalizzata" @@ -3741,12 +3637,12 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Genera strutture per supportare le parti del modello a sbalzo. Senza queste strutture, queste parti collasserebbero durante la stampa." -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "Adesione" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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." @@ -3764,7 +3660,7 @@ msgstr "Sono state modificate alcune impostazioni del profilo. Per modificarle, #: /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 "" +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" @@ -3800,7 +3696,7 @@ 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." -msgstr "" +msgstr "Impostazione di stampa disabilitata. Il file G-code non può essere modificato." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:52 msgctxt "@label" @@ -3832,59 +3728,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "Invia codice G" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "Invia un comando codice G personalizzato alla stampante connessa. Premere ‘invio’ per inviare il comando." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "Estrusore" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "Temperatura target dell'estremità riscaldata. L'estremità riscaldata si riscalderà o raffredderà sino a questo valore di temperatura. Se questo è 0, l'estremità riscaldata verrà spenta." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "La temperatura corrente di questa estremità calda." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "La temperatura di preriscaldo dell’estremità calda." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "Annulla" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "Pre-riscaldo" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "Riscalda l’estremità calda prima della stampa. È possibile continuare a regolare la stampa durante il riscaldamento e non è necessario attendere il riscaldamento dell’estremità calda quando si è pronti per la stampa." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "Il colore del materiale di questo estrusore." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "Il materiale di questo estrusore." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "L’ugello inserito in questo estrusore." @@ -3929,11 +3825,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "Preferiti" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -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" @@ -3949,32 +3840,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "S&tampante" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "Ma&teriale" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Imposta come estrusore attivo" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Abilita estrusore" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Disabilita estrusore" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /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:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "&Profilo" @@ -3984,7 +3875,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "&Posizione fotocamera" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "Visualizzazione fotocamera" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "Prospettiva" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "Ortogonale" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "P&iano di stampa" @@ -4004,17 +3910,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Gestisci Impostazione visibilità..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "&Salva..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "&Esporta..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "Esporta selezione..." @@ -4103,22 +4009,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "Ap&ri recenti" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "Stampa attiva" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "Nome del processo" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "Tempo di stampa" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "Tempo residuo stimato" @@ -4126,12 +4032,17 @@ msgstr "Tempo residuo stimato" #: /home/ruben/Projects/Cura/resources/qml/ViewsSelector.qml:50 msgctxt "@label" msgid "View type" -msgstr "" +msgstr "Visualizza tipo" + +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "Elenco oggetti" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" -msgstr "" +msgstr "Alto %1" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:33 msgctxt "@button" @@ -4160,6 +4071,9 @@ msgid "" "- Store your Ultimaker Cura settings in the cloud for use anywhere\n" "- Get exclusive access to print profiles from leading brands" msgstr "" +"- Invia i processi di stampa alle stampanti Ultimaker esterne alla rete locale\n" +"- Invia le impostazioni Ultimaker Cura nel cloud per usarle ovunque\n" +"- Ottieni l’accesso esclusivo ai profili di stampa dai principali marchi" #: /home/ruben/Projects/Cura/resources/qml/Account/GeneralOperations.qml:78 msgctxt "@button" @@ -4176,32 +4090,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "Nessuna stima di costo disponibile" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "Anteprima" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Sezionamento in corso..." -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" -msgstr "" +msgstr "Sezionamento impossibile" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "Elaborazione in corso" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "Sezionamento" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "Avvia il processo di sezionamento" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "Annulla" @@ -4209,12 +4128,12 @@ msgstr "Annulla" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:31 msgctxt "@label" msgid "Time estimation" -msgstr "" +msgstr "Stima del tempo" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:114 msgctxt "@label" msgid "Material estimation" -msgstr "" +msgstr "Stima del materiale" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:164 msgctxt "@label m for meter" @@ -4236,233 +4155,238 @@ msgctxt "@label" msgid "Preset printers" msgstr "Stampanti preimpostate" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "Aggiungi stampante" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "Gestione stampanti" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "Mostra la Guida ricerca e riparazione dei guasti online" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "Attiva/disattiva schermo intero" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "Esci da schermo intero" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&Annulla" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "Ri&peti" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Esci" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "Visualizzazione 3D" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "Visualizzazione frontale" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "Visualizzazione superiore" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "Visualizzazione lato sinistro" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "Visualizzazione lato destro" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Configura Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Aggiungi stampante..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Gestione stampanti..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Gestione materiali..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Aggiorna il profilo con le impostazioni/esclusioni correnti" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Elimina le modifiche correnti" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&Crea profilo dalle impostazioni/esclusioni correnti..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Gestione profili..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Mostra documentazione &online" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Se&gnala un errore" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" -msgstr "" +msgstr "Scopri le novità" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "Informazioni..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "Cancella modello selezionato" msgstr[1] "Cancella modelli selezionati" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Centra modello selezionato" msgstr[1] "Centra modelli selezionati" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Moltiplica modello selezionato" msgstr[1] "Moltiplica modelli selezionati" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Elimina modello" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "C&entra modello su piattaforma" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Raggruppa modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Separa modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Unisci modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "Mo<iplica modello..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Seleziona tutti i modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Cancellare piano di stampa" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Ricarica tutti i modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Sistema tutti i modelli su tutti i piani di stampa" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Sistema tutti i modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Sistema selezione" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Reimposta tutte le posizioni dei modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Reimposta tutte le trasformazioni dei modelli" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Apri file..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nuovo Progetto..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Mostra cartella di configurazione" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "&Mercato" @@ -4477,52 +4401,52 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Questo pacchetto sarà installato dopo il riavvio." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "Impostazioni" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "Chiusura di Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 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:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /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:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "Installa il pacchetto" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "Apri file" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "Aggiungi stampante" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" -msgstr "" +msgstr "Scopri le novità" #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 msgctxt "@label %1 is filled in with the name of an extruder" @@ -4744,32 +4668,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Salva progetto" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /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:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "Estrusore %1" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & materiale" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" -msgstr "" +msgstr "Materiale" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 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:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "Salva" @@ -4802,158 +4726,158 @@ msgstr "Importa i modelli" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DropDownWidget.qml:93 msgctxt "@label" msgid "Empty" -msgstr "" +msgstr "Vuoto" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:24 msgctxt "@label" msgid "Add a printer" -msgstr "" +msgstr "Aggiungi una stampante" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:39 msgctxt "@label" msgid "Add a networked printer" -msgstr "" +msgstr "Aggiungi una stampante in rete" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:81 msgctxt "@label" msgid "Add a non-networked printer" -msgstr "" +msgstr "Aggiungi una stampante non in rete" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:70 msgctxt "@label" msgid "Add printer by IP address" -msgstr "" +msgstr "Aggiungi stampante per indirizzo IP" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:133 msgctxt "@text" msgid "Place enter your printer's IP address." -msgstr "" +msgstr "Inserisci l'indirizzo IP della stampante." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:158 msgctxt "@button" msgid "Add" -msgstr "" +msgstr "Aggiungi" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:204 msgctxt "@label" msgid "Could not connect to device." -msgstr "" +msgstr "Impossibile connettersi al dispositivo." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:208 msgctxt "@label" msgid "The printer at this address has not responded yet." -msgstr "" +msgstr "La stampante a questo indirizzo non ha ancora risposto." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:240 msgctxt "@label" msgid "This printer cannot be added because it's an unknown printer or it's not the host of a group." -msgstr "" +msgstr "Questa stampante non può essere aggiunta perché è una stampante sconosciuta o non è l'host di un gruppo." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:329 msgctxt "@button" msgid "Back" -msgstr "" +msgstr "Indietro" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:342 msgctxt "@button" msgid "Connect" -msgstr "" +msgstr "Collega" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/FirstStartMachineActionsContent.qml:77 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:123 msgctxt "@button" msgid "Next" -msgstr "" +msgstr "Avanti" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:23 msgctxt "@label" msgid "User Agreement" -msgstr "" +msgstr "Contratto di licenza" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:56 msgctxt "@button" msgid "Agree" -msgstr "" +msgstr "Accetta" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:70 msgctxt "@button" msgid "Decline and close" -msgstr "" +msgstr "Rifiuta e chiudi" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:24 msgctxt "@label" msgid "Help us to improve Ultimaker Cura" -msgstr "" +msgstr "Aiutaci a migliorare Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:57 msgctxt "@text" msgid "Ultimaker Cura collects anonymous data to improve print quality and user experience, including:" -msgstr "" +msgstr "Ultimaker Cura acquisisce dati anonimi per migliorare la qualità di stampa e l'esperienza dell'utente, tra cui:" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:71 msgctxt "@text" msgid "Machine types" -msgstr "" +msgstr "Tipi di macchine" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:77 msgctxt "@text" msgid "Material usage" -msgstr "" +msgstr "Utilizzo dei materiali" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:83 msgctxt "@text" msgid "Number of slices" -msgstr "" +msgstr "Numero di sezionamenti" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:89 msgctxt "@text" msgid "Print settings" -msgstr "" +msgstr "Impostazioni di stampa" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:102 msgctxt "@text" msgid "Data collected by Ultimaker Cura will not contain any personal information." -msgstr "" +msgstr "I dati acquisiti da Ultimaker Cura non conterranno alcuna informazione personale." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:103 msgctxt "@text" msgid "More information" -msgstr "" +msgstr "Ulteriori informazioni" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WhatsNewContent.qml:24 msgctxt "@label" msgid "What's new in Ultimaker Cura" -msgstr "" +msgstr "Scopri le novità in Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:42 msgctxt "@label" msgid "There is no printer found over your network." -msgstr "" +msgstr "Non è stata trovata alcuna stampante sulla rete." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:179 msgctxt "@label" msgid "Refresh" -msgstr "" +msgstr "Aggiorna" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:190 msgctxt "@label" msgid "Add printer by IP" -msgstr "" +msgstr "Aggiungi stampante per IP" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:223 msgctxt "@label" msgid "Troubleshooting" -msgstr "" +msgstr "Ricerca e riparazione dei guasti" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" -msgstr "" +msgstr "Nome stampante" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" -msgstr "" +msgstr "Assegna un nome alla stampante" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:36 msgctxt "@label" @@ -4963,37 +4887,37 @@ msgstr "Ultimaker Cloud" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:77 msgctxt "@text" msgid "The next generation 3D printing workflow" -msgstr "" +msgstr "Flusso di stampa 3D di ultima generazione" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:94 msgctxt "@text" msgid "- Send print jobs to Ultimaker printers outside your local network" -msgstr "" +msgstr "- Invia i processi di stampa alle stampanti Ultimaker esterne alla rete locale" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:97 msgctxt "@text" msgid "- Store your Ultimaker Cura settings in the cloud for use anywhere" -msgstr "" +msgstr "- Memorizza le impostazioni Ultimaker Cura nel cloud per usarle ovunque" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:100 msgctxt "@text" msgid "- Get exclusive access to print profiles from leading brands" -msgstr "" +msgstr "- Ottieni l'accesso esclusivo ai profili di stampa dai principali marchi" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:119 msgctxt "@button" msgid "Finish" -msgstr "" +msgstr "Fine" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:128 msgctxt "@button" msgid "Create an account" -msgstr "" +msgstr "Crea un account" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:29 msgctxt "@label" msgid "Welcome to Ultimaker Cura" -msgstr "" +msgstr "Benvenuto in Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:47 msgctxt "@text" @@ -5001,26 +4925,13 @@ msgid "" "Please follow these steps to set up\n" "Ultimaker Cura. This will only take a few moments." msgstr "" +"Segui questa procedura per configurare\n" +"Ultimaker Cura. Questa operazione richiederà solo pochi istanti." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:58 msgctxt "@button" msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "Vedi solo il piano di stampa corrente" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "Sistema su tutti i piani di stampa" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "Sistema il piano di stampa corrente" +msgstr "Per iniziare" #: MachineSettingsAction/plugin.json msgctxt "description" @@ -5105,12 +5016,22 @@ msgstr "Aggiornamento firmware" #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattened quality changes profile." -msgstr "" +msgstr "Crea un profilo appiattito di modifiche di qualità." #: ProfileFlattener/plugin.json msgctxt "name" msgid "Profile Flattener" -msgstr "" +msgstr "Appiattitore di profilo" + +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "Fornisce il supporto per la lettura di file 3MF." + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "Lettore 3MF" #: USBPrinting/plugin.json msgctxt "description" @@ -5122,16 +5043,6 @@ msgctxt "name" msgid "USB printing" msgstr "Stampa USB" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "Consente di salvare il sezionamento risultante come un file X3G, per supportare le stampanti che leggono questo formato (Malyan, Makerbot ed altre stampanti basate su firmware Sailfish)." - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "X3GWriter" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5174,23 +5085,13 @@ msgstr "Plugin dispositivo di output unità rimovibile" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Gestisce le connessioni di rete alle stampanti Ultimaker 3." +msgid "Manages network connections to Ultimaker networked printers." +msgstr "Gestisce le connessioni di rete alle stampanti Ultimaker in rete." #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "Connessione di rete UM3" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" -msgstr "" +msgid "Ultimaker Network Connection" +msgstr "Connessione di rete Ultimaker" #: MonitorStage/plugin.json msgctxt "description" @@ -5255,12 +5156,12 @@ msgstr "Cancellazione supporto" #: UFPReader/plugin.json msgctxt "description" msgid "Provides support for reading Ultimaker Format Packages." -msgstr "" +msgstr "Fornisce il supporto per la lettura di pacchetti formato Ultimaker." #: UFPReader/plugin.json msgctxt "name" msgid "UFP Reader" -msgstr "" +msgstr "Lettore UFP" #: SliceInfoPlugin/plugin.json msgctxt "description" @@ -5345,12 +5246,12 @@ msgstr "Aggiornamento della versione da 2.7 a 3.0" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.5 to Cura 4.0." -msgstr "" +msgstr "Aggiorna le configurazioni da Cura 3.5 a Cura 4.0." #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "name" msgid "Version Upgrade 3.5 to 4.0" -msgstr "" +msgstr "Aggiornamento della versione da 3.5 a 4.0" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" @@ -5365,12 +5266,12 @@ msgstr "Aggiornamento della versione da 3.4 a 3.5" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 4.0 to Cura 4.1." -msgstr "" +msgstr "Aggiorna le configurazioni da Cura 4.0 a Cura 4.1." #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "name" msgid "Version Upgrade 4.0 to 4.1" -msgstr "" +msgstr "Aggiornamento della versione da 4.0 a 4.1" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" @@ -5382,6 +5283,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "Aggiornamento della versione da 3.0 a 3.1" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "Aggiorna le configurazioni da Cura 4.1 a Cura 4.2." + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "Aggiornamento della versione da 4.1 a 4.2" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5412,6 +5323,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "Aggiornamento della versione da 2.2 a 2.4" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "Aggiorna le configurazioni da Cura 4.2 a Cura 4.3." + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "Aggiornamento della versione da 4.2 a 4.3" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5422,6 +5343,16 @@ msgctxt "name" msgid "Image Reader" msgstr "Lettore di immagine" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "Fornisce supporto per la lettura dei file modello." + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "Trimesh Reader" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5452,16 +5383,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "Lettore 3MF" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5485,12 +5406,12 @@ msgstr "Lettore codice G" #: CuraDrive/plugin.json msgctxt "description" msgid "Backup and restore your configuration." -msgstr "" +msgstr "Effettua il backup o ripristina la configurazione." #: CuraDrive/plugin.json msgctxt "name" msgid "Cura Backups" -msgstr "" +msgstr "Backup Cura" #: CuraProfileWriter/plugin.json msgctxt "description" @@ -5525,12 +5446,12 @@ msgstr "Writer 3MF" #: PreviewStage/plugin.json msgctxt "description" msgid "Provides a preview stage in Cura." -msgstr "" +msgstr "Fornisce una fase di anteprima in Cura." #: PreviewStage/plugin.json msgctxt "name" msgid "Preview Stage" -msgstr "" +msgstr "Fase di anteprima" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -5552,6 +5473,297 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Lettore profilo Cura" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "Collegato alla rete." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "Collegato alla rete. Si prega di approvare la richiesta di accesso sulla stampante." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "Collegato alla rete. Nessun accesso per controllare la stampante." + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "Richiesto accesso alla stampante. Approvare la richiesta sulla stampante" + +#~ msgctxt "@info:title" +#~ msgid "Authentication status" +#~ msgstr "Stato di autenticazione" + +#~ msgctxt "@info:title" +#~ msgid "Authentication Status" +#~ msgstr "Stato di autenticazione" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "Invia nuovamente la richiesta di accesso" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "Accesso alla stampante accettato" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "Nessun accesso per stampare con questa stampante. Impossibile inviare il processo di stampa." + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "Richiesta di accesso" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "Invia la richiesta di accesso alla stampante" + +#~ msgctxt "@label" +#~ msgid "Unable to start a new print job." +#~ msgstr "Impossibile avviare un nuovo processo di stampa." + +#~ msgctxt "@label" +#~ msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." +#~ msgstr "È presente un problema di configurazione della stampante che rende impossibile l’avvio della stampa. Risolvere il problema prima di continuare." + +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "Mancata corrispondenza della configurazione" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "Sei sicuro di voler stampare con la configurazione selezionata?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Le configurazioni o la calibrazione della stampante e di Cura non corrispondono. Per ottenere i migliori risultati, sezionare sempre per i PrintCore e i materiali inseriti nella stampante utilizzata." + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "Invio nuovi processi (temporaneamente) bloccato, invio in corso precedente processo di stampa." + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "Invio dati alla stampante in corso" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "Invio dati" + +#~ msgctxt "@info:status" +#~ msgid "No Printcore loaded in slot {slot_number}" +#~ msgstr "Nessun PrintCore caricato nello slot {slot_number}" + +#~ msgctxt "@info:status" +#~ msgid "No material loaded in slot {slot_number}" +#~ msgstr "Nessun materiale caricato nello slot {slot_number}" + +#~ msgctxt "@label" +#~ msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" +#~ msgstr "PrintCore diverso (Cura: {cura_printcore_name}, Stampante: {remote_printcore_name}) selezionata per estrusore {extruder_id}" + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "Materiale diverso (Cura: {0}, Stampante: {1}) selezionato per l’estrusore {2}" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "Sincronizzazione con la stampante" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "Desideri utilizzare la configurazione corrente della tua stampante in Cura?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "I PrintCore e/o i materiali sulla stampante differiscono da quelli contenuti nel tuo attuale progetto. Per ottenere i risultati migliori, sezionare sempre per i PrintCore e i materiali inseriti nella stampante utilizzata." + +#~ msgctxt "@action:button" +#~ msgid "View in Monitor" +#~ msgstr "Visualizzazione in Controlla" + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "La stampante '{printer_name}' ha finito di stampare '{job_name}'." + +#~ msgctxt "@info:status" +#~ msgid "The print job '{job_name}' was finished." +#~ msgstr "Il processo di stampa '{job_name}' è terminato." + +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "Stampa finita" + +#~ msgctxt "@label:material" +#~ msgid "Empty" +#~ msgstr "Vuoto" + +#~ msgctxt "@label:material" +#~ msgid "Unknown" +#~ msgstr "Sconosciuto" + +#~ msgctxt "@info:title" +#~ msgid "Cloud error" +#~ msgstr "Errore cloud" + +#~ msgctxt "@info:status" +#~ msgid "Could not export print job." +#~ msgstr "Impossibile esportare il processo di stampa." + +#~ msgctxt "@info:description" +#~ msgid "There was an error connecting to the cloud." +#~ msgstr "Si è verificato un errore di collegamento al cloud." + +#~ msgctxt "@info:status" +#~ msgid "Uploading via Ultimaker Cloud" +#~ msgstr "Caricamento tramite Ultimaker Cloud" + +#~ msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." +#~ msgid "Connect to Ultimaker Cloud" +#~ msgstr "Collegato a Ultimaker Cloud" + +#~ msgctxt "@action" +#~ msgid "Don't ask me again for this printer." +#~ msgstr "Non chiedere nuovamente per questa stampante." + +#~ msgctxt "@info:status" +#~ msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." +#~ msgstr "Ora è possibile inviare e controllare i processi di stampa ovunque con l’account Ultimaker." + +#~ msgctxt "@info:status" +#~ msgid "Connected!" +#~ msgstr "Collegato!" + +#~ msgctxt "@action" +#~ msgid "Review your connection" +#~ msgstr "Controlla collegamento" + +#~ msgctxt "@info:status Don't translate the XML tags !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "La macchina definita nel profilo {0} ({1}) non corrisponde alla macchina corrente ({2}), impossibile importarla." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "Failed to import profile from {0}:" +#~ msgstr "Impossibile importare il profilo da {0}:" + +#~ msgctxt "@window:title" +#~ msgid "Existing Connection" +#~ msgstr "Collegamento esistente" + +#~ msgctxt "@message:text" +#~ msgid "This printer/group is already added to Cura. Please select another printer/group." +#~ msgstr "Stampante/gruppo già aggiunto a Cura. Selezionare un’altra stampante o un altro gruppo." + +#~ msgctxt "@label" +#~ msgid "Enter the IP address or hostname of your printer on the network." +#~ msgstr "Inserire l’indirizzo IP o l’hostname della stampante sulla rete." + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "Collega a una stampante" + +#~ msgctxt "@title" +#~ msgid "Cura Settings Guide" +#~ msgstr "Guida alle impostazioni Cura" + +#~ msgctxt "@info:tooltip" +#~ msgid "Zooming towards the mouse is not supported in the orthogonal perspective." +#~ msgstr "Nella prospettiva ortogonale lo zoom verso la direzione del mouse non è supportato." + +#~ msgid "Orthogonal" +#~ msgstr "Ortogonale" + +#~ msgctxt "description" +#~ msgid "Manages network connections to Ultimaker 3 printers." +#~ msgstr "Gestisce le connessioni di rete alle stampanti Ultimaker 3." + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "Connessione di rete UM3" + +#~ msgctxt "description" +#~ msgid "Provides extra information and explanations about settings in Cura, with images and animations." +#~ msgstr "Fornisce informazioni e spiegazioni aggiuntive sulle impostazioni in Cura, con immagini e animazioni." + +#~ msgctxt "name" +#~ msgid "Settings Guide" +#~ msgstr "Guida alle impostazioni" + +#~ msgctxt "@item:inmenu" +#~ msgid "Cura Settings Guide" +#~ msgstr "Guida alle impostazioni Cura" + +#~ msgctxt "@info:generic" +#~ msgid "Settings have been changed to match the current availability of extruders: [%s]" +#~ msgstr "Le impostazioni sono state modificate in base all’attuale disponibilità di estrusori: [%s]" + +#~ msgctxt "@title:groupbox" +#~ msgid "User description" +#~ msgstr "Descrizione utente" + +#~ msgctxt "@info" +#~ msgid "These options are not available because you are monitoring a cloud printer." +#~ msgstr "Queste opzioni non sono disponibili perché si sta controllando una stampante cloud." + +#~ msgctxt "@label link to connect manager" +#~ msgid "Go to Cura Connect" +#~ msgstr "Vai a Cura Connect" + +#~ msgctxt "@info" +#~ msgid "All jobs are printed." +#~ msgstr "Tutti i processi sono stampati." + +#~ msgctxt "@label link to connect manager" +#~ msgid "View print history" +#~ msgstr "Visualizza cronologia di stampa" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "Per stampare direttamente sulla stampante in rete, verificare che la stampante desiderata sia collegata alla rete mediante un cavo di rete o mediante collegamento alla rete WIFI. Se si collega Cura alla stampante, è comunque possibile utilizzare una chiavetta USB per trasferire i file codice G alla stampante.\n" +#~ "\n" +#~ "Selezionare la stampante dall’elenco seguente:" + +#~ msgctxt "@info" +#~ msgid "" +#~ "Please make sure your printer has a connection:\n" +#~ "- Check if the printer is turned on.\n" +#~ "- Check if the printer is connected to the network." +#~ msgstr "" +#~ "Accertarsi che la stampante sia collegata:\n" +#~ "- Controllare se la stampante è accesa.\n" +#~ "- Controllare se la stampante è collegata alla rete." + +#~ msgctxt "@option:check" +#~ msgid "See only current build plate" +#~ msgstr "Vedi solo il piano di stampa corrente" + +#~ msgctxt "@action:button" +#~ msgid "Arrange to all build plates" +#~ msgstr "Sistema su tutti i piani di stampa" + +#~ msgctxt "@action:button" +#~ msgid "Arrange current build plate" +#~ msgstr "Sistema il piano di stampa corrente" + +#~ msgctxt "description" +#~ msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." +#~ msgstr "Consente di salvare il sezionamento risultante come un file X3G, per supportare le stampanti che leggono questo formato (Malyan, Makerbot ed altre stampanti basate su firmware Sailfish)." + +#~ msgctxt "name" +#~ msgid "X3GWriter" +#~ msgstr "X3GWriter" + +#~ msgctxt "description" +#~ msgid "Reads SVG files as toolpaths, for debugging printer movements." +#~ msgstr "Legge i file SVG come toolpath (percorsi utensile), per eseguire il debug dei movimenti della stampante." + +#~ msgctxt "name" +#~ msgid "SVG Toolpath Reader" +#~ msgstr "Lettore di toolpath (percorso utensile) SVG" + #~ msgctxt "@item:inmenu" #~ msgid "Changelog" #~ msgstr "Registro modifiche" diff --git a/resources/i18n/it_IT/fdmextruder.def.json.po b/resources/i18n/it_IT/fdmextruder.def.json.po index aa477c4fd4..457ef557f0 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.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+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 0b3c725377..20e26de47a 100644 --- a/resources/i18n/it_IT/fdmprinter.def.json.po +++ b/resources/i18n/it_IT/fdmprinter.def.json.po @@ -5,12 +5,12 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" -"PO-Revision-Date: 2019-03-13 14:00+0200\n" -"Last-Translator: Bothof \n" -"Language-Team: Italian\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" +"PO-Revision-Date: 2019-07-29 15:51+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Italian , Italian \n" "Language: it_IT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -215,6 +215,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "Indica se la macchina ha un piano di stampa riscaldato." +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "È dotato della stabilizzazione della temperatura del volume di stampa" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "Se la macchina è in grado di stabilizzare la temperatura del volume di stampa." + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -238,7 +248,7 @@ msgstr "Il numero di treni di estrusori. Un treno di estrusori è la combinazion #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders That Are Enabled" -msgstr "" +msgstr "Numero di estrusori abilitati" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -248,7 +258,7 @@ msgstr "Numero di treni di estrusori abilitati; impostato automaticamente nel so #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer Nozzle Diameter" -msgstr "" +msgstr "Diametro esterno ugello" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter description" @@ -258,7 +268,7 @@ msgstr "Il diametro esterno della punta dell'ugello." #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle Length" -msgstr "" +msgstr "Lunghezza ugello" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance description" @@ -268,7 +278,7 @@ msgstr "La differenza di altezza tra la punta dell’ugello e la parte inferiore #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle Angle" -msgstr "" +msgstr "Angolo ugello" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle description" @@ -278,7 +288,7 @@ msgstr "L’angolo tra il piano orizzontale e la parte conica esattamente sopra #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat Zone Length" -msgstr "" +msgstr "Lunghezza della zona di riscaldamento" #: fdmprinter.def.json msgctxt "machine_heat_zone_length description" @@ -308,7 +318,7 @@ msgstr "Per controllare la temperatura da Cura. Disattivare per controllare la t #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat Up Speed" -msgstr "" +msgstr "Velocità di riscaldamento" #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed description" @@ -318,7 +328,7 @@ msgstr "La velocità (°C/s) alla quale l’ugello si riscalda calcolando la med #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool Down Speed" -msgstr "" +msgstr "Velocità di raffreddamento" #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed description" @@ -337,8 +347,8 @@ msgstr "Il tempo minimo in cui un estrusore deve essere inattivo prima che l’u #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" -msgstr "" +msgid "G-code Flavor" +msgstr "Versione codice G" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" @@ -403,7 +413,7 @@ msgstr "Specifica se usare comandi di retrazione firmware (G10/G11) anziché uti #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed Areas" -msgstr "" +msgstr "Aree non consentite" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" @@ -423,7 +433,7 @@ msgstr "Un elenco di poligoni con aree alle quali l’ugello non può accedere." #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine Head Polygon" -msgstr "" +msgstr "Poligono testina macchina" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -433,7 +443,7 @@ msgstr "Una silhouette 2D della testina di stampa (cappucci ventola esclusi)." #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine Head & Fan Polygon" -msgstr "" +msgstr "Poligono testina macchina e ventola" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -443,7 +453,7 @@ msgstr "Una silhouette 2D della testina di stampa (cappucci ventola inclusi)." #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry Height" -msgstr "" +msgstr "Altezza gantry" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -473,7 +483,7 @@ msgstr "Il diametro interno dell’ugello. Modificare questa impostazione quando #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset with Extruder" -msgstr "" +msgstr "Offset con estrusore" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -1270,6 +1280,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "Angolo più acuto" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "Posizione della cucitura in Z" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "La posizione accanto al punto in cui avviare la stampa di ciascuna parte in uno layer." + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "Indietro a sinistra" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "Indietro" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "Indietro a destra" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "Destra" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "Avanti a destra" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "Avanti" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "Avanti a sinistra" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "Sinistra" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1297,8 +1357,8 @@ msgstr "Preferenze angolo giunzione" #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "Controlla se gli angoli sul profilo del modello influenzano la posizione della giunzione. Nessuno significa che gli angoli non hanno alcuna influenza sulla posizione della giunzione. Nascondi giunzione favorisce la presenza della giunzione su un angolo interno. Esponi giunzione favorisce la presenza della giunzione su un angolo esterno. Nascondi o esponi giunzione favorisce la presenza della giunzione su un angolo interno o esterno." +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "Controlla se gli angoli sul profilo del modello influenzano la posizione della giunzione. Nessuno significa che gli angoli non hanno alcuna influenza sulla posizione della giunzione. Nascondi giunzione favorisce la presenza della giunzione su un angolo interno. Esponi giunzione favorisce la presenza della giunzione su un angolo esterno. Nascondi o esponi giunzione favorisce la presenza della giunzione su un angolo interno o esterno. Smart Hiding consente sia gli angoli interni che quelli esterni ma sceglie con maggiore frequenza gli angoli interni, se opportuno." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1320,6 +1380,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "Nascondi o esponi giunzione" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "Occultamento intelligente" + #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" @@ -1332,13 +1397,13 @@ msgstr "Se abilitato, le coordinate della giunzione Z sono riferite al centro di #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "Ignora i piccoli interstizi a Z" +msgid "No Skin in Z Gaps" +msgstr "Nessun rivest. est. negli interstizi a Z" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "Quando il modello presenta piccoli spazi vuoti verticali, circa il 5% del tempo di calcolo supplementare può essere utilizzato per la generazione di rivestimenti esterni superiori ed inferiori in questi interstizi. In questo caso disabilitare l’impostazione." +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "Quando il modello presenta piccoli spazi vuoti verticali composti da un numero ridotto di strati, intorno a questi strati di norma dovrebbe essere presente un rivestimento esterno nell'interstizio. Abilitare questa impostazione per non generare il rivestimento esterno se l'interstizio verticale è molto piccolo. Ciò consente di migliorare il tempo di stampa e il tempo di sezionamento, ma dal punto di vista tecnico lascia il riempimento esposto all'aria." #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1357,8 +1422,10 @@ msgstr "Abilita stiratura" #: fdmprinter.def.json 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." +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." #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1450,6 +1517,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "Indica la variazione della velocità istantanea massima durante la stiratura." +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "Percentuale di sovrapposizione del rivestimento esterno" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Regolare l’entità della sovrapposizione tra le pareti e (i punti finali delle) linee centrali del rivestimento esterno espressa in percentuale delle larghezze delle linee del rivestimento esterno. Una leggera sovrapposizione consente alle pareti di essere saldamente collegate al rivestimento. Si noti che, data una larghezza uguale del rivestimento esterno e della linea perimetrale, qualsiasi percentuale superiore al 50% può già causare il superamento della parete da parte del rivestimento esterno in quanto, in quel punto, la posizione dell’ugello dell’estrusore del rivestimento esterno può già avere superato la parte centrale della parete." + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "Sovrapposizione del rivestimento esterno" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Regolare l’entità della sovrapposizione tra le pareti e (i punti finali delle) linee centrali del rivestimento esterno. Una leggera sovrapposizione consente alle pareti di essere saldamente collegate al rivestimento. Si noti che, data una larghezza uguale del rivestimento esterno e della linea perimetrale, qualsiasi percentuale superiore alla metà della parete può già causare il superamento della parete da parte del rivestimento esterno in quanto, in quel punto, la posizione dell’ugello dell’estrusore del rivestimento esterno può già aver superato la parte centrale della parete." + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1615,6 +1702,17 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Il riempimento si sposta di questa distanza lungo l'asse Y." +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +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." + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1669,26 +1767,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "Indica la quantità di sovrapposizione tra il riempimento e le pareti. Una leggera sovrapposizione consente il saldo collegamento delle pareti al riempimento." -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "Percentuale di sovrapposizione del rivestimento esterno" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Regolare l’entità della sovrapposizione tra le pareti e (i punti finali delle) linee centrali del rivestimento esterno espressa in percentuale delle larghezze delle linee del rivestimento esterno. Una leggera sovrapposizione consente alle pareti di essere saldamente collegate al rivestimento. Si noti che, data una larghezza uguale del rivestimento esterno e della linea perimetrale, qualsiasi percentuale superiore al 50% può già causare il superamento della parete da parte del rivestimento esterno in quanto, in quel punto, la posizione dell’ugello dell’estrusore del rivestimento esterno può già avere superato la parte centrale della parete." - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "Sovrapposizione del rivestimento esterno" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Regolare l’entità della sovrapposizione tra le pareti e (i punti finali delle) linee centrali del rivestimento esterno. Una leggera sovrapposizione consente alle pareti di essere saldamente collegate al rivestimento. Si noti che, data una larghezza uguale del rivestimento esterno e della linea perimetrale, qualsiasi percentuale superiore alla metà della parete può già causare il superamento della parete da parte del rivestimento esterno in quanto, in quel punto, la posizione dell’ugello dell’estrusore del rivestimento esterno può già aver superato la parte centrale della parete." - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1872,12 +1950,12 @@ msgstr "La temperatura preimpostata utilizzata per la stampa. Deve essere la tem #: fdmprinter.def.json msgctxt "build_volume_temperature label" msgid "Build Volume Temperature" -msgstr "" +msgstr "Temperatura volume di stampa" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." -msgstr "" +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." +msgstr "La temperatura dell'ambiente in cui stampare. Se il valore è 0, la temperatura del volume di stampa non verrà regolata." #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1989,6 +2067,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "Il tasso di contrazione in percentuale." +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "Materiale cristallino" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "Questo tipo di materiale è quello che si stacca in modo netto quando viene riscaldato (cristallino) oppure è il tipo che produce lunghe catene di polimeri intrecciati (non cristallino)?" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "Posizione retratta anti fuoriuscita di materiale" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "La distanza alla quale deve essere retratto il materiale prima che smetta di fuoriuscire." + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "Velocità di retrazione anti fuoriuscita del materiale" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "La velocità a cui deve essere retratto il materiale durante un cambio di filamento per evitare la fuoriuscita di materiale." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "Posizione di retrazione prima della rottura" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "La lunghezza massima di estensione del filamento prima che si rompa durante il riscaldamento." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "Velocità di retrazione prima della rottura" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "La velocità massima di retrazione del filamento prima che si rompa durante questa operazione." + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "Posizione di retrazione per la rottura" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "La distanza di retrazione del filamento al fine di consentirne la rottura netta." + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "Velocità di retrazione per la rottura" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "La velocità alla quale retrarre il filamento al fine di romperlo in modo netto." + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "Temperatura di rottura" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "La temperatura a cui il filamento viene rotto, con una rottura netta." + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -1999,6 +2157,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "Determina la compensazione del flusso: la quantità di materiale estruso viene moltiplicata per questo valore." +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "Flusso della parete" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "Compensazione del flusso sulle linee perimetrali." + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "Flusso della parete esterna" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "Compensazione del flusso sulla linea perimetrale più esterna." + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "Flusso pareti interne" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "Compensazione del flusso sulle linee perimetrali per tutte le linee perimetrali tranne quella più esterna." + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "Flusso superiore/inferiore" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "Compensazione del flusso sulle linee superiore/inferiore." + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "Flusso rivestimento esterno superficie superiore" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "Compensazione del flusso sulle linee delle aree nella parte superiore della stampa." + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "Flusso di riempimento" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "Compensazione del flusso sulle linee di riempimento." + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "Flusso dello skirt/brim" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "Compensazione del flusso sulle linee dello skirt o del brim." + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "Flusso del supporto" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "Compensazione del flusso sulle linee di supporto." + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "Flusso interfaccia di supporto" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "Compensazione del flusso sulle linee di supporto superiore o inferiore." + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "Flusso supporto superiore" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "Compensazione del flusso sulle linee di supporto superiore." + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "Flusso supporto inferiore" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "Compensazione del flusso sulle linee di supporto inferiore." + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "Flusso torre di innesco" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "Compensazione del flusso sulle linee della torre di innesco." + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2116,7 +2394,7 @@ msgstr "Limitazione delle retrazioni del supporto" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." msgstr "Omettere la retrazione negli spostamenti da un supporto ad un altro in linea retta. L'abilitazione di questa impostazione riduce il tempo di stampa, ma può comportare un'eccessiva produzione di filamenti all'interno della struttura del supporto." #: fdmprinter.def.json @@ -2169,6 +2447,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "Indica la velocità alla quale il filamento viene sospinto indietro dopo la retrazione per cambio ugello." +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "Quantità di materiale extra della Prime Tower, al cambio ugello" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "Materiale extra per l'innesco dopo il cambio dell'ugello." + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2360,14 +2648,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "Indica la velocità a cui sono stampati lo skirt ed il brim. Normalmente questa operazione viene svolta alla velocità di stampa dello strato iniziale, ma a volte è possibile che si desideri stampare lo skirt o il brim ad una velocità diversa." #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "Velocità massima Z" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "Velocità di sollevamento Z" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "Indica la velocità massima di spostamento del piano di stampa. L’impostazione di questo valore a zero causa l’utilizzo per la stampa dei valori preimpostati in fabbrica per la velocità massima Z." +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "Velocità alla quale viene eseguito il movimento Z verticale per i sollevamenti in Z. In genere è inferiore alla velocità di stampa, dal momento che il piano o il corpo di stampa della macchina sono più difficili da spostare." #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2869,16 +3157,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "La distanza tra l’ugello e le parti già stampate quando si effettua lo spostamento con aggiramento." -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "Avvio strati con la stessa parte" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "In ciascuno strato inizia la stampa dell’oggetto vicino allo stesso punto, in modo che non si inizia un nuovo strato con la stampa del pezzo con cui è terminato lo strato precedente. Questo consente di ottenere migliori sovrapposizioni e parti piccole, ma aumenta il tempo di stampa." - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -2942,12 +3220,12 @@ msgstr "Dopo il passaggio della macchina da un estrusore all’altro, il piano d #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height label" msgid "Z Hop After Extruder Switch Height" -msgstr "" +msgstr "Z Hop dopo cambio altezza estrusore" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height description" msgid "The height difference when performing a Z Hop after extruder switch." -msgstr "" +msgstr "La differenza di altezza durante l'esecuzione di uno Z Hop dopo il cambio dell'estrusore." #: fdmprinter.def.json msgctxt "cooling label" @@ -3222,7 +3500,7 @@ msgstr "Incrociata" #: fdmprinter.def.json msgctxt "support_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "Gyroid" #: fdmprinter.def.json msgctxt "support_wall_count label" @@ -3285,14 +3563,16 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "Indica la distanza tra le linee della struttura di supporto dello strato iniziale stampato. Questa impostazione viene calcolata mediante la densità del supporto." #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "Direzione delle linee di riempimento supporto" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." -msgstr "Indica l’orientamento della configurazione del riempimento per i supporti. La configurazione del riempimento del supporto viene ruotata sul piano orizzontale." +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." #: fdmprinter.def.json msgctxt "support_brim_enable label" @@ -3421,8 +3701,8 @@ msgstr "Distanza giunzione supporto" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." -msgstr "Indica la distanza massima tra le strutture di supporto nelle direzioni X/Y. Quando la distanza tra le strutture è inferiore al valore indicato, le strutture convergono in una unica." +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." +msgstr "La distanza massima tra le strutture di supporto nelle direzioni X/Y. Quando la distanza tra le strutture è inferiore al valore indicato, le strutture convergono in una unica." #: fdmprinter.def.json msgctxt "support_offset label" @@ -3759,6 +4039,45 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "Entità di offset applicato alle parti inferiori del supporto." +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +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)." + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +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)." + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +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)." + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3800,14 +4119,14 @@ msgid "The diameter of a special tower." msgstr "Corrisponde al diametro di una torre speciale." #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "Diametro minimo" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "Diametro supportato dalla torre" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." -msgstr "È il diametro minimo nelle direzioni X/Y di una piccola area, che deve essere sostenuta da una torre speciale." +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "È il diametro massimo nelle direzioni X/Y di una piccola area, che deve essere sostenuta da una torre speciale." #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" @@ -4303,16 +4622,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "Stampa una torre accanto alla stampa che serve per innescare il materiale dopo ogni cambio ugello." -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "Torre di innesco circolare" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "Conferisce alla torre di innesco una forma circolare." - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4353,16 +4662,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "Indica la coordinata Y della posizione della torre di innesco." -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "Flusso torre di innesco" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "Determina la compensazione del flusso: la quantità di materiale estruso viene moltiplicata per questo valore." - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4376,12 +4675,12 @@ msgstr "Dopo la stampa della torre di innesco con un ugello, pulisce il material #: fdmprinter.def.json msgctxt "prime_tower_brim_enable label" msgid "Prime Tower Brim" -msgstr "" +msgstr "Brim torre di innesco" #: fdmprinter.def.json msgctxt "prime_tower_brim_enable description" msgid "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type." -msgstr "" +msgstr "Le torri di innesco potrebbero richiedere un'adesione supplementare fornita da un bordo (brim), anche se il modello non lo prevede. Attualmente non può essere utilizzato con il tipo di adesione 'Raft'." #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4665,8 +4964,8 @@ msgstr "Levigazione dei profili con movimento spiraliforme" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." -msgstr "Leviga i profili con movimento spiraliforme per ridurre la visibilità della giunzione Z (la giunzione Z dovrebbe essere appena visibile sulla stampa, ma rimane visibile nella vista dello strato). Notare che la levigatura tende a rimuovere le bavature fini della superficie." +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgstr "Leviga i profili con movimento spiraliforme per ridurre la visibilità della giunzione Z (la giunzione Z dovrebbe essere appena visibile sulla stampa, ma rimane visibile nella visualizzazione a strati). Notare che la levigatura tende a rimuovere le bavature fini della superficie." #: fdmprinter.def.json msgctxt "relative_extrusion label" @@ -4901,12 +5200,14 @@ msgstr "La dimensione minima di un segmento lineare di spostamento dopo il sezio #: fdmprinter.def.json msgctxt "meshfix_maximum_deviation label" msgid "Maximum Deviation" -msgstr "" +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." -msgstr "" +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" @@ -5165,8 +5466,8 @@ msgstr "Abilitazione del supporto conico" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "Funzione sperimentale: realizza aree di supporto più piccole nella parte inferiore che in corrispondenza dello sbalzo." +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "Realizza aree di supporto più piccole nella parte inferiore che in corrispondenza dello sbalzo." #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5510,7 +5811,7 @@ msgstr "Indica la distanza tra l'ugello e le linee diagonali verso il basso. Un #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled label" msgid "Use Adaptive Layers" -msgstr "" +msgstr "Uso di strati adattivi" #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled description" @@ -5520,7 +5821,7 @@ msgstr "Gli strati adattivi calcolano l’altezza degli strati in base alla form #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation label" msgid "Adaptive Layers Maximum Variation" -msgstr "" +msgstr "Variazione massima strati adattivi" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" @@ -5530,7 +5831,7 @@ msgstr "La differenza di altezza massima rispetto all’altezza dello strato di #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" msgid "Adaptive Layers Variation Step Size" -msgstr "" +msgstr "Dimensione variazione strati adattivi" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step description" @@ -5540,7 +5841,7 @@ 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 "" +msgstr "Soglia strati adattivi" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" @@ -5760,152 +6061,194 @@ msgstr "La velocità della ventola in percentuale da usare per stampare il terzo #: fdmprinter.def.json msgctxt "clean_between_layers label" msgid "Wipe Nozzle Between Layers" -msgstr "" +msgstr "Pulitura ugello tra gli strati" #: fdmprinter.def.json msgctxt "clean_between_layers description" msgid "Whether to include nozzle wipe G-Code between layers. Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working." -msgstr "" +msgstr "Se includere il codice G di pulitura ugello tra gli strati. Abilitare questa impostazione potrebbe influire sul comportamento di retrazione al cambio strato. Utilizzare le impostazioni di Retrazione per pulitura per controllare la retrazione in corrispondenza degli strati in cui lo script di pulitura sarà funzionante." #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe label" msgid "Material Volume Between Wipes" -msgstr "" +msgstr "Volume di materiale tra le operazioni di pulitura" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe description" msgid "Maximum material, that can be extruded before another nozzle wipe is initiated." -msgstr "" +msgstr "Il massimo volume di materiale, che può essere estruso prima di iniziare la successiva operazione di pulitura ugello." #: fdmprinter.def.json msgctxt "wipe_retraction_enable label" msgid "Wipe Retraction Enable" -msgstr "" +msgstr "Retrazione per pulitura abilitata" #: fdmprinter.def.json msgctxt "wipe_retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area." -msgstr "" +msgstr "Ritrae il filamento quando l'ugello si sta muovendo su un'area non stampata." #: fdmprinter.def.json msgctxt "wipe_retraction_amount label" msgid "Wipe Retraction Distance" -msgstr "" +msgstr "Distanza di retrazione per pulitura" #: fdmprinter.def.json msgctxt "wipe_retraction_amount description" msgid "Amount to retract the filament so it does not ooze during the wipe sequence." -msgstr "" +msgstr "L'entità di retrazione del filamento in modo che non fuoriesca durante la sequenza di pulitura." #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount label" msgid "Wipe Retraction Extra Prime Amount" -msgstr "" +msgstr "Entità di innesco supplementare dopo retrazione per pulitura" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount description" msgid "Some material can ooze away during a wipe travel moves, which can be compensated for here." -msgstr "" +msgstr "Qui è possibile compensare l’eventuale trafilamento di materiale che può verificarsi nel corso della pulitura durante il movimento." #: fdmprinter.def.json msgctxt "wipe_retraction_speed label" msgid "Wipe Retraction Speed" -msgstr "" +msgstr "Velocità di retrazione per pulitura" #: fdmprinter.def.json msgctxt "wipe_retraction_speed description" msgid "The speed at which the filament is retracted and primed during a wipe retraction move." -msgstr "" +msgstr "Indica la velocità alla quale il filamento viene retratto e preparato durante un movimento di retrazione per pulitura." #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed label" msgid "Wipe Retraction Retract Speed" -msgstr "" +msgstr "Velocità di retrazione per pulitura" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed description" msgid "The speed at which the filament is retracted during a wipe retraction move." -msgstr "" +msgstr "Indica la velocità alla quale il filamento viene retratto durante un movimento di retrazione per pulitura." #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "Velocità di innesco dopo la retrazione" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed description" msgid "The speed at which the filament is primed during a wipe retraction move." -msgstr "" +msgstr "Indica la velocità alla quale il filamento viene preparato durante un movimento di retrazione per pulitura." #: fdmprinter.def.json msgctxt "wipe_pause label" msgid "Wipe Pause" -msgstr "" +msgstr "Pausa pulitura" #: fdmprinter.def.json msgctxt "wipe_pause description" msgid "Pause after the unretract." -msgstr "" +msgstr "Pausa dopo ripristino." #: fdmprinter.def.json msgctxt "wipe_hop_enable label" msgid "Wipe Z Hop When Retracted" -msgstr "" +msgstr "Z Hop pulitura durante retrazione" #: fdmprinter.def.json msgctxt "wipe_hop_enable description" msgid "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." -msgstr "" +msgstr "Ogniqualvolta avviene una retrazione, il piano di stampa viene abbassato per creare uno spazio tra l’ugello e la stampa. Questo impedisce l'urto dell'ugello sulla stampa durante gli spostamenti, riducendo la possibilità di far cadere la stampa dal piano." #: fdmprinter.def.json msgctxt "wipe_hop_amount label" msgid "Wipe Z Hop Height" -msgstr "" +msgstr "Altezza Z Hop pulitura" #: fdmprinter.def.json msgctxt "wipe_hop_amount description" msgid "The height difference when performing a Z Hop." -msgstr "" +msgstr "La differenza di altezza durante l’esecuzione di uno Z Hop." #: fdmprinter.def.json msgctxt "wipe_hop_speed label" msgid "Wipe Hop Speed" -msgstr "" +msgstr "Velocità di sollevamento (Hop) per pulitura" #: fdmprinter.def.json msgctxt "wipe_hop_speed description" msgid "Speed to move the z-axis during the hop." -msgstr "" +msgstr "Velocità di spostamento dell'asse z durante il sollevamento (Hop)." #: fdmprinter.def.json msgctxt "wipe_brush_pos_x label" msgid "Wipe Brush X Position" -msgstr "" +msgstr "Posizione X spazzolino di pulitura" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x description" msgid "X location where wipe script will start." -msgstr "" +msgstr "Posizione X in cui verrà avviato lo script di pulitura." #: fdmprinter.def.json msgctxt "wipe_repeat_count label" msgid "Wipe Repeat Count" -msgstr "" +msgstr "Conteggio ripetizioni operazioni di pulitura" #: fdmprinter.def.json msgctxt "wipe_repeat_count description" msgid "Number of times to move the nozzle across the brush." -msgstr "" +msgstr "Numero di passaggi dell'ugello attraverso lo spazzolino." #: fdmprinter.def.json msgctxt "wipe_move_distance label" msgid "Wipe Move Distance" -msgstr "" +msgstr "Distanza spostamento longitudinale di pulitura" #: fdmprinter.def.json msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." -msgstr "" +msgstr "La distanza dello spostamento longitudinale eseguito dalla testina attraverso lo spazzolino." + +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "Dimensione massima foro piccolo" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "I fori e i profili delle parti con un diametro inferiore a quello indicato verranno stampati utilizzando Velocità Dettagli di piccole dimensioni." + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "Lunghezza massima dettagli di piccole dimensioni" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "Profili di dettagli inferiori a questa lunghezza saranno stampati utilizzando Velocità Dettagli di piccole dimensioni." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +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." +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" + +#: 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 "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." #: fdmprinter.def.json msgctxt "command_line_settings label" @@ -5967,6 +6310,90 @@ 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 "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." + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "Avvio strati con la stessa parte" + +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "In ciascuno strato inizia la stampa dell’oggetto vicino allo stesso punto, in modo che non si inizia un nuovo strato con la stampa del pezzo con cui è terminato lo strato precedente. Questo consente di ottenere migliori sovrapposizioni e parti piccole, ma aumenta il tempo di stampa." + +#~ msgctxt "support_infill_angles description" +#~ msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +#~ msgstr "Indica l’orientamento della configurazione del riempimento per i supporti. La configurazione del riempimento del supporto viene ruotata sul piano orizzontale." + +#~ 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." +#~ msgstr "La deviazione massima consentita quando si riduce la risoluzione per l'impostazione di Risoluzione massima. Se si aumenta questo parametro, la stampa sarà meno precisa, ma il codice g sarà più piccolo." + +#~ msgctxt "machine_gcode_flavor label" +#~ msgid "G-code Flavour" +#~ msgstr "Tipo di codice G" + +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "Controlla se gli angoli sul profilo del modello influenzano la posizione della giunzione. Nessuno significa che gli angoli non hanno alcuna influenza sulla posizione della giunzione. Nascondi giunzione favorisce la presenza della giunzione su un angolo interno. Esponi giunzione favorisce la presenza della giunzione su un angolo esterno. Nascondi o esponi giunzione favorisce la presenza della giunzione su un angolo interno o esterno." + +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "Ignora i piccoli interstizi a Z" + +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "Quando il modello presenta piccoli spazi vuoti verticali, circa il 5% del tempo di calcolo supplementare può essere utilizzato per la generazione di rivestimenti esterni superiori ed inferiori in questi interstizi. In questo caso disabilitare l’impostazione." + +#~ msgctxt "build_volume_temperature description" +#~ msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +#~ msgstr "La temperatura utilizzata per il volume di stampa. Se il valore è 0, la temperatura del volume di stampa non verrà regolata." + +#~ msgctxt "limit_support_retractions description" +#~ msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +#~ msgstr "Omettere la retrazione negli spostamenti da un supporto ad un altro in linea retta. L'abilitazione di questa impostazione riduce il tempo di stampa, ma può comportare un'eccessiva produzione di filamenti all'interno della struttura del supporto." + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "Velocità massima Z" + +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "Indica la velocità massima di spostamento del piano di stampa. L’impostazione di questo valore a zero causa l’utilizzo per la stampa dei valori preimpostati in fabbrica per la velocità massima Z." + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "Indica la distanza massima tra le strutture di supporto nelle direzioni X/Y. Quando la distanza tra le strutture è inferiore al valore indicato, le strutture convergono in una unica." + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "Diametro minimo" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "È il diametro minimo nelle direzioni X/Y di una piccola area, che deve essere sostenuta da una torre speciale." + +#~ msgctxt "prime_tower_circular label" +#~ msgid "Circular Prime Tower" +#~ msgstr "Torre di innesco circolare" + +#~ msgctxt "prime_tower_circular description" +#~ msgid "Make the prime tower as a circular shape." +#~ msgstr "Conferisce alla torre di innesco una forma circolare." + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "Determina la compensazione del flusso: la quantità di materiale estruso viene moltiplicata per questo valore." + +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "Leviga i profili con movimento spiraliforme per ridurre la visibilità della giunzione Z (la giunzione Z dovrebbe essere appena visibile sulla stampa, ma rimane visibile nella vista dello strato). Notare che la levigatura tende a rimuovere le bavature fini della superficie." + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "Funzione sperimentale: realizza aree di supporto più piccole nella parte inferiore che in corrispondenza dello sbalzo." + #~ msgctxt "extruders_enabled_count label" #~ msgid "Number of Extruders that are enabled" #~ msgstr "Numero di estrusori abilitati" diff --git a/resources/i18n/ja_JP/cura.po b/resources/i18n/ja_JP/cura.po index c31b00e36e..bf018e6bc5 100644 --- a/resources/i18n/ja_JP/cura.po +++ b/resources/i18n/ja_JP/cura.po @@ -5,20 +5,20 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" -"PO-Revision-Date: 2019-03-14 14:39+0100\n" -"Last-Translator: Bothof \n" -"Language-Team: Japanese\n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" +"PO-Revision-Date: 2019-09-23 14:15+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Japanese , Japanese \n" "Language: ja_JP\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 2.1.1\n" +"X-Generator: Poedit 2.2.1\n" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "プリンターの設定" @@ -81,41 +81,49 @@ msgid "Flatten active settings" msgstr "アクティブ設定を平らにします" #: /home/ruben/Projects/Cura/plugins/ProfileFlattener/ProfileFlattener.py:35 -#, fuzzy msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "プロファイルが平らになり、アクティベートされました。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "AMF ファイル" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USBプリンティング" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "USBを使ってプリントする" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "USBを使ってプリントする" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "USBにて接続する" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "USBプリントを実行しています。Cura を閉じるとこのプリントも停止します。実行しますか?" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 -msgctxt "X3G Writer File Description" -msgid "X3G File" -msgstr "X3Gファイル" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "現在印刷中です。Curaは、前の印刷が完了するまでUSBを介した次の印刷を開始できません。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +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" @@ -127,6 +135,11 @@ 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" @@ -161,7 +174,7 @@ msgid "Save to Removable Drive {0}" msgstr "リムーバブルドライブ{0}に保存" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "書き出すために利用可能な形式のファイルがありません!" @@ -198,10 +211,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/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "エラー" @@ -230,9 +242,9 @@ 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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "警告" @@ -259,347 +271,149 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "リムーバブルドライブ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "ネットワーク上のプリント" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "ネットワークのプリント" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "ネットワーク上で接続。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "ネットワーク上で接続。プリンタへのリクエストを承認してください。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "ネットワーク上で接続。プリントを操作するアクセス権がありません。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "プリンターへのアクセスが申請されました。プリンタへのリクエストを承認してください" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "認証ステータス" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "認証ステータス" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "再試行" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "アクセスリクエストを再送信" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "プリンターへのアクセスが承認されました" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "このプリンターへのアクセスが許可されていないため、プリントジョブの送信ができませんでした。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "アクセスのリクエスト" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "アクセスのリクエスト送信" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "新しいプリントジョブを開始できません。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "Ultimakerの設定に問題があるため、印刷が開始できません。問題を解消してからやり直してください。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "ミスマッチの構成" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "選択された構成にてプリントを開始してもいいですか。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "プリンターの設定、キャリブレーションとCuraの構成にミスマッチがあります。プリンターに設置されたプリントコア及びフィラメントを元にCuraをスライスすることで最良の印刷結果を出すことができます。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "新しいデータの送信 (temporarily) をブロックします、前のプリントジョブが送信中です。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "プリンターにプリントデータを送信中" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "プリントデータを送信中" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "キャンセル" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "プリントコアがスロット{slot_number}に入っていません。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "材料がスロット{slot_number}に入っていません。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "エクストルーダー {extruder_id} に対して異なるプリントコア(Cura: {cura_printcore_name}, プリンター: {remote_printcore_name})が選択されています。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "異なるフィラメントが入っています(Cura:{0}, プリンター{1})エクストルーダー{2}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "プリンターと同期する" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "Curaで設定しているプリンタ構成を使用されますか?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "プリンターのプリントコア及びフィラメントが現在のプロジェクトと異なります。最善な印刷結果のために、プリンタに装着しているプリントコア、フィラメントに合わせてスライスして頂くことをお勧めします。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "ネットワーク上で接続" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "プリントジョブは正常にプリンターに送信されました。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "データを送信しました" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "モニター表示" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "プリンター’{printer_name}’が’{job_name}’のプリントを終了しました。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "プリントジョブ '{job_name}' は完了しました。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "プリント終了" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "空にする" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "不明" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "クラウドからプリントする" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "クラウドからプリントする" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "クラウドを使って接続しました" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "クラウドエラー" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "印刷ジョブをエクスポートできませんでした。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "データをプリンタにアップロードできませんでした。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "翌日" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "本日" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "クラウドの接続時にエラーが発生しました。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Ultimaker のアカウントを使用して、どこからでも印刷ジョブを送信およびモニターします。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "このプリンタでは次回から質問しない。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "はじめに" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Ultimaker のアカウントを使用して、どこからでも印刷ジョブを送信およびモニターできるようになりました。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "接続しました!" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "接続の確認" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "ネットワーク上にて接続" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" -msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +msgctxt "@action:button Preceded by 'Ready to'." +msgid "Print over network" +msgstr "ネットワーク上のプリント" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "ネットワークのプリント" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "ネットワーク上で接続" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "現在のジョブが送信されるまで待機してください。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "印刷エラー" + +#: /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 "{0}に接続を試みていますが、これはグループのホストではありません。グループホストとして設定するには、ウェブページを参照してください。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "グループホストではありません" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "グループの設定" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "Ultimaker のアカウントを使用して、どこからでも印刷ジョブを送信およびモニターします。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "Ultimaker Cloud に接続する" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "はじめに" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "印刷ジョブ送信中" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "プリントジョブをプリンターにアップロードしています。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "プリントジョブは正常にプリンターに送信されました。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "データを送信しました" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "Ultimaker Connectを実行していないプリンターに接続しようとしています。プリンターを最新のファームウェアに更新してください。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "プリンターの更新" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "Curaはグループ{0}のホストプリンターにまだインストールされていない材料プロフィールを検出しました。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "プリンターに材料を送信しています" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "データをプリンタにアップロードできませんでした。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "ネットワークエラー" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "翌日" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "本日" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "クラウドからプリントする" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "クラウドからプリントする" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" +msgstr "クラウドを使って接続しました" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 msgctxt "@item:inmenu" msgid "Monitor" msgstr "モニター" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "必要なアップデートの情報にアクセスできません。" @@ -626,12 +440,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "レイヤービュー" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Curaはワイヤープリンティング設定中には正確にレイヤーを表示しません" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "シミュレーションビュー" @@ -686,6 +500,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF画像" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "圧縮トライアングルメッシュを開く" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "COLLADA Digital Asset Exchange" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "glTFバイナリ" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "glTF埋め込みJSON" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "Stanford Triangle Format" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "圧縮COLLADA Digital Asset Exchange" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -766,19 +610,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF ファイル" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "ノズル" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "プロジェクトファイルを開く" @@ -793,18 +637,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Gファイル" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-codeを解析" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "G-codeの詳細" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "データファイルを送信する前に、プリンターとプリンターの構成設定にそのG-codeが適応しているか確認してください。G-codeの表示が適切でない場合があります。" @@ -907,16 +751,16 @@ msgstr "ログインに失敗しました" #: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33 msgctxt "@info:not supported profile" msgid "Not supported" -msgstr "" +msgstr "サポート対象外" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 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:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -929,116 +773,109 @@ msgid "Invalid file URL:" msgstr "無効なファイルのURL:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" -msgstr "現在利用可能なエクストルーダー [%s] に合わせて設定が変更されました。" +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 msgctxt "@info:title" msgid "Settings updated" msgstr "設定が更新されました" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "エクストルーダーを無効にしました" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, 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:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, 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:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, 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:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "書き出し完了" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, 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:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, 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:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "Failed to import profile from {0}:" -msgstr "{0}からプロファイルの取り込に失敗しました。" +msgstr "{0}からプロファイルの取り込に失敗しました:" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, 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:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "プロファイル{0}の中で定義されているマシン({1})は、現在お使いのマシン({2})と一致しないため、インポートできませんでした。" - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to import profile from {0}:" -msgstr "{0}からプロファイルの取り込に失敗しました。" +msgstr "{0}からプロファイルの取り込みに失敗しました:" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "プロファイル {0}の取り込み完了" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, 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:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, 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:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "カスタムプロファイル" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "プロファイルはクオリティータイプが不足しています。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1087,7 +924,7 @@ msgstr "スカート" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:84 msgctxt "@tooltip" msgid "Prime Tower" -msgstr "" +msgstr "プライムタワー" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:85 msgctxt "@tooltip" @@ -1116,7 +953,7 @@ msgctxt "@action:button" msgid "Next" msgstr "次" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1124,22 +961,36 @@ 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/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "閉める" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" 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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "キャンセル" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1156,23 +1007,22 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "全てのファイル" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" -msgstr "" +msgstr "下のプリンターはグループの一員であるため接続できません" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" -msgstr "" +msgstr "ネットワークで利用可能なプリンター" #: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689 msgctxt "@label" @@ -1185,12 +1035,12 @@ msgctxt "@label" msgid "Custom" msgstr "カスタム" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "プリントシークエンス設定値により、ガントリーと造形物の衝突を避けるため印刷データの高さを低くしました。" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "造形サイズ" @@ -1208,46 +1058,51 @@ msgstr "適切なデータまたはメタデータがないのにCuraバック #: /home/ruben/Projects/Cura/cura/Backups/Backup.py:125 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that is higher than the current version." -msgstr "" +msgstr "現行バージョンより上の Cura バックアップをリストアしようとしました。" #: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationHelpers.py:79 msgctxt "@message" msgid "Could not read response." -msgstr "" +msgstr "応答を読み取れません。" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 msgctxt "@info" msgid "Unable to reach the Ultimaker account server." msgstr "Ultimaker アカウントサーバーに到達できません。" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:66 +#: /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." -msgstr "" +msgstr "このアプリケーションの許可において必要な権限を与えてください。" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "ログイン時に予期しないエラーが発生しました。やり直してください。" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "造形データを増やす、配置する" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "造形データを配置" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "全ての造形物の造形サイズに対し、適切な位置が確認できません" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "造形データを配置" @@ -1396,48 +1251,48 @@ msgstr "ログ" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" -msgstr "ユーザー詳細" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" +msgstr "ユーザー説明 (注: 開発者はユーザーの言語を理解できない場合があるため、可能な限り英語を使用してください)" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "レポート送信" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "プリンターを読み込み中…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "シーンをセットアップ中…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "インターフェイスを読み込み中…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, 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:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, 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:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "選択したモデルは読み込むのに小さすぎます。" @@ -1445,103 +1300,108 @@ msgstr "選択したモデルは読み込むのに小さすぎます。" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58 msgctxt "@title:label" msgid "Printer Settings" -msgstr "" +msgstr "プリンターの設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X(幅)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (奥行き)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (高さ)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "ビルドプレート形" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" -msgstr "" +msgstr "センターを出します" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" -msgstr "" +msgstr "ヒーテッドドベッド" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "加熱式ビルドボリューム" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "G-codeフレーバー" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" -msgstr "" +msgstr "プリントヘッド設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X分" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y分" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "最大X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "最大Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" -msgstr "" +msgstr "ガントリーの高さ" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "エクストルーダーの数" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" -msgstr "" +msgstr "G-Codeの開始" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" -msgstr "" +msgstr "G-codeの終了" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:42 msgctxt "@title:tab" @@ -1551,7 +1411,7 @@ msgstr "プリンター" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:63 msgctxt "@title:label" msgid "Nozzle Settings" -msgstr "" +msgstr "ノズル設定" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:75 msgctxt "@label" @@ -1568,25 +1428,25 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "ノズルオフセットX" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "ノズルオフセットY" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "冷却ファンの番号" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" -msgstr "" +msgstr "エクストルーダーがG-Codeを開始する" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" -msgstr "" +msgstr "エクストルーダーがG-Codeを終了する" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 msgctxt "@action:button" @@ -1594,7 +1454,7 @@ msgid "Install" msgstr "インストール" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "インストールした" @@ -1609,16 +1469,16 @@ msgctxt "@label" msgid "ratings" msgstr "評価" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "プラグイン" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "マテリアル" @@ -1628,49 +1488,49 @@ msgctxt "@label" msgid "Your rating" msgstr "ユーザー評価" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "バージョン" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "最終更新日" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "著者" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "ダウンロード" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "インストールまたはアップデートにはログインが必要です" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" -msgstr "" +msgstr "材料スプールの購入" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "アップデート" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "更新中" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1731,17 +1591,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "Curaを終了する" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "地域貢献" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "コミュニティプラグイン" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "汎用材料" @@ -1802,27 +1662,52 @@ msgctxt "@label" msgid "Featured" msgstr "特長" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "互換性" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +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" +msgstr "ビルドプレート" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "サポート" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "品質" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "技術データシート" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "安全データシート" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "印刷ガイドライン" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "ウェブサイト" @@ -1922,70 +1807,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "ファームウェアが見つからず、ファームウェアアップデート失敗しました。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "プリンター管理" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "ガラス" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." -msgstr "クラウドプリンタをモニタリングしている場合は、これらのオプションは利用できません。" +msgid "Please update your printer's firmware to manage the queue remotely." +msgstr "キューをリモートで管理するには、プリンターのファームウェアを更新してください。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "クラウドプリンタをモニタリングしている場合は、ウェブカムを利用できません。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "読み込み中..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "利用不可" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "到達不能" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "アイドル" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "無題" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "匿名" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "構成の変更が必要です" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "詳細" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "利用できないプリンター" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "次の空き" @@ -1995,194 +1886,180 @@ msgctxt "@label" msgid "Queued" msgstr "順番を待つ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" -msgstr "Cura Connectに移動する" +msgid "Manage in browser" +msgstr "ブラウザで管理する" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "キューに印刷ジョブがありません。追加するには、スライスしてジョブを送信します。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "プリントジョブ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "合計印刷時間" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "待ち時間" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "印刷履歴の表示" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "既存の接続" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "このプリンター/グループはすでにCuraに追加されています。別のプリンター/グループを選択しえください。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "ネットワーク上で繋がったプリンターに接続" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" -msgstr "ネットワーク接続にて直接プリントするためには、必ずケーブルまたはWifiネットワークにて繋がっていることを確認してください。Curaをプリンターに接続していない場合でも、USBメモリを使って直接プリンターにg-codeファイルをトランスファーできます。" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." +msgstr "印刷ジョブをネットワークを介してプリンターに直接送信するには、ネットワークケーブルを使用してプリンターを確実にネットワークに接続するか、プリンターを WIFI ネットワークに接続します。Cura をプリンタに接続していない場合でも、USB ドライブを使用して g コードファイルをプリンターに転送することはできます。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "以下のリストからプリンタを選択します:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "編集" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "取り除く" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "更新" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "お持ちのプリンターがリストにない場合、ネットワーク・プリンティング・トラブルシューティング・ガイドを読んでください" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "タイプ" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /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:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /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:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 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:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 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:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "このアドレスのプリンターは応答していません。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "接続" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" -msgstr "" +msgstr "無効なIPアドレス" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146 msgctxt "@text" msgid "Please enter a valid IP address." -msgstr "" +msgstr "有効なIPアドレスを入力してください。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "プリンターアドレス" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." -msgstr "" +msgid "Enter the IP address of your printer on the network." +msgstr "ネットワーク内のプリンターのIPアドレスを入力してください。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "中止しました" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "終了" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "準備中..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "中止しています..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "一時停止しています..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "一時停止" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "再開しています…" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "アクションが必要です" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "%1 を %2 に終了します" @@ -2286,72 +2163,63 @@ msgctxt "@action:button" msgid "Override" msgstr "上書き" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" -msgstr[0] "割り当てられたプリンター %1 には以下の構成変更が必要です。" +msgstr[0] "割り当てられたプリンター %1 には以下の構成変更が必要です:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "プリンター %1 が割り当てられましたが、ジョブには不明な材料構成があります。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." -msgstr "材料 %1 を %2 から %3 に変更します。" +msgstr "材料 %1 を %2 から %3 に変更します。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "%3 を 材料 %1 にロードします(これは上書きできません)。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." -msgstr "プリントコア %1 を %2 から %3 に変更します。" +msgstr "プリントコア %1 を %2 から %3 に変更します。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "ビルドプレートを %1 に変更します(これは上書きできません)。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "上書きは、既存のプリンタ構成で指定された設定を使用します。これにより、印刷が失敗する場合があります。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "アルミニウム" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "プリンターにつなぐ" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" -"プリンタが接続されていること確認してください:\n" -"- プリンタの電源が入っていることを確認してください。\n" -"- プリンタがネットワークに接続されているか確認してください。" +"プリンタが接続されているか確認し、以下を行います。\n" +"- プリンタの電源が入っているか確認します。\n" +"- プリンタがネットワークに接続されているかどうかを確認します。- クラウドに接続されたプリンタを検出するためにサインインしているかどうかを確認します。" #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 msgctxt "@info" msgid "Please connect your printer to the network." -msgstr "" +msgstr "プリンターをネットワークに接続してください。" #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:156 msgctxt "@label link to technical assistance" @@ -2473,17 +2341,17 @@ msgstr "匿名データの収集に関する詳細" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:74 msgctxt "@text:window" msgid "Ultimaker Cura collects anonymous data in order to improve the print quality and user experience. Below is an example of all the data that is shared:" -msgstr "" +msgstr "Ultimaker Cura は、印刷品質とユーザーエクスペリエンスを向上させるために匿名データを収集します。以下は、共有されるすべてのデータの例です:" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:109 msgctxt "@text:window" msgid "I don't want to send anonymous data" -msgstr "" +msgstr "匿名データは送信しない" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:118 msgctxt "@text:window" msgid "Allow sending anonymous data" -msgstr "" +msgstr "匿名データの送信を許可する" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2533,7 +2401,7 @@ msgstr "深さ(mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 msgctxt "@info:tooltip" msgid "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model." -msgstr "" +msgstr "リトフェインの場合、暗いピクセルは、より多くの光を通すために厚い場所に対応する必要があります。高さマップの場合、明るいピクセルは高い地形を表しているため、明るいピクセルは生成された3D モデルの厚い位置に対応する必要があります。" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 msgctxt "@item:inlistbox" @@ -2614,7 +2482,7 @@ msgstr "プロジェクトを開く" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:58 msgctxt "@action:ComboBox option" msgid "Update existing" -msgstr "existingをアップデートする" +msgstr "現在のプロファイルに読み込む" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:59 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:116 @@ -2658,7 +2526,7 @@ msgid "Printer Group" msgstr "プリンターグループ" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "プロファイル設定" @@ -2671,20 +2539,20 @@ msgstr "このプロファイルの問題をどのように解決すればいい #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 msgctxt "@action:label" msgid "Name" msgstr "ネーム" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 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:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2857,18 +2725,24 @@ msgid "Previous" msgstr "前" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "ヒント" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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 "試し印刷" @@ -2971,7 +2845,7 @@ msgstr "プリント中止" #: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337 msgctxt "@label" msgid "Are you sure you want to abort the print?" -msgstr "本当にプリントを中止してもいいですか。" +msgstr "本当にプリントを中止してもいいですか?" #: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:71 msgctxt "@title" @@ -2988,155 +2862,155 @@ 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:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "ディスプレイ名" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "ブランド" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "フィラメントタイプ" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "色" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "プロパティ" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "密度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "直径" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "フィラメントコスト" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "フィラメントの重さ" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "フィラメントの長さ" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "毎メーターコスト" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "フィラメントをリンクを外す" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "記述" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "接着のインフォメーション" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /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:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "アクティベート" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "作成する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "複製" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "取り込む" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "プリンター" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "モデルを取り除きました" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 msgctxt "@label (%1 is object name)" msgid "Are you sure you wish to remove %1? This cannot be undone!" -msgstr "%1を取り外しますか?この作業はやり直しが効きません。" +msgstr "%1を取り外しますか?この作業はやり直しが効きません!" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "フィラメントを取り込む" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 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:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "フィラメントを書き出す" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 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:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "フィラメントの%1への書き出しが完了ました" @@ -3177,388 +3051,411 @@ msgid "Unit" msgstr "ユニット" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "一般" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "インターフェイス" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "言語:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "通貨:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "テーマ:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "セッティングを変更すると自動にスライスします。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "自動的にスライスする" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "ビューポイント機能" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "ディスプレイオーバーハング" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 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:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "アイテムを選択するとカメラが中心にきます" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "Curaのデフォルトのズーム機能は変更できるべきか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "カメラのズーム方向を反転する。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "ズームはマウスの方向に動くべきか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +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 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "マウスの方向にズームする" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 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:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "モデルの距離が離れているように確認する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 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:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "自動的にモデルをビルドプレートに落とす" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "G-codeリーダーに注意メッセージを表示します。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "G-codeリーダーに注意メッセージ" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "レイヤーはコンパティビリティモードに強制されるべきか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "レイヤービューコンパティビリティモードを強制する。(再起動が必要)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +msgctxt "@info:tooltip" +msgid "What type of camera rendering should be used?" +msgstr "どのような種類のカメラレンダリングを使用する必要がありますか?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "カメラレンダリング: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "パースペクティブ表示" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "平行投影表示" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "ファイルを開くまた保存" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 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:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "大きなモデルをスケールする" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "極端に小さなモデルをスケールアップする" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "モデルはロード後に選択しますか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@option:check" msgid "Select models when loaded" msgstr "ロード後にモデルを選択" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 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:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "プリンターの敬称をジョブネームに加える" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "プロジェクトファイルを保存時にサマリーを表示するべきか?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "プロジェクトを保存時にダイアログサマリーを表示する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "プロジェクトファイルを開く際のデフォルト機能" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "プロジェクトファイル開く際のデフォルト機能: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "毎回確認する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "常にプロジェクトとして開く" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "常にモデルを取り込む" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "プロファイル" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 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:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /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:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "常に変更した設定を廃棄する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:discardOrKeep" msgid "Always transfer changed settings to new profile" msgstr "常に変更した設定を新しいプロファイルに送信する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "プライバシー" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 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:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 msgctxt "@option:check" msgid "Check for updates on start" msgstr "スタート時にアップデートあるかどうかのチェック" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(不特定な) プリントインフォメーションを送信" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "詳細" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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:715 +#: /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:720 +#: /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:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "プリンター" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "名を変える" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419 msgctxt "@title:tab" msgid "Profiles" msgstr "プロファイル" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "作成する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "複製" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "プロファイルを作る" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 msgctxt "@info" msgid "Please provide a name for this profile." msgstr "このプロファイルの名前を指定してください。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "プロファイルを複製する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "プロファイル名を変える" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "プロファイルを取り込む" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "プロファイルを書き出す" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "プリンター:%1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /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:413 +#: /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:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 msgctxt "@action:button" msgid "Update profile with current settings/overrides" -msgstr "プロファイルを現在のセッティング/" +msgstr "プロファイルを現在のセッティング" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "今の変更を破棄する" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 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:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "設定は選択したプロファイルにマッチしています。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "グローバル設定" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "マーケットプレース" @@ -3621,33 +3518,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "検索設定" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "すべてのエクストルーダーの値をコピーする" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "すべてのエクストルーダーに対して変更された値をコピーする" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide 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 "Don't show this setting" msgstr "この設定を表示しない" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "常に見えるように設定する" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "視野のセッティングを構成する…" @@ -3662,32 +3559,32 @@ msgstr "" "いくらかの非表示設定は通常の計算された値と異なる値を使用します。\n" "表示されるようにクリックしてください。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." -msgstr "" +msgstr "影響を与えるすべての設定がオーバーライドされるため、この設定は使用されません。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "影響" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "次によって影響を受ける" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 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:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "この値は各エクストルーダーの値から取得します " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3697,7 +3594,7 @@ msgstr "" "この設定にプロファイルと異なった値があります。\n" "プロファイルの値を戻すためにクリックしてください。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3712,7 +3609,7 @@ msgctxt "@button" msgid "Recommended" msgstr "推奨" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "カスタム" @@ -3737,12 +3634,12 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "オーバーハングがあるモデルにサポートを生成します。このサポート構造なしでは、プリント中にオーバーハングのパーツが崩壊してしまいます。" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "密着性" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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 "ブリムまたはラフトのプリントの有効化。それぞれ、プリントの周り、また造形物の下に底面を加え切り取りやすくします。" @@ -3760,7 +3657,7 @@ 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 "" +msgstr "この品質プロファイルは、現在の材料およびノズル構成では使用できません。この品質プロファイルを有効にするには、これらを変更してください。" #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449 msgctxt "@tooltip" @@ -3795,7 +3692,7 @@ 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." -msgstr "" +msgstr "印刷設定は無効にされました。G-code ファイルは変更できません。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:52 msgctxt "@label" @@ -3827,59 +3724,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "G-codeの送信" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "カスタムG-codeコマンドを接続されているプリンターに送信します。「Enter」を押してコマンドを送信します。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "エクストルーダー" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "ホットエンドの目標温度。ホットエンドはこの温度に向けて上がったり下がったりします。これが0の場合、ホットエンドの加熱はオフになっています。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "このホットエンドの現在の温度です。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "ホットエンドをプリヒートする温度です。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "キャンセル" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "プレヒート" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "プリント開始前にホットエンドを加熱します。加熱中もプリントの調整を行えます、またホットエンドが加熱するまでプリント開始を待つ必要もありません。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "エクストルーダーのマテリアルの色。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "エクストルーダー入ったフィラメント。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "ノズルが入ったエクストルーダー。" @@ -3924,11 +3821,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "お気に入り" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -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" @@ -3944,32 +3836,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&プリンター" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "&フィラメント" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "アクティブエクストルーダーとしてセットする" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "エクストルーダーを有効にする" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "エクストルーダーを無効にする" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /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:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "&プロファイル" @@ -3979,7 +3871,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "カメラ位置 (&C)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "カメラビュー" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "パースペクティブ表示" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "平行投影表示" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "ビルドプレート (&B)" @@ -3999,17 +3906,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "視野のセッティングを管理する…" -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "&保存..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "&エクスポート..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "選択エクスポート..." @@ -4098,22 +4005,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "最近開いたファイルを開く" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "プリントをアクティベートする" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "ジョブネーム" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "プリント時間" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "残り時間" @@ -4121,12 +4028,17 @@ msgstr "残り時間" #: /home/ruben/Projects/Cura/resources/qml/ViewsSelector.qml:50 msgctxt "@label" msgid "View type" -msgstr "" +msgstr "タイプ表示" + +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "オブジェクトリスト" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" -msgstr "" +msgstr "高 %1" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:33 msgctxt "@button" @@ -4155,6 +4067,9 @@ msgid "" "- Store your Ultimaker Cura settings in the cloud for use anywhere\n" "- Get exclusive access to print profiles from leading brands" msgstr "" +"印刷ジョブをローカルネットワークの外の Ultimaker プリンタに送信します\n" +"- Ultimaker Cura の設定をクラウドに保管してどこからでも利用できるようにします\n" +"- 有名ブランドから印刷プロファイルへの例外アクセスを取得します" #: /home/ruben/Projects/Cura/resources/qml/Account/GeneralOperations.qml:78 msgctxt "@button" @@ -4171,32 +4086,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "コスト予測がありません" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "プレビュー" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "スライス中…" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" -msgstr "" +msgstr "スライスできません" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "処理" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "スライス" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "スライス処理の開始" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "キャンセル" @@ -4204,12 +4124,12 @@ msgstr "キャンセル" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:31 msgctxt "@label" msgid "Time estimation" -msgstr "" +msgstr "時間予測" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:114 msgctxt "@label" msgid "Material estimation" -msgstr "" +msgstr "材料予測" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:164 msgctxt "@label m for meter" @@ -4231,233 +4151,238 @@ msgctxt "@label" msgid "Preset printers" msgstr "プリンターのプリセット" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "プリンターの追加" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "プリンター管理" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "オンラインでトラブルシューティングガイドを表示する" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "留め金 フルスクリーン" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "全画面表示を終了する" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&取り消す" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&やりなおす" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&やめる" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "3Dビュー" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "フロントビュー" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "トップビュー" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "左サイドビュー" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "右サイドビュー" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Curaを構成する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&プリンターを追加する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "プリンターを管理する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "フィラメントを管理する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&現在の設定/無効にプロファイルをアップデートする" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&変更を破棄する" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&今の設定/無効からプロファイルを作成する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "プロファイルを管理する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "オンラインドキュメントを表示する" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "報告&バグ" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" -msgstr "" +msgstr "新情報" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "アバウト..." # can’t enter japanese text -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "&選択したモデルを削除" # can’t enter japanese text -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "選択したモデルを中央に移動" # can’t edit japanese text -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "選択した複数のモデル" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "モデルを消去する" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "プラットホームの中心にモデルを配置" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&モデルグループ" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "モデルを非グループ化" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "モ&デルの合体" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&モデルを増倍する…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "すべてのモデル選択" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "ビルドプレート上のクリア" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "すべてのモデルを読み込む" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "すべてのモデルをすべてのビルドプレートに配置" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "すべてのモデルをアレンジする" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "選択をアレンジする" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "すべてのモデルのポジションをリセットする" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "すべてのモデル&変更点をリセットする" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&ファイルを開く(s)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&新しいプロジェクト…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "コンフィグレーションのフォルダーを表示する" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "&マーケットプレース" @@ -4472,52 +4397,52 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "このパッケージは再起動後にインストールされます。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "設定" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "Cura を閉じる" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 msgctxt "@label" msgid "Are you sure you want to exit Cura?" msgstr "Cura を終了しますか?" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /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:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "パッケージをインストール" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "ファイルを開く(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "プリンターを追加する" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" -msgstr "" +msgstr "新情報" # can’t enter japanese #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 @@ -4536,7 +4461,7 @@ msgctxt "@text:window" msgid "" "You have customized some profile settings.\n" "Would you like to keep or discard those settings?" -msgstr "プロファイル設定をカスタマイズしました。この設定をキープしますか、キャンセルしますか。" +msgstr "プロファイル設定をカスタマイズしました。この設定をキープしますか、キャンセルしますか?" #: /home/ruben/Projects/Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml:110 msgctxt "@title:column" @@ -4735,32 +4660,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "プロジェクトを保存" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /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:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "エクストルーダー%1" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1とフィラメント" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" -msgstr "" +msgstr "材料" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "保存中のプロジェクトサマリーを非表示にする" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "保存" @@ -4793,158 +4718,158 @@ msgstr "モデルを取り込む" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DropDownWidget.qml:93 msgctxt "@label" msgid "Empty" -msgstr "" +msgstr "空にする" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:24 msgctxt "@label" msgid "Add a printer" -msgstr "" +msgstr "プリンターの追加" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:39 msgctxt "@label" msgid "Add a networked printer" -msgstr "" +msgstr "ネットワークプリンターの追加" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:81 msgctxt "@label" msgid "Add a non-networked printer" -msgstr "" +msgstr "非ネットワークプリンターの追加" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:70 msgctxt "@label" msgid "Add printer by IP address" -msgstr "" +msgstr "IP アドレスでプリンターを追加" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:133 msgctxt "@text" msgid "Place enter your printer's IP address." -msgstr "" +msgstr "プリンターの IP アドレスを入力してください。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:158 msgctxt "@button" msgid "Add" -msgstr "" +msgstr "追加" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:204 msgctxt "@label" msgid "Could not connect to device." -msgstr "" +msgstr "デバイスに接続できません。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:208 msgctxt "@label" msgid "The printer at this address has not responded yet." -msgstr "" +msgstr "このアドレスのプリンターは応答していません。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:240 msgctxt "@label" msgid "This printer cannot be added because it's an unknown printer or it's not the host of a group." -msgstr "" +msgstr "このプリンタは不明なプリンタであるか、またはグループのホストではないため、追加できません。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:329 msgctxt "@button" msgid "Back" -msgstr "" +msgstr "戻る" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:342 msgctxt "@button" msgid "Connect" -msgstr "" +msgstr "接続" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/FirstStartMachineActionsContent.qml:77 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:123 msgctxt "@button" msgid "Next" -msgstr "" +msgstr "次" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:23 msgctxt "@label" msgid "User Agreement" -msgstr "" +msgstr "ユーザー用使用許諾契約" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:56 msgctxt "@button" msgid "Agree" -msgstr "" +msgstr "同意する" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:70 msgctxt "@button" msgid "Decline and close" -msgstr "" +msgstr "拒否して閉じる" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:24 msgctxt "@label" msgid "Help us to improve Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura の改善にご協力ください" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:57 msgctxt "@text" msgid "Ultimaker Cura collects anonymous data to improve print quality and user experience, including:" -msgstr "" +msgstr "Ultimaker Cura は、印刷品質とユーザーエクスペリエンスを向上させるために以下の匿名データを収集します:" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:71 msgctxt "@text" msgid "Machine types" -msgstr "" +msgstr "プリンターのタイプ" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:77 msgctxt "@text" msgid "Material usage" -msgstr "" +msgstr "材料の利用状況" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:83 msgctxt "@text" msgid "Number of slices" -msgstr "" +msgstr "スライスの数" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:89 msgctxt "@text" msgid "Print settings" -msgstr "" +msgstr "プリント設定" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:102 msgctxt "@text" msgid "Data collected by Ultimaker Cura will not contain any personal information." -msgstr "" +msgstr "Ultimaker Cura が収集したデータには個人データは含まれません。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:103 msgctxt "@text" msgid "More information" -msgstr "" +msgstr "詳細" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WhatsNewContent.qml:24 msgctxt "@label" msgid "What's new in Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura の新機能" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:42 msgctxt "@label" msgid "There is no printer found over your network." -msgstr "" +msgstr "ネットワークにプリンターはありません。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:179 msgctxt "@label" msgid "Refresh" -msgstr "" +msgstr "更新" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:190 msgctxt "@label" msgid "Add printer by IP" -msgstr "" +msgstr "IP でプリンターを追加" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:223 msgctxt "@label" msgid "Troubleshooting" -msgstr "" +msgstr "トラブルシューティング" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" -msgstr "" +msgstr "プリンター名" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" -msgstr "" +msgstr "プリンター名を入力してください" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:36 msgctxt "@label" @@ -4954,37 +4879,37 @@ msgstr "Ultimaker Cloud" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:77 msgctxt "@text" msgid "The next generation 3D printing workflow" -msgstr "" +msgstr "次世代 3D 印刷ワークフロー" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:94 msgctxt "@text" msgid "- Send print jobs to Ultimaker printers outside your local network" -msgstr "" +msgstr "- 印刷ジョブをローカルネットワークの外から Ultimaker プリンターに送信します" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:97 msgctxt "@text" msgid "- Store your Ultimaker Cura settings in the cloud for use anywhere" -msgstr "" +msgstr "- Ultimaker Cura の設定をクラウドに保管してどこらでも利用でいるようにします" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:100 msgctxt "@text" msgid "- Get exclusive access to print profiles from leading brands" -msgstr "" +msgstr "- 有名ブランドから材料プロファイルへの例外アクセスを取得します" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:119 msgctxt "@button" msgid "Finish" -msgstr "" +msgstr "終わる" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:128 msgctxt "@button" msgid "Create an account" -msgstr "" +msgstr "アカウント作成" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:29 msgctxt "@label" msgid "Welcome to Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura にようこそ" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:47 msgctxt "@text" @@ -4992,26 +4917,13 @@ msgid "" "Please follow these steps to set up\n" "Ultimaker Cura. This will only take a few moments." msgstr "" +"以下の手順で\n" +"Ultimaker Cura を設定してください。数秒で完了します。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:58 msgctxt "@button" msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "現在のビルドプレートのみを表示" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "すべてのビルドプレートに配置" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "現在のビルドプレートを配置" +msgstr "はじめに" #: MachineSettingsAction/plugin.json msgctxt "description" @@ -5096,12 +5008,22 @@ msgstr "ファームウェアアップデーター" #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattened quality changes profile." -msgstr "" +msgstr "プロファイルを変更するフラットエンドクオリティーを作成する。" #: ProfileFlattener/plugin.json msgctxt "name" msgid "Profile Flattener" -msgstr "" +msgstr "プロファイルフラッター" + +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "AMFファイルの読込みをサポートしています。" + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "AMFリーダー" #: USBPrinting/plugin.json msgctxt "description" @@ -5113,16 +5035,6 @@ msgctxt "name" msgid "USB printing" msgstr "USBプリンティング" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "結果スライスをX3Gファイルとして保存して、このフォーマット(Malyan、Makerbot、およびその他のSailfishベースのプリンター)を読むプリンターをサポートできるようにします。" - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "X3GWriter" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5165,23 +5077,13 @@ msgstr "取り外し可能なドライブアウトプットデバイスプラグ #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Ultimaker3のプリンターのネットワーク接続を管理する。" +msgid "Manages network connections to Ultimaker networked printers." +msgstr "Ultimakerのネットワーク接属できるプリンターのネットワーク接続を管理します。" #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "UM3ネットワークコネクション" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" -msgstr "" +msgid "Ultimaker Network Connection" +msgstr "Ultimakerネットワーク接続" #: MonitorStage/plugin.json msgctxt "description" @@ -5246,12 +5148,12 @@ msgstr "サポート消去機能" #: UFPReader/plugin.json msgctxt "description" msgid "Provides support for reading Ultimaker Format Packages." -msgstr "" +msgstr "Ultimakerフォーマットパッケージの読み込みをサポートします。" #: UFPReader/plugin.json msgctxt "name" msgid "UFP Reader" -msgstr "" +msgstr "UFP リーダー" #: SliceInfoPlugin/plugin.json msgctxt "description" @@ -5336,12 +5238,12 @@ msgstr "2.7から3.0にバージョンアップグレート" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.5 to Cura 4.0." -msgstr "" +msgstr "Cura 3.5 から Cura 4.0 のコンフィグレーションアップグレート。" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "name" msgid "Version Upgrade 3.5 to 4.0" -msgstr "" +msgstr "3.5 から 4.0 にバージョンアップグレート" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" @@ -5356,12 +5258,12 @@ msgstr "3.4 から 3.5 にバージョンアップグレート" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 4.0 to Cura 4.1." -msgstr "" +msgstr "Cura 4.0 から Cura 4.1 のコンフィグレーションアップグレート。" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "name" msgid "Version Upgrade 4.0 to 4.1" -msgstr "" +msgstr "4.0 から 4.1 にバージョンアップグレート" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" @@ -5373,6 +5275,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "3.0から3.1にバージョンアップグレート" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "コンフィギュレーションを Cura 4.1 から Cura 4.2 にアップグレートする。" + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "4.0 から 4.1 にバージョンアップグレート" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5403,6 +5315,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "2.2 から2.4にバージョンアップグレート" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "Cura 4.2からCura 4.3の設定をアップグレードします。" + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "4.2から4.3にバージョンをアップグレート" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5413,6 +5335,16 @@ msgctxt "name" msgid "Image Reader" msgstr "画像リーダー" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "モデルファイルを読み込むためのサポートを供給します。" + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "Trimeshリーダー" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5443,16 +5375,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "3MFリーダー" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5476,12 +5398,12 @@ msgstr "G-codeリーダー" #: CuraDrive/plugin.json msgctxt "description" msgid "Backup and restore your configuration." -msgstr "" +msgstr "構成をバックアップしてリストアします。" #: CuraDrive/plugin.json msgctxt "name" msgid "Cura Backups" -msgstr "" +msgstr "Cura バックアップ" #: CuraProfileWriter/plugin.json msgctxt "description" @@ -5516,12 +5438,12 @@ msgstr "3MFリーダー" #: PreviewStage/plugin.json msgctxt "description" msgid "Provides a preview stage in Cura." -msgstr "" +msgstr "Curaでプレビューステージを提供します。" #: PreviewStage/plugin.json msgctxt "name" msgid "Preview Stage" -msgstr "" +msgstr "プレビューステージ" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -5543,6 +5465,297 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Curaプロファイルリーダー" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "ネットワーク上で接続。" + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "ネットワーク上で接続。プリンタへのリクエストを承認してください。" + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "ネットワーク上で接続。プリントを操作するアクセス権がありません。" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "プリンターへのアクセスが申請されました。プリンタへのリクエストを承認してください" + +#~ msgctxt "@info:title" +#~ msgid "Authentication status" +#~ msgstr "認証ステータス" + +#~ msgctxt "@info:title" +#~ msgid "Authentication Status" +#~ msgstr "認証ステータス" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "アクセスリクエストを再送信" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "プリンターへのアクセスが承認されました" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "このプリンターへのアクセスが許可されていないため、プリントジョブの送信ができませんでした。" + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "アクセスのリクエスト" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "アクセスのリクエスト送信" + +#~ msgctxt "@label" +#~ msgid "Unable to start a new print job." +#~ msgstr "新しいプリントジョブを開始できません。" + +#~ msgctxt "@label" +#~ msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." +#~ msgstr "Ultimakerの設定に問題があるため、印刷が開始できません。問題を解消してからやり直してください。" + +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "ミスマッチの構成" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "選択された構成にてプリントを開始してもいいですか?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "プリンターの設定、キャリブレーションとCuraの構成にミスマッチがあります。プリンターに設置されたプリントコア及びフィラメントを元にCuraをスライスすることで最良の印刷結果を出すことができます。" + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "新しいデータの送信 (temporarily) をブロックします、前のプリントジョブが送信中です。" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "プリンターにプリントデータを送信中" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "プリントデータを送信中" + +#~ msgctxt "@info:status" +#~ msgid "No Printcore loaded in slot {slot_number}" +#~ msgstr "プリントコアがスロット{slot_number}に入っていません。" + +#~ msgctxt "@info:status" +#~ msgid "No material loaded in slot {slot_number}" +#~ msgstr "材料がスロット{slot_number}に入っていません。" + +#~ msgctxt "@label" +#~ msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" +#~ msgstr "エクストルーダー {extruder_id} に対して異なるプリントコア(Cura: {cura_printcore_name}, プリンター: {remote_printcore_name})が選択されています。" + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "異なるフィラメントが入っています(Cura:{0}, プリンター{1})エクストルーダー{2}" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "プリンターと同期する" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "Curaで設定しているプリンタ構成を使用されますか?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "プリンターのプリントコア及びフィラメントが現在のプロジェクトと異なります。最善な印刷結果のために、プリンタに装着しているプリントコア、フィラメントに合わせてスライスして頂くことをお勧めします。" + +#~ msgctxt "@action:button" +#~ msgid "View in Monitor" +#~ msgstr "モニター表示" + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "プリンター’{printer_name}’が’{job_name}’のプリントを終了しました。" + +#~ msgctxt "@info:status" +#~ msgid "The print job '{job_name}' was finished." +#~ msgstr "プリントジョブ '{job_name}' は完了しました。" + +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "プリント終了" + +#~ msgctxt "@label:material" +#~ msgid "Empty" +#~ msgstr "空にする" + +#~ msgctxt "@label:material" +#~ msgid "Unknown" +#~ msgstr "不明" + +#~ msgctxt "@info:title" +#~ msgid "Cloud error" +#~ msgstr "クラウドエラー" + +#~ msgctxt "@info:status" +#~ msgid "Could not export print job." +#~ msgstr "印刷ジョブをエクスポートできませんでした。" + +#~ msgctxt "@info:description" +#~ msgid "There was an error connecting to the cloud." +#~ msgstr "クラウドの接続時にエラーが発生しました。" + +#~ msgctxt "@info:status" +#~ msgid "Uploading via Ultimaker Cloud" +#~ msgstr "Ultimaker Cloud 経由でアップロード中" + +#~ msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." +#~ msgid "Connect to Ultimaker Cloud" +#~ msgstr "Ultimaker Cloud に接続する" + +#~ msgctxt "@action" +#~ msgid "Don't ask me again for this printer." +#~ msgstr "このプリンタでは次回から質問しない。" + +#~ msgctxt "@info:status" +#~ msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." +#~ msgstr "Ultimaker のアカウントを使用して、どこからでも印刷ジョブを送信およびモニターできるようになりました。" + +#~ msgctxt "@info:status" +#~ msgid "Connected!" +#~ msgstr "接続しました!" + +#~ msgctxt "@action" +#~ msgid "Review your connection" +#~ msgstr "接続の確認" + +#~ msgctxt "@info:status Don't translate the XML tags !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "プロファイル{0}の中で定義されているマシン({1})は、現在お使いのマシン({2})と一致しないため、インポートできませんでした。" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "Failed to import profile from {0}:" +#~ msgstr "{0}からプロファイルの取り込に失敗しました:" + +#~ msgctxt "@window:title" +#~ msgid "Existing Connection" +#~ msgstr "既存の接続" + +#~ msgctxt "@message:text" +#~ msgid "This printer/group is already added to Cura. Please select another printer/group." +#~ msgstr "このプリンター/グループはすでにCuraに追加されています。別のプリンター/グループを選択しえください。" + +#~ msgctxt "@label" +#~ msgid "Enter the IP address or hostname of your printer on the network." +#~ msgstr "ネットワーク内のプリンターのIPアドレスまたはホストネームを入力してください。" + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "プリンターにつなぐ" + +#~ msgctxt "@title" +#~ msgid "Cura Settings Guide" +#~ msgstr "Cura 設定ガイド" + +#~ msgctxt "@info:tooltip" +#~ msgid "Zooming towards the mouse is not supported in the orthogonal perspective." +#~ msgstr "平行投影表示では、マウスの方向にズームする操作がサポートされていません。" + +#~ msgid "Orthogonal" +#~ msgstr "平行投影表示" + +#~ msgctxt "description" +#~ msgid "Manages network connections to Ultimaker 3 printers." +#~ msgstr "Ultimaker3のプリンターのネットワーク接続を管理する。" + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "UM3ネットワークコネクション" + +#~ msgctxt "description" +#~ msgid "Provides extra information and explanations about settings in Cura, with images and animations." +#~ msgstr "画像とアニメーションで、Cura の設定に関する追加情報と説明を提供します。" + +#~ msgctxt "name" +#~ msgid "Settings Guide" +#~ msgstr "設定ガイド" + +#~ msgctxt "@item:inmenu" +#~ msgid "Cura Settings Guide" +#~ msgstr "Cura 設定ガイド" + +#~ msgctxt "@info:generic" +#~ msgid "Settings have been changed to match the current availability of extruders: [%s]" +#~ msgstr "現在利用可能なエクストルーダー [%s] に合わせて設定が変更されました。" + +#~ msgctxt "@title:groupbox" +#~ msgid "User description" +#~ msgstr "ユーザー詳細" + +#~ msgctxt "@info" +#~ msgid "These options are not available because you are monitoring a cloud printer." +#~ msgstr "クラウドプリンタをモニタリングしている場合は、これらのオプションは利用できません。" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Go to Cura Connect" +#~ msgstr "Cura Connectに移動する" + +#~ msgctxt "@info" +#~ msgid "All jobs are printed." +#~ msgstr "すべてのジョブが印刷されます。" + +#~ msgctxt "@label link to connect manager" +#~ msgid "View print history" +#~ msgstr "印刷履歴の表示" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "ネットワーク接続にて直接プリントするためには、必ずケーブルまたはWifiネットワークにて繋がっていることを確認してください。Curaをプリンターに接続していない場合でも、USBメモリを使って直接プリンターにg-codeファイルをトランスファーできます。\n" +#~ "\n" +#~ "下のリストからプリンターを選択してください:" + +#~ msgctxt "@info" +#~ msgid "" +#~ "Please make sure your printer has a connection:\n" +#~ "- Check if the printer is turned on.\n" +#~ "- Check if the printer is connected to the network." +#~ msgstr "" +#~ "プリンタが接続されていること確認してください:\n" +#~ "- プリンタの電源が入っていることを確認してください。\n" +#~ "- プリンタがネットワークに接続されているか確認してください。" + +#~ msgctxt "@option:check" +#~ msgid "See only current build plate" +#~ msgstr "現在のビルドプレートのみを表示" + +#~ msgctxt "@action:button" +#~ msgid "Arrange to all build plates" +#~ msgstr "すべてのビルドプレートに配置" + +#~ msgctxt "@action:button" +#~ msgid "Arrange current build plate" +#~ msgstr "現在のビルドプレートを配置" + +#~ msgctxt "description" +#~ msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." +#~ msgstr "結果スライスをX3Gファイルとして保存して、このフォーマット(Malyan、Makerbot、およびその他のSailfishベースのプリンター)を読むプリンターをサポートできるようにします。" + +#~ msgctxt "name" +#~ msgid "X3GWriter" +#~ msgstr "X3GWriter" + +#~ msgctxt "description" +#~ msgid "Reads SVG files as toolpaths, for debugging printer movements." +#~ msgstr "プリンターの動きをデバッグするためのツールパスとして SVG ファイルを読み込みます。" + +#~ msgctxt "name" +#~ msgid "SVG Toolpath Reader" +#~ msgstr "SVG ツールパスリーダー" + #~ msgctxt "@item:inmenu" #~ msgid "Changelog" #~ msgstr "Changelog" @@ -5864,7 +6077,7 @@ msgstr "Curaプロファイルリーダー" #~ msgctxt "@label" #~ msgid "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?" -#~ msgstr "互換性のない構成で印刷ジョブを開始すると3Dプリンターを損傷することがあります。構成と印刷 %1 を上書きしますか?" +#~ msgstr "互換性のない構成で印刷ジョブを開始すると3Dプリンターを損傷することがあります。構成と印刷 %1 を上書きしますか?" #~ msgctxt "@window:title" #~ msgid "Override configuration configuration and start print" diff --git a/resources/i18n/ja_JP/fdmextruder.def.json.po b/resources/i18n/ja_JP/fdmextruder.def.json.po index 1da7befadd..60e0f20176 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.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+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 804f2d07f1..82890ad028 100644 --- a/resources/i18n/ja_JP/fdmprinter.def.json.po +++ b/resources/i18n/ja_JP/fdmprinter.def.json.po @@ -5,18 +5,18 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" -"PO-Revision-Date: 2019-03-13 14:00+0200\n" -"Last-Translator: Bothof \n" -"Language-Team: Japanese\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" +"PO-Revision-Date: 2019-09-23 14:15+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Japanese , Japanese \n" "Language: ja_JP\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 2.0.6\n" +"X-Generator: Poedit 2.2.1\n" #: fdmprinter.def.json msgctxt "machine_settings label" @@ -231,6 +231,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "プリンターに加熱式ビルドプレートが付属しているかどうか。" +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "造形温度安定化処理有り" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "機器が造形温度を安定化処理できるかどうかです。" + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -256,7 +266,7 @@ msgstr "エクストルーダーの数。エクストルーダーの単位は、 #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders That Are Enabled" -msgstr "" +msgstr "有効なエクストルーダーの数" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -266,7 +276,7 @@ msgstr "有効なエクストルーダートレインの数(ソフトウェア #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer Nozzle Diameter" -msgstr "" +msgstr "ノズル外径" # msgstr "ノズル外径" #: fdmprinter.def.json @@ -277,7 +287,7 @@ msgstr "ノズルの外径。" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle Length" -msgstr "" +msgstr "ノズル長さ" # msgstr "ノズルの長さ" #: fdmprinter.def.json @@ -288,7 +298,7 @@ msgstr "ノズル先端とプリントヘッドの最下部との高さの差。 #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle Angle" -msgstr "" +msgstr "ノズル角度" # msgstr "ノズル角度" #: fdmprinter.def.json @@ -299,7 +309,7 @@ msgstr "水平面とノズル直上の円錐部分との間の角度。" #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat Zone Length" -msgstr "" +msgstr "ノズル加熱長さ" # msgstr "加熱範囲" #: fdmprinter.def.json @@ -330,7 +340,7 @@ msgstr "Curaから温度を制御するかどうか。これをオフにして #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat Up Speed" -msgstr "" +msgstr "加熱速度" #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed description" @@ -340,7 +350,7 @@ msgstr "ノズルが加熱する速度(℃/ s)は、通常の印刷時温度 #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool Down Speed" -msgstr "" +msgstr "冷却速度" #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed description" @@ -359,8 +369,8 @@ msgstr "ノズルが冷却される前にエクストルーダーが静止しな #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" -msgstr "" +msgid "G-code Flavor" +msgstr "G-codeフレーバー" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" @@ -432,7 +442,7 @@ msgstr "材料を引き戻すためにG1コマンドのEプロパティーを使 #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed Areas" -msgstr "" +msgstr "拒否エリア" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" @@ -452,7 +462,7 @@ msgstr "ノズルが入ることができない領域を持つポリゴンのリ #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine Head Polygon" -msgstr "" +msgstr "プリントヘッドポリゴン" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -462,7 +472,7 @@ msgstr "プリントヘッドの2Dシルエット(ファンキャップは除 #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine Head & Fan Polygon" -msgstr "" +msgstr "プリントヘッドとファンポリゴン" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -472,7 +482,7 @@ msgstr "プリントヘッドの2Dシルエット(ファンキャップが含 #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry Height" -msgstr "" +msgstr "ガントリーの高さ" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -503,7 +513,7 @@ msgstr "ノズルの内径。標準以外のノズルを使用する場合は、 #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset with Extruder" -msgstr "" +msgstr "エクストルーダーのオフセット" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -1316,6 +1326,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "鋭い角" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "Zシーム位置" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "レイヤー内の各パーツの印刷を開始する場所付近の位置。" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "後方左" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "戻る" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "後方右" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "右" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "前方右" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "前" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "前左" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "左" + # msgstr "最も鋭利な角" #: fdmprinter.def.json msgctxt "z_seam_x label" @@ -1344,11 +1404,10 @@ msgctxt "z_seam_corner label" msgid "Seam Corner Preference" msgstr "シームコーナー設定" -# msgstr "薄層のプレファレンス" #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "モデル輪郭のコーナーがシーム(縫い目)の位置に影響するかどうかを制御します。 Noneはコーナーがシームの位置に影響を与えないことを意味します。 Seam(縫い目)を非表示にすると、内側のコーナーでシームが発生しやすくなります。 Seamを表示すると、外側の角にシームが発生する可能性が高くなります。 シームを隠す、または表示するを選択することにより、内側または外側コーナーでシームを発生させる可能性が高くなります。" +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "モデル輪郭の角がシームの位置に影響を及ぼすかどうかを制御します。[なし] は、角がシームの位置に影響を及ぼさないことを意味します。シームを隠すにすると、シームが内側の角に生じる可能性が高くなります。シームを外側にすると、シームが外側の角に生じる可能性が高くなります。シームを隠す/外側に出すは、シームが内側または外側の角に生じる可能性が高くなります。スマート・シームを使用すると、内外両側の角を使用できますが、適切な場合には内側の角が選択される頻度が高まります。" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1373,6 +1432,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "シーム表示/非表示" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "スマート・シーム" + # msgstr "シームを非表示または表示する" #: fdmprinter.def.json msgctxt "z_seam_relative label" @@ -1387,14 +1451,13 @@ msgstr "有効時は、Zシームは各パーツの真ん中に設定されま #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "小さいZギャップは無視" +msgid "No Skin in Z Gaps" +msgstr "Z 軸ギャップにスキンなし" -# msgstr "小さなZギャップを無視する" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "モデルに垂直方向のギャップが小さくある場合、これらの狭いスペースにおいて上部および下部スキンを生成するために、約5%の計算時間が追加されます。そのような場合は、設定を無効にしてください。" +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "モデルの垂直方向に少数層のみの小さなギャップがある場合、通常は、その狭いスペース内にある層の周囲にスキンが存在する必要があります。垂直方向のギャップが非常に小さい場合は、この設定を有効にしてスキンが生成されないようにします。これにより、印刷時間とスライス時間が向上しますが、技術的には空気にさらされたインフィルを残します。" #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1412,11 +1475,10 @@ msgctxt "ironing_enabled label" msgid "Enable Ironing" msgstr "アイロン有効" -# msgstr "アイロンを有効にする" #: fdmprinter.def.json 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 "ノズルから吐出せずに上部表面を再度動く機能。表面を溶かしてよりスムースにします。" +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 "微量の材料のみを吐出して、再度上部表面を動きます。これにより上部のプラスティックが溶かされ、よりスムースな表面になります。ノズルチャンバーには高い圧力が保たれるため、表面上のしわが材料で埋められます。" #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1518,6 +1580,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "アイロン時の最大加速度。" +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "表面公差量" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "壁とスキンの中央ライン(のエンドポイント)が交差する量(スキンラインのライン幅と壁の最内部に対する割合)を調整します。わずかな交差によって、壁がスキンにしっかりつながります。スキンと壁のライン幅が同じで、割合が50%を超えると、スキンが壁を通過している可能性があります。これは、その時点で、スキン押出機のノズルの位置が、すでに壁の真ん中を過ぎている可能性があるためです。" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "表面公差" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "壁とスキンの中央ライン(のエンドポイント)が交差する量を調整します。わずかな交差によって、壁がスキンにしっかりつながります。スキンと壁のライン幅が同じで、壁の幅が半分以上の値になると、スキンが壁を通過している可能性があります。これは、その時点で、スキン押出機のノズルの位置が、すでに壁の真ん中を過ぎている可能性があるためです。" + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1690,6 +1772,16 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "インフィルパターンはY軸に沿ってこの距離を移動します。" +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +msgstr "インフィル開始のランダム化" + +#: 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 "どのインフィルラインが最初に印刷されるかをランダム化します。これによって1つのセグメントが強くなることを回避しますが、追加の移動距離が必要となります。" + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1745,26 +1837,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "インフィルと壁が交差する量、わずかな交差によって壁がインフィルにしっかりつながります。" -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "表面公差量" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "壁とスキンの中央ライン(のエンドポイント)が交差する量(スキンラインのライン幅と壁の最内部に対する割合)を調整します。わずかな交差によって、壁がスキンにしっかりつながります。スキンと壁のライン幅が同じで、割合が50%を超えると、スキンが壁を通過している可能性があります。これは、その時点で、スキン押出機のノズルの位置が、すでに壁の真ん中を過ぎている可能性があるためです。" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "表面公差" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "壁とスキンの中央ライン(のエンドポイント)が交差する量を調整します。わずかな交差によって、壁がスキンにしっかりつながります。スキンと壁のライン幅が同じで、壁の幅が半分以上の値になると、スキンが壁を通過している可能性があります。これは、その時点で、スキン押出機のノズルの位置が、すでに壁の真ん中を過ぎている可能性があるためです。" - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1956,12 +2028,12 @@ msgstr "印刷中のデフォルトの温度。これはマテリアルの基本 #: fdmprinter.def.json msgctxt "build_volume_temperature label" msgid "Build Volume Temperature" -msgstr "" +msgstr "造形温度" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." -msgstr "" +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." +msgstr "印刷するプリンタ内の温度。これがゼロ (0) の場合、造形温度は調整できません。" #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -2073,6 +2145,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "収縮率をパーセントで示す。" +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "結晶性材料" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "この材料は加熱時にきれいに分解するタイプ (結晶性) または長く絡み合ったポリマー鎖 (非結晶) を作り出すタイプのいずれですか?" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "滲出防止引戻し位置" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "滲出を止めるには材料をどこまで引き戻す必要があるか。" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "滲出防止引戻し速度" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "滲出を防止するにはフィラメントスイッチ中に材料をどの程度速く引き戻す必要があるか。" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "フィラメントの引き出し準備引戻し位置" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "加熱中にフィラメントの引き出しが生じる距離。" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "フィラメント引き出し準備引戻し速度" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "フィラメントの引き出しが起こるための引き戻しの距離。" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "フィラメント引き出しの引戻し位置" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "フィラメントをきれいに引き出すにはフィラメントをどこまで引き戻すか。" + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "フィラメント引き出しの引戻し速度" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "フィラメントをきれいに引き出すために維持すべきフィラメントの引戻し速度。" + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "フィラメント引き出し温度" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "フィラメントがきれいに引き出される温度。" + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -2083,6 +2235,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "流れの補修: 押出されるマテリアルの量は、この値から乗算されます。" +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "壁のフロー" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "壁のフロー補正。" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "外壁のフロー" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "最外壁のフロー補正。" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "内壁のフロー" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "最外壁以外の壁のフロー補正。" + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "上面/下面フロー" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "上面/下面のフロー補正。" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "上部表面スキンフロー" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "印刷物の上部表面のフロー補正。" + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "インフィルフロー" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "インフィルのフロー補正。" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "スカート/ブリムのフロー" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "スカートまたはブリムのフロー補正。" + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "支持材のフロー" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "支持材のフロー補正。" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "支持材界面フロー" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "支持材の天井面または床面のフロー補正。" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "支持材天井面フロー" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "支持材天井面のフロー補正。" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "支持材床面フロー" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "支持材床面のフロー補正。" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "プライムタワーのフロー" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "プライムタワーのフロー補正。" + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2200,8 +2472,8 @@ msgstr "サポート引き戻し限界" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." -msgstr "サポートからサポートに直線移動する場合は、引き戻しを省略します。この設定を有効にすると、印刷時間が短縮されますが、サポート構造内部の糸引きが多くなります。" +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." +msgstr "支持材から支持材に直線移動する場合は、引戻しを省略します。この設定を有効にすると、印刷時間は節約できますが、支持材内で過剰な糸引きが発生する可能性があります。" #: fdmprinter.def.json msgctxt "material_standby_temperature label" @@ -2253,6 +2525,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "ノズル スイッチ後にフィラメントが押し戻される速度。" +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "ノズル切替え後のプライムに必要な余剰量" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "ノズル切替え後のプライムに必要な余剰材料。" + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2447,14 +2729,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "スカートとブリムのプリント速度 通常は一層目のスピードと同じですが、異なる速度でスカートやブリムをプリントしたい場合に設定してください。" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "最大Z速度" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "Z 軸ホップ速度" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "ビルトプレートが移動する最高速度 この値を0に設定すると、ファームウェアのデフォルト値のZの最高速度が適用されます。" +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "Z 軸ホップに対して垂直 Z 軸方向の動きが行われる速度。これは通常、ビルドプレートまたはマシンのガントリーが動きにくいため、印刷速度よりも低くなります。" #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2962,17 +3244,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "ノズルが既に印刷された部分を移動する際の間隔。" -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "同じパーツでレイヤーを開始する" - -#: fdmprinter.def.json -#, fuzzy -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "各レイヤーの印刷は決まった場所近い距離のポイントにて印刷を始めます。そのため、前のレイヤーが終わった部分から新しいレイヤーのプリントを開始しません。これによりオーバーハングや小さなパーツの印刷改善されますが、その代わり印刷時間が長くなります。" - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -3036,12 +3307,12 @@ msgstr "マシーンが1つのエクストルーダーからもう一つのエ #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height label" msgid "Z Hop After Extruder Switch Height" -msgstr "" +msgstr "エクストルーダースイッチ高さ後のZホップ" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height description" msgid "The height difference when performing a Z Hop after extruder switch." -msgstr "" +msgstr "エクストルーダースイッチ後のZホップを実行するときの高さの違い。" #: fdmprinter.def.json msgctxt "cooling label" @@ -3079,7 +3350,6 @@ msgid "Regular Fan Speed" msgstr "標準ファン速度" #: fdmprinter.def.json -#, fuzzy msgctxt "cool_fan_speed_min description" msgid "The speed at which the fans spin before hitting the threshold. When a layer prints faster than the threshold, the fan speed gradually inclines towards the maximum fan speed." msgstr "しきい値に達する前のファンの回転スピード。プリント速度がしきい値より速くなると、ファンの速度は上がっていきます。" @@ -3110,7 +3380,6 @@ msgid "Initial Fan Speed" msgstr "初期ファン速度" #: fdmprinter.def.json -#, fuzzy msgctxt "cool_fan_speed_0 description" msgid "The speed at which the fans spin at the start of the print. In subsequent layers the fan speed is gradually increased up to the layer corresponding to Regular Fan Speed at Height." msgstr "プリント開始時にファンが回転する速度。後続のレイヤーでは、ファン速度は、高さに応じて早くなります。" @@ -3321,7 +3590,7 @@ msgstr "クロス" #: fdmprinter.def.json msgctxt "support_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "ジャイロイド" #: fdmprinter.def.json msgctxt "support_wall_count label" @@ -3385,14 +3654,14 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "印刷した初期層間の距離が構造ライをサポートします。この設定は、対応濃度で算出されます。" #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "サポートインフィルラインの向き" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." -msgstr "対応するインフィルラインの向きです。サポートインフィルパターンは平面で回転します。" +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 "使用する整数線の方向のリスト。リストの要素は、層が進行するにつれて順番に使用され、リストの終わりに達すると、最初から再び開始されます。リスト項目はコンマで区切られ、リスト全体は大括弧で囲まれています。デフォルトは空のリストであり、デフォルト角度の0度を使用します。" #: fdmprinter.def.json msgctxt "support_brim_enable label" @@ -3522,8 +3791,8 @@ msgstr "サポート接合距離" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." -msgstr "X/Y方向のサポート構造間の最大距離。別の構造がこの値より近づいた場合、構造は 1 つにマージします。" +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." +msgstr "支持材間における X/Y 軸方向の最大距離。個別の支持材間の距離がこの値よりも近い場合、支持材は 1 つにマージされます。" #: fdmprinter.def.json msgctxt "support_offset label" @@ -3880,6 +4149,36 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "サポートのフロアに適用されるオフセット量。" +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +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 "使用する整数線の方向のリスト。リストの要素は、レイヤの層に合わせて順番に使用され、リストの末尾に達すると、最初から再び開始されます。リスト項目はコンマで区切られ、リスト全体は大括弧で囲まれています。デフォルトは空のリストとなり、デフォルトの角度を使用します(面がかなり厚い場合には45度と135度を交互に使用、それ以外では90度を使用)。" + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +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 "使用する整数線の方向のリスト。リストの要素は、レイヤの層に合わせて順番に使用され、リストの末尾に達すると、最初から再び開始されます。リスト項目はコンマで区切られ、リスト全体は大括弧で囲まれています。デフォルトは空のリストとなり、デフォルトの角度を使用します(面がかなり厚い場合には45度と135度を交互に使用、それ以外では90度を使用)。" + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +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 "使用する整数線の方向のリスト。リストの要素は、レイヤの層に合わせて順番に使用され、リストの末尾に達すると、最初から再び開始されます。リスト項目はコンマで区切られ、リスト全体は大括弧で囲まれています。デフォルトは空のリストとなり、デフォルトの角度を使用します(面がかなり厚い場合には45度と135度を交互に使用、それ以外では90度を使用)。" + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3922,14 +4221,14 @@ msgid "The diameter of a special tower." msgstr "特別な塔の直径。" #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "最小直径" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "最大タワーサポート直径" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." -msgstr "特殊なサポート塔によって支持される小さな領域のX / Y方向の最小直径。" +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "特殊なサポートタワーにより支持される小さな領域のX / Y方向の最小直径。" #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" @@ -4431,16 +4730,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "印刷物の横にタワーを造形して、ノズル交換後にフィラメントの調整をします。" -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "円形プライムタワー" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "プライムタワーを円形にします。" - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4481,16 +4770,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "プライムタワーの位置のy座標。" -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "プライムタワーのフロー" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "吐出量: マテリアルの吐出量はこの値の乗算で計算されます。" - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4504,12 +4783,12 @@ msgstr "1本のノズルでプライムタワーを印刷した後、もう片 #: fdmprinter.def.json msgctxt "prime_tower_brim_enable label" msgid "Prime Tower Brim" -msgstr "" +msgstr "プライムタワーブリム" #: fdmprinter.def.json msgctxt "prime_tower_brim_enable description" msgid "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type." -msgstr "" +msgstr "モデルがない場合でも、プライムタワーには、ブリムによって与えられる追加の付着が必要なことがあります。現在は「ラフト」密着型では使用できません。" #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4796,11 +5075,10 @@ msgctxt "smooth_spiralized_contours label" msgid "Smooth Spiralized Contours" msgstr "滑らかな輪郭" -# msgstr "滑らかならせん状の輪郭" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." -msgstr "らせん状の輪郭を滑らかにしてZシームの視認性を低下させます(Zシームは印刷物上でほとんどみえませんが、レイヤービューでは確認できます。)スムージングは​​細かいサーフェスの詳細をぼかす傾向があることに注意してください。" +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgstr "らせん状の輪郭を滑らかにしてZシームの視認性を低下させます (Zシームは印刷物上でほとんどみえませんが、層ビューでは確認できます)。スムージングは、細かい表面の詳細をぼかす傾向があることに注意してください。" #: fdmprinter.def.json msgctxt "relative_extrusion label" @@ -4820,7 +5098,7 @@ msgstr "実験" #: fdmprinter.def.json msgctxt "experimental description" msgid "experimental!" -msgstr "実験的" +msgstr "実験的!" #: fdmprinter.def.json msgctxt "support_tree_enable label" @@ -5041,12 +5319,12 @@ msgstr "スライス後の移動線分の最小サイズ。これを増やすと #: fdmprinter.def.json msgctxt "meshfix_maximum_deviation label" msgid "Maximum Deviation" -msgstr "" +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." -msgstr "" +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" @@ -5316,8 +5594,8 @@ msgstr "円錐サポートを有効にする" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "実験的機能:オーバーハング部分よりも底面のサポート領域を小さくする。" +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "オーバーハング部分よりも底面の支持領域を小さくする。" #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5659,7 +5937,7 @@ msgstr "ノズルと水平方向に下向きの線間の距離。大きな隙間 #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled label" msgid "Use Adaptive Layers" -msgstr "" +msgstr "適応レイヤーの使用" #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled description" @@ -5669,7 +5947,7 @@ msgstr "適応レイヤーは、レイヤーの高さをモデルの形状に合 #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation label" msgid "Adaptive Layers Maximum Variation" -msgstr "" +msgstr "適応レイヤー最大差分" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" @@ -5679,7 +5957,7 @@ msgstr "基準レイヤー高さと比較して許容される最大の高さ。 #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" msgid "Adaptive Layers Variation Step Size" -msgstr "" +msgstr "適応レイヤー差分ステップサイズ" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step description" @@ -5689,7 +5967,7 @@ msgstr "次のレイヤーの高さを前のレイヤーの高さと比べた差 #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold label" msgid "Adaptive Layers Threshold" -msgstr "" +msgstr "適応レイヤーしきい値" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" @@ -5909,152 +6187,192 @@ msgstr "サードブリッジのスキンレイヤーを印刷する際に使用 #: fdmprinter.def.json msgctxt "clean_between_layers label" msgid "Wipe Nozzle Between Layers" -msgstr "" +msgstr "レイヤー間のノズル拭き取り" #: fdmprinter.def.json msgctxt "clean_between_layers description" msgid "Whether to include nozzle wipe G-Code between layers. Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working." -msgstr "" +msgstr "レイヤー間にノズル拭き取り G-Code を含むかどうか指定します。この設定を有効にすると、レイヤ変更時の引き戻し動作に影響する可能性があります。拭き取りスクリプトが動作するレイヤでの押し戻しを制御するには、ワイプリトラクト設定を使用してください。" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe label" msgid "Material Volume Between Wipes" -msgstr "" +msgstr "ワイプ間の材料の量" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe description" msgid "Maximum material, that can be extruded before another nozzle wipe is initiated." -msgstr "" +msgstr "別のノズル拭き取りを行う前に押し出せる材料の最大量。" #: fdmprinter.def.json msgctxt "wipe_retraction_enable label" msgid "Wipe Retraction Enable" -msgstr "" +msgstr "ワイプリトラクト有効" #: fdmprinter.def.json msgctxt "wipe_retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area." -msgstr "" +msgstr "ノズルが印刷しないで良い領域を移動する際にフィラメントを引き戻す。" #: fdmprinter.def.json msgctxt "wipe_retraction_amount label" msgid "Wipe Retraction Distance" -msgstr "" +msgstr "ワイプリトラクト無効" #: fdmprinter.def.json msgctxt "wipe_retraction_amount description" msgid "Amount to retract the filament so it does not ooze during the wipe sequence." -msgstr "" +msgstr "拭き取りシーケンス中に出ないように押し戻すフィラメントの量。" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount label" msgid "Wipe Retraction Extra Prime Amount" -msgstr "" +msgstr "ワイプ引き戻し時の余分押し戻し量" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount description" msgid "Some material can ooze away during a wipe travel moves, which can be compensated for here." -msgstr "" +msgstr "いくつかの材料は、ワイプ移動中ににじみ出るためここで補償することができます。" #: fdmprinter.def.json msgctxt "wipe_retraction_speed label" msgid "Wipe Retraction Speed" -msgstr "" +msgstr "ワイプリトラクト速度" #: fdmprinter.def.json msgctxt "wipe_retraction_speed description" msgid "The speed at which the filament is retracted and primed during a wipe retraction move." -msgstr "" +msgstr "ワイプ引き戻し中にフィラメントが引き戻される時の速度。" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed label" msgid "Wipe Retraction Retract Speed" -msgstr "" +msgstr "ワイプ引き戻し速度" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed description" msgid "The speed at which the filament is retracted during a wipe retraction move." -msgstr "" +msgstr "ワイプ引き戻し移動時にフィラメントが引き戻される速度。" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "押し戻し速度の取り消し" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed description" msgid "The speed at which the filament is primed during a wipe retraction move." -msgstr "" +msgstr "ワイプ引き戻し移動時にフィラメントが押し戻されるスピード。" #: fdmprinter.def.json msgctxt "wipe_pause label" msgid "Wipe Pause" -msgstr "" +msgstr "ワイプ一時停止" #: fdmprinter.def.json msgctxt "wipe_pause description" msgid "Pause after the unretract." -msgstr "" +msgstr "引き戻し前に一時停止します。" #: fdmprinter.def.json msgctxt "wipe_hop_enable label" msgid "Wipe Z Hop When Retracted" -msgstr "" +msgstr "引き戻し時のワイプZホップ" #: fdmprinter.def.json msgctxt "wipe_hop_enable description" msgid "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." -msgstr "" +msgstr "引き戻しが完了すると、ビルドプレートが下降してノズルとプリントの間に隙間ができます。ノズルの走行中に造形物に当たるのを防ぎ、造形物をビルドプレートから剥がしてしまう現象を減らします。" #: fdmprinter.def.json msgctxt "wipe_hop_amount label" msgid "Wipe Z Hop Height" -msgstr "" +msgstr "ワイプZホップ高さ" #: fdmprinter.def.json msgctxt "wipe_hop_amount description" msgid "The height difference when performing a Z Hop." -msgstr "" +msgstr "Zホップを実行するときの高さ。" #: fdmprinter.def.json msgctxt "wipe_hop_speed label" msgid "Wipe Hop Speed" -msgstr "" +msgstr "ワイプホップ速度" #: fdmprinter.def.json msgctxt "wipe_hop_speed description" msgid "Speed to move the z-axis during the hop." -msgstr "" +msgstr "ホップ中に z 軸を移動する速度。" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x label" msgid "Wipe Brush X Position" -msgstr "" +msgstr "ワイプブラシXの位置" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x description" msgid "X location where wipe script will start." -msgstr "" +msgstr "ワイプスクリプトを開始するX位置。" #: fdmprinter.def.json msgctxt "wipe_repeat_count label" msgid "Wipe Repeat Count" -msgstr "" +msgstr "ワイプ繰り返し回数" #: fdmprinter.def.json msgctxt "wipe_repeat_count description" msgid "Number of times to move the nozzle across the brush." -msgstr "" +msgstr "ブラシ全体をノズルが移動する回数。" #: fdmprinter.def.json msgctxt "wipe_move_distance label" msgid "Wipe Move Distance" -msgstr "" +msgstr "ワイプ移動距離" #: fdmprinter.def.json msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." -msgstr "" +msgstr "ブラシ全体でヘッド前後に動かす距離。" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "小さい穴の最大サイズ" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "これより直径が小さな輪郭の穴とパーツは、Small Feature Speedを使用して印刷されます。" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "小型形体の最大長さ" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "この長さより短い輪郭の形体は、Small Feature Speedを使用して印刷されます。" + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +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 "小型形体は通常の印刷速度よりこの割合で印刷されます。低速の印刷によって、接着と精度が向上します。" + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor_0 label" +msgid "First 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 "小型形体の最初のレイヤーは通常の印刷速度よりこの割合で印刷されます。低速の印刷によって、接着と精度が向上します。" #: fdmprinter.def.json msgctxt "command_line_settings label" @@ -6116,6 +6434,95 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." 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." +#~ msgstr "ノズルから吐出せずに上部表面を再度動く機能。表面を溶かしてよりスムースにします。" + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "同じパーツでレイヤーを開始する" + +#, fuzzy +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "各レイヤーの印刷は決まった場所近い距離のポイントにて印刷を始めます。そのため、前のレイヤーが終わった部分から新しいレイヤーのプリントを開始しません。これによりオーバーハングや小さなパーツの印刷改善されますが、その代わり印刷時間が長くなります。" + +#~ msgctxt "support_infill_angles description" +#~ msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +#~ msgstr "対応するインフィルラインの向きです。サポートインフィルパターンは平面で回転します。" + +#~ 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." +#~ msgstr "最大解像度設定の解像度を下げるときに許容される最大偏差です。これを大きくすると、印刷の精度は低くなりますが、g-code は小さくなります。" + +#~ msgctxt "machine_gcode_flavor label" +#~ msgid "G-code Flavour" +#~ msgstr "G-codeフレーバー" + +# msgstr "薄層のプレファレンス" +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "モデル輪郭のコーナーがシーム(縫い目)の位置に影響するかどうかを制御します。 Noneはコーナーがシームの位置に影響を与えないことを意味します。 Seam(縫い目)を非表示にすると、内側のコーナーでシームが発生しやすくなります。 Seamを表示すると、外側の角にシームが発生する可能性が高くなります。 シームを隠す、または表示するを選択することにより、内側または外側コーナーでシームを発生させる可能性が高くなります。" + +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "小さいZギャップは無視" + +# msgstr "小さなZギャップを無視する" +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "モデルに垂直方向のギャップが小さくある場合、これらの狭いスペースにおいて上部および下部スキンを生成するために、約5%の計算時間が追加されます。そのような場合は、設定を無効にしてください。" + +#~ msgctxt "build_volume_temperature description" +#~ msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +#~ msgstr "造形に使用した温度。これがゼロ (0) の場合、造形温度は調整できません。" + +#~ msgctxt "limit_support_retractions description" +#~ msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +#~ msgstr "サポートからサポートに直線移動する場合は、引き戻しを省略します。この設定を有効にすると、印刷時間が短縮されますが、サポート構造内部の糸引きが多くなります。" + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "最大Z速度" + +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "ビルトプレートが移動する最高速度 この値を0に設定すると、ファームウェアのデフォルト値のZの最高速度が適用されます。" + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "X/Y方向のサポート構造間の最大距離。別の構造がこの値より近づいた場合、構造は 1 つにマージします。" + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "最小直径" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "特殊なサポート塔によって支持される小さな領域のX / Y方向の最小直径。" + +#~ msgctxt "prime_tower_circular label" +#~ msgid "Circular Prime Tower" +#~ msgstr "円形プライムタワー" + +#~ msgctxt "prime_tower_circular description" +#~ msgid "Make the prime tower as a circular shape." +#~ msgstr "プライムタワーを円形にします。" + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "吐出量: マテリアルの吐出量はこの値の乗算で計算されます。" + +# msgstr "滑らかならせん状の輪郭" +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "らせん状の輪郭を滑らかにしてZシームの視認性を低下させます(Zシームは印刷物上でほとんどみえませんが、レイヤービューでは確認できます。)スムージングは​​細かいサーフェスの詳細をぼかす傾向があることに注意してください。" + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "実験的機能:オーバーハング部分よりも底面のサポート領域を小さくする。" + #~ msgctxt "extruders_enabled_count label" #~ msgid "Number of Extruders that are enabled" #~ msgstr "有効なエクストルーダーの数" diff --git a/resources/i18n/ko_KR/cura.po b/resources/i18n/ko_KR/cura.po index 27dbbd5051..a8841db42a 100644 --- a/resources/i18n/ko_KR/cura.po +++ b/resources/i18n/ko_KR/cura.po @@ -5,20 +5,20 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" -"PO-Revision-Date: 2019-03-14 14:40+0100\n" -"Last-Translator: Korean \n" -"Language-Team: Jinbum Kim , Korean \n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" +"PO-Revision-Date: 2019-09-23 14:16+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Korean , Jinbum Kim , Korean \n" "Language: ko_KR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 2.1.1\n" +"X-Generator: Poedit 2.2.1\n" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "기기 설정" @@ -85,36 +85,45 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "프로파일이 병합되고 활성화되었습니다." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "AMF 파일" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USB 프린팅" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "USB를 통해 프린팅" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "USB를 통해 프린팅" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "USB를 통해 연결" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "USB 인쇄가 진행 중입니다. Cura를 닫으면 인쇄도 중단됩니다. 계속하시겠습니까?" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 -msgctxt "X3G Writer File Description" -msgid "X3G File" -msgstr "X3G 파일" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "프린트가 아직 진행 중입니다. Cura는 이전 프린트가 완료될 때까지는 USB를 통해 다른 프린트를 시작할 수 없습니다." + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +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" @@ -126,6 +135,11 @@ 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" @@ -160,7 +174,7 @@ msgid "Save to Removable Drive {0}" msgstr "이동식 드라이브 {0}에 저장" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "쓸 수있는 파일 형식이 없습니다!" @@ -197,10 +211,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/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "오류" @@ -229,9 +242,9 @@ 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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "경고" @@ -258,347 +271,149 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "이동식 드라이브" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "네트워크를 통해 프린팅" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "네트워크를 통해 프린팅" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "네트워크를 통해 연결됨." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "네트워크를 통해 연결되었습니다. 프린터의 접근 요청을 승인하십시오." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "네트워크를 통해 연결되었습니다. 프린터를 제어할 수 있는 권한이 없습니다." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "요청된 프린터에 대한 액세스. 프린터에서 요청을 승인하십시오" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "인증 상태" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "인증 상태" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "재시도" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "접근 요청 다시 보내기" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "허용 된 프린터에 대한 접근 허용" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "이 프린터로 프린팅 할 수 없습니다. 프린팅 작업을 보낼 수 없습니다." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "접근 요청" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "프린터에 접근 요청 보내기" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "새 프린팅 작업을 시작할 수 없습니다." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "Ultimaker의 설정에 문제가 있어 프린팅을 시작할 수 없습니다. 계속하기 전에 이 문제를 해결하십시오." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "일치하지 않는 구성" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "선택한 구성으로 프린팅 하시겠습니까?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "프린터와 Cura의 설정이 일치하지 않습니다. 최상의 결과를 얻으려면 프린터에 삽입 된 PrintCores 및 재료로 슬라이싱을 하십시오." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "새로운 작업 전송 (일시적)이 차단되어 이전 프린팅 작업을 계속 보냅니다." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "프린터로 데이터 보내기" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "데이터 전송 중" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "취소" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "{slot_number} 슬롯에 로드 된 프린터코어가 없음" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "{slot_number}에 로드 된 재료가 없음" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "익스트루더 {extruder_id}에 대해 다른 프린터코어 (Cura : {cura_printcore_name}, 프린터 : {remote_printcore_name})가 선택되었습니다." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "익스트루더 {2}에 다른 재료 (Cura : {0}, Printer : {1})가 선택됨" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "프린터와 동기화" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "Cura에서 현재 프린터 구성을 사용 하시겠습니까?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "프린터의 PrintCores와 재료는 현재 프로젝트 내의 재료와 다릅니다. 최상의 결과를 얻으려면 프린터에 삽입 된 PrintCores 및 재료로 슬라이싱 하십시오." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "네트워크를 통해 연결됨" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "출력 작업이 프린터에 성공적으로 보내졌습니다." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "데이터 전송 됨" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "모니터에서 보기" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "'{printer_name} 프린터가 '{job_name}' 프린팅을 완료했습니다." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "인쇄 작업 ‘{job_name}’이 완료되었습니다." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "프린팅이 완료됨" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "비어 있음" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "알 수 없음" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "Cloud를 통해 인쇄" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "Cloud를 통해 인쇄" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "Cloud를 통해 연결됨" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "Cloud 오류" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "인쇄 작업을 내보낼 수 없음." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "데이터를 프린터로 업로드할 수 없음." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "내일" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "오늘" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "Cloud 연결 시 오류가 있었습니다." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Ultimaker 계정을 사용하여 어디에서든 인쇄 작업을 전송하고 모니터링하십시오." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "이 프린터에 대해 다시 물어보지 마십시오." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "시작하기" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "이제 Ultimaker 계정을 사용하여 어디에서든 인쇄 작업을 전송하고 모니터링할 수 있습니다." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "연결됨!" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "연결 검토" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "네트워크를 통해 연결" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" -msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +msgctxt "@action:button Preceded by 'Ready to'." +msgid "Print over network" +msgstr "네트워크를 통해 프린팅" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "네트워크를 통해 프린팅" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "네트워크를 통해 연결됨" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "현재 작업이 전송될 때까지 기다려주십시오." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "프린트 오류" + +#: /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 "연결 시도 중인 {0}이(가) 그룹의 호스트가 아닙니다. 웹 페이지에서 그룹 호스트로 설정할 수 있습니다." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "그룹 호스트 아님" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "그룹 설정" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "Ultimaker 계정을 사용하여 어디에서든 인쇄 작업을 전송하고 모니터링하십시오." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "Ultimaker Cloud에 연결" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "시작하기" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "인쇄 작업 전송" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "프린트 작업을 프린터로 업로드하고 있습니다." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "출력 작업이 프린터에 성공적으로 보내졌습니다." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "데이터 전송 됨" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "Ultimaker Connect를 실행하지 않는 프린터에 연결하려 합니다. 프린터를 최신 펌웨어로 업데이트해 주십시오." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "프린터 업데이트" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "Cura가 {0} 그룹의 호스트 프린터에 설치되지 않은 재료 프로파일을 감지했습니다." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "재료를 프린터로 전송 중" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "데이터를 프린터로 업로드할 수 없음." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "네트워크 오류" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "내일" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "오늘" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "Cloud를 통해 인쇄" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "Cloud를 통해 인쇄" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" +msgstr "Cloud를 통해 연결됨" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 msgctxt "@item:inmenu" msgid "Monitor" msgstr "모니터" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "업데이트 정보에 액세스 할 수 없습니다." @@ -625,12 +440,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "레이어 뷰" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "와이어 프린팅이 활성화되어 있을 때 Cura는 레이어를 정확하게 표시하지 않습니다" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "시뮬레이션 뷰" @@ -685,6 +500,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF 이미지" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "Open Compressed Triangle Mesh" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "COLLADA Digital Asset Exchange" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "glTF Binary" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "glTF Embedded JSON" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "Stanford Triangle Format" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "Compressed COLLADA Digital Asset Exchange" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -765,19 +610,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF 파일" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "노즐" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "프로젝트 파일 열기" @@ -792,18 +637,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G 파일" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G 코드 파싱" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "G-코드 세부 정보" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "파일을 보내기 전에 g-코드가 프린터 및 프린터 구성에 적합한 지 확인하십시오. g-코드가 정확하지 않을 수 있습니다." @@ -906,16 +751,16 @@ msgstr "로그인 실패" #: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33 msgctxt "@info:not supported profile" msgid "Not supported" -msgstr "" +msgstr "지원되지 않음" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 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:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -928,116 +773,109 @@ msgid "Invalid file URL:" msgstr "유효하지 않은 파일 URL:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" -msgstr "현재 사용가능한 익스트루더: [% s]에 맞도록 설정이 변경되었습니다" +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 msgctxt "@info:title" msgid "Settings updated" msgstr "설정이 업데이트되었습니다" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "익스트루더 비활성화됨" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, 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:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, 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:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, 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:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "내보내기 완료" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, 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:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, 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:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, 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:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, 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:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "프로필 {0}({1})에 정의된 제품이 현재 제품({2})과 일치하지 않으므로, 불러올 수 없습니다." - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "프로파일 {0}을 성공적으로 가져 왔습니다." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, 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:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, 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:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "사용자 정의 프로파일" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "프로파일에 품질 타입이 누락되었습니다." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1086,7 +924,7 @@ msgstr "스커트" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:84 msgctxt "@tooltip" msgid "Prime Tower" -msgstr "" +msgstr "프라임 타워" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:85 msgctxt "@tooltip" @@ -1115,7 +953,7 @@ msgctxt "@action:button" msgid "Next" msgstr "다음" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1123,22 +961,36 @@ 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/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "닫기" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" 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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "취소" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1155,23 +1007,22 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "모든 파일 (*)" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" -msgstr "" +msgstr "아래 프린터는 그룹에 속해 있기 때문에 연결할 수 없습니다" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" -msgstr "" +msgstr "사용 가능한 네트워크 프린터" #: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689 msgctxt "@label" @@ -1184,12 +1035,12 @@ msgctxt "@label" msgid "Custom" msgstr "사용자 정의" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "\"프린팅 순서\"설정 값으로 인해 갠트리가 프린팅 된 모델과 충돌하지 않도록 출력물 높이가 줄어 들었습니다." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "출력물 크기" @@ -1207,46 +1058,51 @@ msgstr "적절한 데이터 또는 메타 데이터 없이 Cura 백업을 복원 #: /home/ruben/Projects/Cura/cura/Backups/Backup.py:125 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that is higher than the current version." -msgstr "" +msgstr "현재 버전보다 높은 Cura 백업을 복원하려고 시도했습니다." #: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationHelpers.py:79 msgctxt "@message" msgid "Could not read response." -msgstr "" +msgstr "응답을 읽을 수 없습니다." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 msgctxt "@info" msgid "Unable to reach the Ultimaker account server." msgstr "Ultimaker 계정 서버에 도달할 수 없음." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:66 +#: /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." -msgstr "" +msgstr "이 응용 프로그램을 인증할 때 필요한 권한을 제공하십시오." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "로그인을 시도할 때 예기치 못한 문제가 발생했습니다. 다시 시도하십시오." -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "객체를 증가시키고 배치" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "개체 배치 중" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "모든 개체가 출력할 수 있는 최대 사이즈 내에 위치할 수 없습니다" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "개체 배치 중" @@ -1395,48 +1251,48 @@ msgstr "로그" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" -msgstr "사용자 설명" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" +msgstr "사용자 설명(참고: 개발자가 다른 언어 사용자일 수 있으므로 가능하면 영어를 사용하십시오.)" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "보고서 전송" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "기기로드 중 ..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "장면 설정 중..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "인터페이스 로드 중 ..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, 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:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, 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:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "선택한 모델이 너무 작아서 로드할 수 없습니다." @@ -1444,103 +1300,108 @@ msgstr "선택한 모델이 너무 작아서 로드할 수 없습니다." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58 msgctxt "@title:label" msgid "Printer Settings" -msgstr "" +msgstr "프린터 설정" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X (너비)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (깊이)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (높이)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "빌드 플레이트 모양" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" -msgstr "" +msgstr "중앙이 원점" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" -msgstr "" +msgstr "히트 베드" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "히팅 빌드 사이즈" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "Gcode 유형" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" -msgstr "" +msgstr "프린트헤드 설정" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X 최소값" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y 최소값" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "X 최대값" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "Y 최대값" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" -msgstr "" +msgstr "갠트리 높이" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "익스트루더의 수" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" -msgstr "" +msgstr "시작 GCode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" -msgstr "" +msgstr "End GCode" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:42 msgctxt "@title:tab" @@ -1550,7 +1411,7 @@ msgstr "프린터" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:63 msgctxt "@title:label" msgid "Nozzle Settings" -msgstr "" +msgstr "노즐 설정" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:75 msgctxt "@label" @@ -1567,25 +1428,25 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "노즐 오프셋 X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "노즐 오프셋 Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "냉각 팬 번호" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" -msgstr "" +msgstr "익스트루더 시작 Gcode" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" -msgstr "" +msgstr "익스트루더 종료 Gcode" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 msgctxt "@action:button" @@ -1593,7 +1454,7 @@ msgid "Install" msgstr "설치" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "설치됨" @@ -1608,16 +1469,16 @@ msgctxt "@label" msgid "ratings" msgstr "평가" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "플러그인" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "재료" @@ -1627,49 +1488,49 @@ msgctxt "@label" msgid "Your rating" msgstr "귀하의 평가" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "버전" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "마지막으로 업데이트한 날짜" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "원작자" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "다운로드" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "설치 또는 업데이트에 로그인 필요" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" -msgstr "" +msgstr "재료 스플 구입" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "업데이트" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "업데이트 중" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1730,17 +1591,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "Cura 끝내기" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "커뮤니티 기여" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "커뮤니티 플러그인" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "일반 재료" @@ -1801,27 +1662,52 @@ msgctxt "@label" msgid "Featured" msgstr "추천" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "호환성" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +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" +msgstr "빌드 플레이트" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "서포트" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "품질" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "기술 데이터 시트" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "안전 데이터 시트" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "인쇄 가이드라인" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "웹 사이트" @@ -1921,70 +1807,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "펌웨어 누락으로 인해 펌웨어 업데이트에 실패했습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "프린터 관리" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "유리" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." -msgstr "Cloud 프린터를 모니터링하고 있기 때문에 이 옵션을 사용할 수 없습니다." +msgid "Please update your printer's firmware to manage the queue remotely." +msgstr "대기열을 원격으로 관리하려면 프린터 펌웨어를 업데이트하십시오." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "Cloud 프린터를 모니터링하고 있기 때문에 웹캠을 사용할 수 없습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "로딩 중..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "사용불가" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "연결할 수 없음" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "대기 상태" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "제목 없음" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "익명" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "구성 변경 필요" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "세부 사항" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "사용할 수 없는 프린터" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "첫 번째로 사용 가능" @@ -1994,197 +1886,180 @@ msgctxt "@label" msgid "Queued" msgstr "대기 중" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" -msgstr "Cura Connect로 이동" +msgid "Manage in browser" +msgstr "브라우저에서 관리" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "대기열에 프린팅 작업이 없습니다. 작업을 추가하려면 슬라이스하여 전송하십시오." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "인쇄 작업" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "총 인쇄 시간" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "대기" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "인쇄 내역 보기" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "기존 연결" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "이 프린터/그룹은 이미 Cura에 추가되었습니다. 다른 프린터/그룹을 선택하십시오." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "네트워크 프린터에 연결" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" -msgstr "" -"네트워크를 통해 프린터로 직접 프린팅하려면 네트워크 케이블을 사용하거나 프린터를 WIFI 네트워크에 연결하여 프린터가 네트워크에 연결되어 있는지 확인하십시오. Cura를 프린터에 연결하지 않은 경우에도 USB 드라이브를 사용하여 g 코드 파일을 프린터로 전송할 수 있습니다\n" -"\n" -"아래 목록에서 프린터를 선택하십시오:" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." +msgstr "네트워크를 통해 프린터로 직접 프린팅하려면 네트워크 케이블을 사용하거나 프린터를 WIFI 네트워크에 연결하여 프린터가 네트워크에 연결되어 있는지 확인하십시오. Cura를 프린터에 연결하지 않은 경우에도 USB 드라이브를 사용하여 g-코드 파일을 프린터로 전송할 수 있습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "아래 목록에서 프린터를 선택하십시오:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "편집" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "제거" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "새로고침" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "프린터가 목록에 없으면 네트워크 프린팅 문제 해결 가이드를 읽어보십시오" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "유형" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /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:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /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:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 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:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 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:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "이 주소의 프린터가 아직 응답하지 않았습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "연결" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" -msgstr "" +msgstr "잘못된 IP 주소" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146 msgctxt "@text" msgid "Please enter a valid IP address." -msgstr "" +msgstr "유효한 IP 주소를 입력하십시오." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "프린터 주소" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." -msgstr "" +msgid "Enter the IP address of your printer on the network." +msgstr "네트워크에 있는 프린터의 IP 주소를 입력하십시오." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "확인" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "중단됨" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "끝마친" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "준비 중..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "중지 중…" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "일시 정지 중…" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "일시 중지됨" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "다시 시작..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "조치가 필요함" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "%2에서 %1 완료" @@ -2288,72 +2163,62 @@ msgctxt "@action:button" msgid "Override" msgstr "무시하기" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" -msgstr[0] "할당된 프린터 %1의 구성을 다음과 같이 변경해야 합니다." +msgstr[0] "할당된 프린터 %1의 구성을 다음과 같이 변경해야 합니다:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "프린터 %1이(가) 할당되었으나 작업에 알 수 없는 재료 구성이 포함되어 있습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "재료 %1을(를) %2에서 %3(으)로 변경합니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "%3을(를) 재료 %1(으)로 로드합니다(이 작업은 무효화할 수 없음)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." msgstr "PrintCore %1을(를) %2에서 %3(으)로 변경합니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "빌드 플레이트를 %1(으)로 변경합니다(이 작업은 무효화할 수 없음)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "무시하기는 기존 프린터 구성과 함께 지정된 설정을 사용하게 됩니다. 이는 인쇄 실패로 이어질 수 있습니다." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "알루미늄" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "프린터에 연결" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" -"프린터에 연결이 있는지 확인하십시오.\n" -"- 프린터가 켜져 있는지 확인하십시오.\n" -"- 프린터가 네트워크에 연결되어 있는지 확인하십시오." +"프린터에 연결이 있는지 확인하십시오.⏎- 프린터가 켜져 있는지 확인하십시오.\n" +"- 프린터가 네트워크에 연결되어 있는지 확인하십시오.⏎- 클라우드로 연결된 프린터를 탐색할 수 있도록 로그인되어 있는지 확인하십시오." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 msgctxt "@info" msgid "Please connect your printer to the network." -msgstr "" +msgstr "프린터를 네트워크에 연결하십시오." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:156 msgctxt "@label link to technical assistance" @@ -2475,17 +2340,17 @@ msgstr "익명 데이터 수집에 대한 추가 정보" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:74 msgctxt "@text:window" msgid "Ultimaker Cura collects anonymous data in order to improve the print quality and user experience. Below is an example of all the data that is shared:" -msgstr "" +msgstr "Ultimaker Cura는 인쇄 품질과 사용자 경험을 개선하기 위해 익명 데이터를 수집합니다. 공유되는 모든 데이터의 예는 다음과 같습니다:" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:109 msgctxt "@text:window" msgid "I don't want to send anonymous data" -msgstr "" +msgstr "익명 데이터 전송을 원하지 않습니다" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:118 msgctxt "@text:window" msgid "Allow sending anonymous data" -msgstr "" +msgstr "익명 데이터 전송 허용" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2535,7 +2400,7 @@ msgstr "깊이 (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 msgctxt "@info:tooltip" msgid "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model." -msgstr "" +msgstr "리쏘페인(투각)의 경우 들어오는 더 많은 빛을 차단하기 위해서는 다크 픽셀이 더 두꺼운 위치에 해당해야 합니다. 높이 지도의 경우 더 밝은 픽셀이 더 높은 지역을 나타냅니다. 따라서 생성된 3D 모델에서 더 밝은 픽셀이 더 두꺼운 위치에 해당해야 합니다." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 msgctxt "@item:inlistbox" @@ -2660,7 +2525,7 @@ msgid "Printer Group" msgstr "프린터 그룹" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "프로파일 설정" @@ -2673,19 +2538,19 @@ msgstr "프로파일의 충돌을 어떻게 해결해야합니까?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 msgctxt "@action:label" msgid "Name" msgstr "이름" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 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:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2855,18 +2720,24 @@ msgid "Previous" msgstr "이전" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "팁" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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 "인쇄 실험" @@ -2986,155 +2857,155 @@ 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:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "표시 이름" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "상표" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "재료 유형" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "색깔" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "속성" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "밀도" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "직경" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "필라멘트 비용" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "필라멘트 무게" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "필라멘트 길이" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "미터 당 비용" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "재료 연결 해제" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "설명" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "접착 정보" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /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:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "활성화" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "생성" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "복제" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "가져오기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "프린터" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "제거 확인" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 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:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "재료 가져 오기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 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:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "재료 내보내기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 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:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "재료를 성공적으로 내보냈습니다" @@ -3175,388 +3046,411 @@ msgid "Unit" msgstr "단위" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "일반" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "인터페이스" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "언어:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "통화:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "테마:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "설정이 변경되면 자동으로 슬라이싱 합니다." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "자동으로 슬라이싱" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "뷰포트 동작" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "오버행 표시" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 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:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "항목을 선택하면 카메라를 중앙에 위치" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "큐라의 기본 확대 동작을 반전시켜야 합니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "카메라 줌의 방향을 반전시키기." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "확대가 마우스 방향으로 이동해야 합니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +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 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "마우스 방향으로 확대" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 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:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "모델이 분리되어 있는지 확인" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 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:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "모델을 빌드 플레이트에 자동으로 놓기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "g-code 리더에 주의 메시지를 표시하기." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "g-code 리더의 주의 메시지" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "레이어가 호환 모드로 강제 설정되어야합니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "레이어 뷰 호환성 모드로 전환 (다시 시작해야 함)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +msgctxt "@info:tooltip" +msgid "What type of camera rendering should be used?" +msgstr "어떤 유형의 카메라 렌더링을 사용해야 합니까?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "카메라 렌더링: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "원근" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "정투영" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "파일 열기 및 저장" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 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:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "큰 모델의 사이즈 수정" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "매우 작은 모델의 크기 조정" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "모델을 로드한 후에 선택해야 합니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@option:check" msgid "Select models when loaded" msgstr "로드된 경우 모델 선택" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 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:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "작업 이름에 기기 접두어 추가" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "프로젝트 파일을 저장할 때 요약이 표시되어야합니까?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "프로젝트 저장시 요약 대화 상자 표시" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "프로젝트 파일을 열 때 기본 동작" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "프로젝트 파일을 열 때 기본 동작 " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "항상 묻기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "항상 프로젝트로 열기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "항상 모델 가져 오기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "프로파일" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 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:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /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:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "항상 변경된 설정 삭제" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:discardOrKeep" msgid "Always transfer changed settings to new profile" msgstr "항상 변경된 설정을 새 프로파일로 전송" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "보안" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 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:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 msgctxt "@option:check" msgid "Check for updates on start" msgstr "시작시 업데이트 확인" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(익명) 프린터 정보 보내기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "추가 정보" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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:715 +#: /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:720 +#: /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:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "프린터" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "이름 바꾸기" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419 msgctxt "@title:tab" msgid "Profiles" msgstr "프로파일" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "생성" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "복제" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "프로파일 생성하기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 msgctxt "@info" msgid "Please provide a name for this profile." msgstr "이 프로파일에 대한 이름을 제공하십시오." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "프로파일 복제하기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "프로파일 이름 바꾸기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "프로파일 가져 오기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "프로파일 내보내기" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "프린터: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /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:413 +#: /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:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "현재 설정 / 재정의 프로파일 업데이트" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "현재 변경 사항 삭제" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 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:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "현재 설정이 선택한 프로파일과 일치합니다." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "전역 설정" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "시장" @@ -3619,33 +3513,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "검색 설정" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "모든 익스트루더에 값 복사" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "변경된 사항을 모든 익스트루더에 복사" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide 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 "Don't show this setting" msgstr "이 설정을 표시하지 않음" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "이 설정을 계속 표시하십시오" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "설정 보기..." @@ -3661,32 +3555,32 @@ msgstr "" "\n" "이 설정을 표시하려면 클릭하십시오." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." -msgstr "" +msgstr "영향을 미치는 모든 설정이 무효화되기 때문에 이 설정을 사용하지 않습니다." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "영향" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "영향을 받다" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 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:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "이 값은 익스트루더마다 결정됩니다 " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3697,7 +3591,7 @@ msgstr "" "\n" "프로파일 값을 복원하려면 클릭하십시오." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3713,7 +3607,7 @@ msgctxt "@button" msgid "Recommended" msgstr "추천" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "사용자 정의" @@ -3738,12 +3632,12 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "오버행이 있는 모델 서포트를 생성합니다. 이러한 구조가 없으면 이러한 부분이 프린팅 중에 붕괴됩니다." -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "부착" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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 "브림이나 라프트를 사용합니다. 이렇게하면 출력물 주변이나 아래에 평평한 영역이 추가되어 나중에 쉽게 자를 수 있습니다." @@ -3761,7 +3655,7 @@ 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 "" +msgstr "현재 재료 및 노즐 구성에 대해 이 품질 프로파일을 사용할 수 없습니다. 이 품질 프로파일을 활성화하려면 이를 변경하십시오." #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449 msgctxt "@tooltip" @@ -3797,7 +3691,7 @@ 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." -msgstr "" +msgstr "인쇄 설정 비활성화됨. G 코드 파일을 수정할 수 없습니다." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:52 msgctxt "@label" @@ -3829,59 +3723,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "Gcode 보내기" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "연결된 프린터에 사용자 정의 G 코드 명령을 보냅니다. ‘Enter’키를 눌러 명령을 전송하십시오." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "익스트루더" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "핫 엔드의 설정 온도입니다. 핫 엔드는 이 온도를 향해 가열되거나 냉각됩니다. 이 값이 0이면 온열 가열이 꺼집니다." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "이 익스트루더의 현재 온도." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "노즐을 예열하기 위한 온도." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "취소" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "예열" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "프린팅하기 전에 노즐을 미리 가열하십시오. 가열되는 동안 계속해서 프린팅물을 조정할 수 있으며, 프린팅 준비가 되면 노즐이 가열 될 때까지 기다릴 필요가 없습니다." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "이 익스트루더의 재료 색." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "이 익스트루더의 재료." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "이 익스트루더에 삽입 된 노즐." @@ -3926,11 +3820,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "즐겨찾기" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -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" @@ -3946,32 +3835,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "프린터(&P)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "재료(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "활성 익스트루더로 설정" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "익스트루더 사용" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "익스트루더 사용하지 않음" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /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:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "프로파일(&P)" @@ -3981,7 +3870,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "카메라 위치(&C)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "카메라 뷰" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "원근" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "직교" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "빌드 플레이트(&B)" @@ -4001,17 +3905,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "보기 설정 관리..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "저장(&S)..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "내보내기(&E)..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "내보내기 선택..." @@ -4098,22 +4002,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "최근 열어본 파일 열기" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "활성화된 프린트" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "작업 이름" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "프린팅 시간" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "예상 남은 시간" @@ -4121,12 +4025,17 @@ msgstr "예상 남은 시간" #: /home/ruben/Projects/Cura/resources/qml/ViewsSelector.qml:50 msgctxt "@label" msgid "View type" -msgstr "" +msgstr "유형 보기" + +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "개체 목록" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" -msgstr "" +msgstr "안녕하세요 %1" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:33 msgctxt "@button" @@ -4155,6 +4064,9 @@ msgid "" "- Store your Ultimaker Cura settings in the cloud for use anywhere\n" "- Get exclusive access to print profiles from leading brands" msgstr "" +"- 인쇄 작업을 로컬 네트워크 외부의 Ultimaker 프린터로 전송하십시오\n" +"- Ultimaker Cura 설정을 어디에서든 사용할 수 있도록 Cloud에 저장하십시오\n" +"- 유수 브랜드의 인쇄 프로파일에 대한 독점적 액세스 권한을 얻으십시오" #: /home/ruben/Projects/Cura/resources/qml/Account/GeneralOperations.qml:78 msgctxt "@button" @@ -4171,32 +4083,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "비용 추산 이용 불가" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "미리 보기" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "슬라이싱..." -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" -msgstr "" +msgstr "슬라이스 할 수 없습니다" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "처리" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "슬라이스" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "슬라이싱 프로세스 시작" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "취소" @@ -4204,12 +4121,12 @@ msgstr "취소" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:31 msgctxt "@label" msgid "Time estimation" -msgstr "" +msgstr "시간 추산" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:114 msgctxt "@label" msgid "Material estimation" -msgstr "" +msgstr "재료 추산" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:164 msgctxt "@label m for meter" @@ -4231,230 +4148,235 @@ msgctxt "@label" msgid "Preset printers" msgstr "프린터 사전 설정" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "프린터 추가" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "프린터 관리" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "온라인 문제 해결 가이드 표시" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "전채 화면 전환" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "전체 화면 종료" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "되돌리기(&U)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "다시하기(&R)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "종료(&Q)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "3D 보기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "앞에서 보기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "위에서 보기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "왼쪽에서 보기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "오른쪽에서 보기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Cura 구성 ..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "프린터 추가..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "프린터 관리 ..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "재료 관리..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "현재 설정으로로 프로파일 업데이트" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "현재 변경 사항 무시" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "현재 설정으로 프로파일 생성..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "프로파일 관리..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "온라인 문서 표시" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "버그 리포트" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" -msgstr "" +msgstr "새로운 기능" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "소개..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "선택한 모델 삭제" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "선택한 모델 중심에 놓기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "선택한 모델 복제" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "모델 삭제" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "플랫폼중심에 모델 위치하기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "모델 그룹화" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "모델 그룹 해제" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "모델 합치기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "모델 복제..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "모든 모델 선택" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "빌드 플레이트 지우기" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "모든 모델 다시 로드" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "모든 모델을 모든 빌드 플레이트에 정렬" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "모든 모델 정렬" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "선택한 모델 정렬" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "모든 모델의 위치 재설정" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "모든 모델의 변환 재설정" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "파일 열기..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "새로운 프로젝트..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "설정 폴더 표시" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "&시장" @@ -4469,52 +4391,52 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "다시 시작한 후에 이 패키지가 설치됩니다." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "설정" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "Cura 닫기" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 msgctxt "@label" msgid "Are you sure you want to exit Cura?" msgstr "Cura를 정말로 종료하시겠습니까?" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /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:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "패키지 설치" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "파일 열기" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "프린터 추가" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" -msgstr "" +msgstr "새로운 기능" #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 msgctxt "@label %1 is filled in with the name of an extruder" @@ -4735,32 +4657,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "프로젝트 저장" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /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:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "%1익스트루더" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & 재료" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" -msgstr "" +msgstr "재료" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "프로젝트 요약을 다시 저장하지 마십시오" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "저장" @@ -4793,158 +4715,158 @@ msgstr "모델 가져 오기" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DropDownWidget.qml:93 msgctxt "@label" msgid "Empty" -msgstr "" +msgstr "비어 있음" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:24 msgctxt "@label" msgid "Add a printer" -msgstr "" +msgstr "프린터 추가" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:39 msgctxt "@label" msgid "Add a networked printer" -msgstr "" +msgstr "네트워크 프린터 추가" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:81 msgctxt "@label" msgid "Add a non-networked printer" -msgstr "" +msgstr "비 네트워크 프린터 추가" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:70 msgctxt "@label" msgid "Add printer by IP address" -msgstr "" +msgstr "IP 주소로 프린터 추가" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:133 msgctxt "@text" msgid "Place enter your printer's IP address." -msgstr "" +msgstr "프린터의 IP 주소를 입력하십시오." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:158 msgctxt "@button" msgid "Add" -msgstr "" +msgstr "추가" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:204 msgctxt "@label" msgid "Could not connect to device." -msgstr "" +msgstr "장치에 연결할 수 없습니다." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:208 msgctxt "@label" msgid "The printer at this address has not responded yet." -msgstr "" +msgstr "이 주소의 프린터가 아직 응답하지 않았습니다." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:240 msgctxt "@label" msgid "This printer cannot be added because it's an unknown printer or it's not the host of a group." -msgstr "" +msgstr "알 수 없는 프린터이거나 그룹의 호스트가 아니기 때문에 이 프린터를 추가할 수 없습니다." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:329 msgctxt "@button" msgid "Back" -msgstr "" +msgstr "뒤로" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:342 msgctxt "@button" msgid "Connect" -msgstr "" +msgstr "연결" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/FirstStartMachineActionsContent.qml:77 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:123 msgctxt "@button" msgid "Next" -msgstr "" +msgstr "다음 것" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:23 msgctxt "@label" msgid "User Agreement" -msgstr "" +msgstr "사용자 계약" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:56 msgctxt "@button" msgid "Agree" -msgstr "" +msgstr "동의" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:70 msgctxt "@button" msgid "Decline and close" -msgstr "" +msgstr "거절 및 닫기" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:24 msgctxt "@label" msgid "Help us to improve Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura를 개선하는 데 도움을 주십시오" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:57 msgctxt "@text" msgid "Ultimaker Cura collects anonymous data to improve print quality and user experience, including:" -msgstr "" +msgstr "Ultimaker Cura는 인쇄 품질과 사용자 경험을 개선하기 위해 다음과 같은 익명 데이터를 수집합니다:" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:71 msgctxt "@text" msgid "Machine types" -msgstr "" +msgstr "기기 유형" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:77 msgctxt "@text" msgid "Material usage" -msgstr "" +msgstr "재료 사용" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:83 msgctxt "@text" msgid "Number of slices" -msgstr "" +msgstr "슬라이드 수" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:89 msgctxt "@text" msgid "Print settings" -msgstr "" +msgstr "인쇄 설정" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:102 msgctxt "@text" msgid "Data collected by Ultimaker Cura will not contain any personal information." -msgstr "" +msgstr "Ultimaker Cura가 수집하는 데이터에는 개인 정보가 포함되어 있지 않습니다." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:103 msgctxt "@text" msgid "More information" -msgstr "" +msgstr "추가 정보" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WhatsNewContent.qml:24 msgctxt "@label" msgid "What's new in Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura의 새로운 기능" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:42 msgctxt "@label" msgid "There is no printer found over your network." -msgstr "" +msgstr "네트워크에서 검색된 프린터가 없습니다." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:179 msgctxt "@label" msgid "Refresh" -msgstr "" +msgstr "새로고침" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:190 msgctxt "@label" msgid "Add printer by IP" -msgstr "" +msgstr "IP로 프린터 추가" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:223 msgctxt "@label" msgid "Troubleshooting" -msgstr "" +msgstr "문제 해결" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" -msgstr "" +msgstr "프린터 이름" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" -msgstr "" +msgstr "프린터의 이름을 설정하십시오" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:36 msgctxt "@label" @@ -4954,64 +4876,49 @@ msgstr "Ultimaker Cloud" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:77 msgctxt "@text" msgid "The next generation 3D printing workflow" -msgstr "" +msgstr "차세대 3D 인쇄 워크플로" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:94 msgctxt "@text" msgid "- Send print jobs to Ultimaker printers outside your local network" -msgstr "" +msgstr "- 로컬 네트워크 외부의 Ultimaker 프린터로 인쇄 작업 전송" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:97 msgctxt "@text" msgid "- Store your Ultimaker Cura settings in the cloud for use anywhere" -msgstr "" +msgstr "- 어디에서든 사용할 수 있도록 클라우드에 Ultimaker Cura 설정 저장" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:100 msgctxt "@text" msgid "- Get exclusive access to print profiles from leading brands" -msgstr "" +msgstr "- 유수 브랜드의 인쇄 프로파일에 대한 독점적인 액세스 권한 얻기" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:119 msgctxt "@button" msgid "Finish" -msgstr "" +msgstr "종료" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:128 msgctxt "@button" msgid "Create an account" -msgstr "" +msgstr "계정 생성" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:29 msgctxt "@label" msgid "Welcome to Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura에 오신 것을 환영합니다" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:47 msgctxt "@text" msgid "" "Please follow these steps to set up\n" "Ultimaker Cura. This will only take a few moments." -msgstr "" +msgstr "Ultimaker Cura를 설정하려면 다음 단계를 따르십시오. 오래 걸리지 않습니다." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:58 msgctxt "@button" msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "현재의 빌드 플레이트만 보기" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "모든 빌드 플레이트 정렬" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "현재의 빌드 플레이트 정렬" +msgstr "시작하기" #: MachineSettingsAction/plugin.json msgctxt "description" @@ -5096,12 +5003,22 @@ msgstr "펌웨어 업데이터" #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattened quality changes profile." -msgstr "" +msgstr "평평한 품질 변경 프로필을 만듭니다." #: ProfileFlattener/plugin.json msgctxt "name" msgid "Profile Flattener" -msgstr "" +msgstr "프로필 플래트너" + +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "AMF 파일 읽기가 지원됩니다." + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "AMF 리더" #: USBPrinting/plugin.json msgctxt "description" @@ -5113,16 +5030,6 @@ msgctxt "name" msgid "USB printing" msgstr "USB 프린팅" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "결과로 생성된 슬라이스를 X3G 파일로 저장해, 이 형식을 읽는 프린터를 지원합니다(Malyan, Makerbot 및 다른 Sailfish 기반 프린터)." - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "X3GWriter" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5165,23 +5072,13 @@ msgstr "이동식 드라이브 출력 장치 플러그인" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Ultimaker 3 프린터에 대한 네트워크 연결을 관리합니다." +msgid "Manages network connections to Ultimaker networked printers." +msgstr "Ultimaker 네트워크 연결 프린터에 대한 네트워크 연결을 관리합니다." #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "UM3 네트워크 연결" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" -msgstr "" +msgid "Ultimaker Network Connection" +msgstr "Ultimaker 네트워크 연결" #: MonitorStage/plugin.json msgctxt "description" @@ -5246,12 +5143,12 @@ msgstr "Support Eraser" #: UFPReader/plugin.json msgctxt "description" msgid "Provides support for reading Ultimaker Format Packages." -msgstr "" +msgstr "Ultimaker 포맷 패키지 읽기를 지원합니다." #: UFPReader/plugin.json msgctxt "name" msgid "UFP Reader" -msgstr "" +msgstr "UFP 리더기" #: SliceInfoPlugin/plugin.json msgctxt "description" @@ -5336,12 +5233,12 @@ msgstr "2.7에서 3.0으로 버전 업그레이드" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.5 to Cura 4.0." -msgstr "" +msgstr "Cura 3.5에서 Cura 4.0으로 구성을 업그레이드합니다." #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "name" msgid "Version Upgrade 3.5 to 4.0" -msgstr "" +msgstr "버전 업그레이드 3.5에서 4.0" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" @@ -5356,12 +5253,12 @@ msgstr "3.4에서 3.5로 버전 업그레이드" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 4.0 to Cura 4.1." -msgstr "" +msgstr "Cura 4.0에서 Cura 4.1로 구성을 업그레이드합니다." #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "name" msgid "Version Upgrade 4.0 to 4.1" -msgstr "" +msgstr "버전 업그레이드 4.0에서 4.1" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" @@ -5373,6 +5270,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "3.0에서 3.1로 버전 업그레이드" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "Cura 4.1에서 Cura 4.2로 구성을 업그레이드합니다." + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "4.1에서 4.2로 버전 업그레이드" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5403,6 +5310,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "2.2에서 2.4로 버전 업그레이드" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "Cura 4.2에서 Cura 4.3으로 구성을 업그레이드합니다." + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "4.2에서 4.3로 버전 업그레이드" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5413,6 +5330,16 @@ msgctxt "name" msgid "Image Reader" msgstr "이미지 리더" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "모델 파일 읽기 기능을 제공합니다." + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "Trimesh 리더" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5443,16 +5370,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "3MF 리더" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5476,12 +5393,12 @@ msgstr "G-코드 리더" #: CuraDrive/plugin.json msgctxt "description" msgid "Backup and restore your configuration." -msgstr "" +msgstr "구성을 백업하고 복원합니다." #: CuraDrive/plugin.json msgctxt "name" msgid "Cura Backups" -msgstr "" +msgstr "Cura 백업" #: CuraProfileWriter/plugin.json msgctxt "description" @@ -5516,12 +5433,12 @@ msgstr "3MF 기록기" #: PreviewStage/plugin.json msgctxt "description" msgid "Provides a preview stage in Cura." -msgstr "" +msgstr "Cura에서 미리 보기 단계를 제공합니다." #: PreviewStage/plugin.json msgctxt "name" msgid "Preview Stage" -msgstr "" +msgstr "미리 보기 단계" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -5543,6 +5460,297 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura 프로파일 리더" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "네트워크를 통해 연결됨." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "네트워크를 통해 연결되었습니다. 프린터의 접근 요청을 승인하십시오." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "네트워크를 통해 연결되었습니다. 프린터를 제어할 수 있는 권한이 없습니다." + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "요청된 프린터에 대한 액세스. 프린터에서 요청을 승인하십시오" + +#~ msgctxt "@info:title" +#~ msgid "Authentication status" +#~ msgstr "인증 상태" + +#~ msgctxt "@info:title" +#~ msgid "Authentication Status" +#~ msgstr "인증 상태" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "접근 요청 다시 보내기" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "허용 된 프린터에 대한 접근 허용" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "이 프린터로 프린팅 할 수 없습니다. 프린팅 작업을 보낼 수 없습니다." + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "접근 요청" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "프린터에 접근 요청 보내기" + +#~ msgctxt "@label" +#~ msgid "Unable to start a new print job." +#~ msgstr "새 프린팅 작업을 시작할 수 없습니다." + +#~ msgctxt "@label" +#~ msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." +#~ msgstr "Ultimaker의 설정에 문제가 있어 프린팅을 시작할 수 없습니다. 계속하기 전에 이 문제를 해결하십시오." + +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "일치하지 않는 구성" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "선택한 구성으로 프린팅 하시겠습니까?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "프린터와 Cura의 설정이 일치하지 않습니다. 최상의 결과를 얻으려면 프린터에 삽입 된 PrintCores 및 재료로 슬라이싱을 하십시오." + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "새로운 작업 전송 (일시적)이 차단되어 이전 프린팅 작업을 계속 보냅니다." + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "프린터로 데이터 보내기" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "데이터 전송 중" + +#~ msgctxt "@info:status" +#~ msgid "No Printcore loaded in slot {slot_number}" +#~ msgstr "{slot_number} 슬롯에 로드 된 프린터코어가 없음" + +#~ msgctxt "@info:status" +#~ msgid "No material loaded in slot {slot_number}" +#~ msgstr "{slot_number}에 로드 된 재료가 없음" + +#~ msgctxt "@label" +#~ msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" +#~ msgstr "익스트루더 {extruder_id}에 대해 다른 프린터코어 (Cura : {cura_printcore_name}, 프린터 : {remote_printcore_name})가 선택되었습니다." + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "익스트루더 {2}에 다른 재료 (Cura : {0}, Printer : {1})가 선택됨" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "프린터와 동기화" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "Cura에서 현재 프린터 구성을 사용 하시겠습니까?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "프린터의 PrintCores와 재료는 현재 프로젝트 내의 재료와 다릅니다. 최상의 결과를 얻으려면 프린터에 삽입 된 PrintCores 및 재료로 슬라이싱 하십시오." + +#~ msgctxt "@action:button" +#~ msgid "View in Monitor" +#~ msgstr "모니터에서 보기" + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "'{printer_name} 프린터가 '{job_name}' 프린팅을 완료했습니다." + +#~ msgctxt "@info:status" +#~ msgid "The print job '{job_name}' was finished." +#~ msgstr "인쇄 작업 ‘{job_name}’이 완료되었습니다." + +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "프린팅이 완료됨" + +#~ msgctxt "@label:material" +#~ msgid "Empty" +#~ msgstr "비어 있음" + +#~ msgctxt "@label:material" +#~ msgid "Unknown" +#~ msgstr "알 수 없음" + +#~ msgctxt "@info:title" +#~ msgid "Cloud error" +#~ msgstr "Cloud 오류" + +#~ msgctxt "@info:status" +#~ msgid "Could not export print job." +#~ msgstr "인쇄 작업을 내보낼 수 없음." + +#~ msgctxt "@info:description" +#~ msgid "There was an error connecting to the cloud." +#~ msgstr "Cloud 연결 시 오류가 있었습니다." + +#~ msgctxt "@info:status" +#~ msgid "Uploading via Ultimaker Cloud" +#~ msgstr "Ultimaker Cloud를 통해 업로드하는 중" + +#~ msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." +#~ msgid "Connect to Ultimaker Cloud" +#~ msgstr "Ultimaker Cloud에 연결" + +#~ msgctxt "@action" +#~ msgid "Don't ask me again for this printer." +#~ msgstr "이 프린터에 대해 다시 물어보지 마십시오." + +#~ msgctxt "@info:status" +#~ msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." +#~ msgstr "이제 Ultimaker 계정을 사용하여 어디에서든 인쇄 작업을 전송하고 모니터링할 수 있습니다." + +#~ msgctxt "@info:status" +#~ msgid "Connected!" +#~ msgstr "연결됨!" + +#~ msgctxt "@action" +#~ msgid "Review your connection" +#~ msgstr "연결 검토" + +#~ msgctxt "@info:status Don't translate the XML tags !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "프로필 {0}({1})에 정의된 제품이 현재 제품({2})과 일치하지 않으므로, 불러올 수 없습니다." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "Failed to import profile from {0}:" +#~ msgstr "{0}에서 프로파일을 가져오지 못했습니다:" + +#~ msgctxt "@window:title" +#~ msgid "Existing Connection" +#~ msgstr "기존 연결" + +#~ msgctxt "@message:text" +#~ msgid "This printer/group is already added to Cura. Please select another printer/group." +#~ msgstr "이 프린터/그룹은 이미 Cura에 추가되었습니다. 다른 프린터/그룹을 선택하십시오." + +#~ msgctxt "@label" +#~ msgid "Enter the IP address or hostname of your printer on the network." +#~ msgstr "네트워크에 프린터의 IP 주소 또는 호스트 이름을 입력하십시오." + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "프린터에 연결" + +#~ msgctxt "@title" +#~ msgid "Cura Settings Guide" +#~ msgstr "Cura 설정 가이드" + +#~ msgctxt "@info:tooltip" +#~ msgid "Zooming towards the mouse is not supported in the orthogonal perspective." +#~ msgstr "직교 시점에서는 마우스 방향으로 확대가 지원되지 않습니다." + +#~ msgid "Orthogonal" +#~ msgstr "직교" + +#~ msgctxt "description" +#~ msgid "Manages network connections to Ultimaker 3 printers." +#~ msgstr "Ultimaker 3 프린터에 대한 네트워크 연결을 관리합니다." + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "UM3 네트워크 연결" + +#~ msgctxt "description" +#~ msgid "Provides extra information and explanations about settings in Cura, with images and animations." +#~ msgstr "이미지 및 애니메이션과 함께 Cura 설정에 대한 추가 정보와 설명을 제공합니다." + +#~ msgctxt "name" +#~ msgid "Settings Guide" +#~ msgstr "설정 가이드" + +#~ msgctxt "@item:inmenu" +#~ msgid "Cura Settings Guide" +#~ msgstr "Cura 설정 가이드" + +#~ msgctxt "@info:generic" +#~ msgid "Settings have been changed to match the current availability of extruders: [%s]" +#~ msgstr "현재 사용가능한 익스트루더: [% s]에 맞도록 설정이 변경되었습니다" + +#~ msgctxt "@title:groupbox" +#~ msgid "User description" +#~ msgstr "사용자 설명" + +#~ msgctxt "@info" +#~ msgid "These options are not available because you are monitoring a cloud printer." +#~ msgstr "Cloud 프린터를 모니터링하고 있기 때문에 이 옵션을 사용할 수 없습니다." + +#~ msgctxt "@label link to connect manager" +#~ msgid "Go to Cura Connect" +#~ msgstr "Cura Connect로 이동" + +#~ msgctxt "@info" +#~ msgid "All jobs are printed." +#~ msgstr "모든 작업이 인쇄됩니다." + +#~ msgctxt "@label link to connect manager" +#~ msgid "View print history" +#~ msgstr "인쇄 내역 보기" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "네트워크를 통해 프린터로 직접 프린팅하려면 네트워크 케이블을 사용하거나 프린터를 WIFI 네트워크에 연결하여 프린터가 네트워크에 연결되어 있는지 확인하십시오. Cura를 프린터에 연결하지 않은 경우에도 USB 드라이브를 사용하여 g 코드 파일을 프린터로 전송할 수 있습니다\n" +#~ "\n" +#~ "아래 목록에서 프린터를 선택하십시오:" + +#~ msgctxt "@info" +#~ msgid "" +#~ "Please make sure your printer has a connection:\n" +#~ "- Check if the printer is turned on.\n" +#~ "- Check if the printer is connected to the network." +#~ msgstr "" +#~ "프린터에 연결이 있는지 확인하십시오.\n" +#~ "- 프린터가 켜져 있는지 확인하십시오.\n" +#~ "- 프린터가 네트워크에 연결되어 있는지 확인하십시오." + +#~ msgctxt "@option:check" +#~ msgid "See only current build plate" +#~ msgstr "현재의 빌드 플레이트만 보기" + +#~ msgctxt "@action:button" +#~ msgid "Arrange to all build plates" +#~ msgstr "모든 빌드 플레이트 정렬" + +#~ msgctxt "@action:button" +#~ msgid "Arrange current build plate" +#~ msgstr "현재의 빌드 플레이트 정렬" + +#~ msgctxt "description" +#~ msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." +#~ msgstr "결과로 생성된 슬라이스를 X3G 파일로 저장해, 이 형식을 읽는 프린터를 지원합니다(Malyan, Makerbot 및 다른 Sailfish 기반 프린터)." + +#~ msgctxt "name" +#~ msgid "X3GWriter" +#~ msgstr "X3GWriter" + +#~ msgctxt "description" +#~ msgid "Reads SVG files as toolpaths, for debugging printer movements." +#~ msgstr "프린터 이동 디버깅을 위해 Toolpath로 SVG 파일을 읽습니다." + +#~ msgctxt "name" +#~ msgid "SVG Toolpath Reader" +#~ msgstr "SVG Toolpath 리더기" + #~ msgctxt "@item:inmenu" #~ msgid "Changelog" #~ msgstr "변경 내역" diff --git a/resources/i18n/ko_KR/fdmextruder.def.json.po b/resources/i18n/ko_KR/fdmextruder.def.json.po index d9ef6694d5..3f3a8596d1 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.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+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 e2bbb97f1a..fed3ac8f5a 100644 --- a/resources/i18n/ko_KR/fdmprinter.def.json.po +++ b/resources/i18n/ko_KR/fdmprinter.def.json.po @@ -5,12 +5,12 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" -"PO-Revision-Date: 2019-03-13 14:00+0200\n" -"Last-Translator: Korean \n" -"Language-Team: Jinbum Kim , Korean \n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" +"PO-Revision-Date: 2019-07-29 15:51+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Korean , Jinbum Kim , Korean \n" "Language: ko_KR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -216,6 +216,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "기기에 히팅 빌드 플레이트가 있는지 여부." +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "빌드 볼륨 온도 안정화" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "기기의 빌드 볼륨 온도 안정화 지원 여부입니다." + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -239,7 +249,7 @@ msgstr "익스트루더의 수. 익스트루더는 피더, 보우 덴 튜브 및 #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders That Are Enabled" -msgstr "" +msgstr "활성화된 익스트루더의 수" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -249,7 +259,7 @@ msgstr "사용 가능한 익스트루더 수; 소프트웨어로 자동 설정" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer Nozzle Diameter" -msgstr "" +msgstr "외부 노즐의 외경" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter description" @@ -259,7 +269,7 @@ msgstr "노즐 끝의 외경." #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle Length" -msgstr "" +msgstr "노즐 길이" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance description" @@ -269,7 +279,7 @@ msgstr "노즐의 끝과 프린트 헤드의 가장 낮은 부분 사이의 높 #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle Angle" -msgstr "" +msgstr "노즐 각도" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle description" @@ -279,7 +289,7 @@ msgstr "노즐 끝 바로 위의 수평면과 원뿔 부분 사이의 각도입 #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat Zone Length" -msgstr "" +msgstr "가열 영역 길이" #: fdmprinter.def.json msgctxt "machine_heat_zone_length description" @@ -309,7 +319,7 @@ msgstr "Cura에서 온도를 제어할지 여부. Cura 외부에서 노즐 온 #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat Up Speed" -msgstr "" +msgstr "가열 속도" #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed description" @@ -319,7 +329,7 @@ msgstr "노즐이 가열되는 속도 (°C/s)는 일반적인 프린팅 온도 #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool Down Speed" -msgstr "" +msgstr "냉각 속도" #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed description" @@ -338,8 +348,8 @@ msgstr "노즐이 냉각되기 전에 익스트루더가 비활성이어야하 #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" -msgstr "" +msgid "G-code Flavor" +msgstr "Gcode 유형" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" @@ -404,7 +414,7 @@ msgstr "재료를 리트렉션하는 G1 명령어에서 E 속성을 사용하는 #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed Areas" -msgstr "" +msgstr "허용되지 않는 지역" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" @@ -424,7 +434,7 @@ msgstr "노즐이 위치할 수 없는 구역의 목록입니다." #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine Head Polygon" -msgstr "" +msgstr "머신 헤드 폴리곤" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -434,7 +444,7 @@ msgstr "프린트 헤드의 2D 실루엣 (팬 캡 제외)." #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine Head & Fan Polygon" -msgstr "" +msgstr "머신 헤드 및 팬 폴리곤" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -444,7 +454,7 @@ msgstr "프린트 헤드의 2D 실루엣 (팬 뚜껑 포함)." #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry Height" -msgstr "" +msgstr "갠트리 높이" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -474,7 +484,7 @@ msgstr "노즐의 내경. 비표준 노즐 크기를 사용할 때 이 설정을 #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset with Extruder" -msgstr "" +msgstr "익스트루더로 오프셋" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -1271,6 +1281,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "날카로운 모서리" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "Z 경계 위치" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "레이어에서 각 부품의 프린팅이 시작할 위치 근처입니다." + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "후면 왼쪽" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "뒤로" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "후면 오른쪽" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "오른쪽" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "전면 오른쪽" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "전면" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "전면 왼쪽" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "왼쪽" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1298,8 +1358,8 @@ msgstr "솔기 코너 환경 설정" #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "모델 외곽선의 모서리가 솔기의 위치에 영향을 줄지 여부를 제어합니다. 이것은 코너가 솔기 위치에 영향을 미치지 않는다는 것을 의미하지 않습니다. 솔기 숨기기는 이음새가 안쪽 모서리에서 발생할 가능성을 높입니다. 솔기 노출은 솔기이 외부 모서리에서 발생할 가능성을 높입니다. 솔기 숨기기 또는 노출은 솔기이 내부나 외부 모서리에서 발생할 가능성을 높입니다." +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "모델 외곽선의 모서리가 이음선의 위치에 영향을 주는지 여부를 제어합니다. 이것은 모서리가 이음선 위치에 영향을 미치지 않는다는 것을 의미하지 않습니다. 이음선 숨김은 이음선이 안쪽 모서리에서 발생할 가능성을 높입니다. 이음선 노출은 이음선이 외부 모서리에서 발생할 가능성을 높입니다. 이음선 숨김 또는 노출은 이음선이 내부나 외부 모서리에서 발생할 가능성을 높입니다. 스마트 숨김은 내외부 모서리 모두 가능하지만, 적절하다면 내부 모서리를 더욱 빈번하게 선택합니다." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1321,6 +1381,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "솔기 숨기기 또는 노출" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "스마트 숨김" + #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" @@ -1333,13 +1398,13 @@ msgstr "활성화 된 경우 z 솔기 좌표는 각 부품의 중심을 기준 #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "작은 Z 간격 무시" +msgid "No Skin in Z Gaps" +msgstr "Z 간격에 스킨 없음" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "모델에 수직 간격이 작으면 이 좁은 공간에서 상단 및 하단 스킨을 생성하는 데 약 5%의 추가적인 계산시간을 소비 할 수 있습니다. 이 경우 설정을 해제하십시오." +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "모델의 몇 가지 레이어에만 수직 간격이 작을 경우 보통 좁은 공간의 본 레이어 주위에도 스킨이 있어야 합니다. 수직 간격이 매우 작을 경우 스킨을 생성하지 않도록 이 설정을 활성화합니다. 이렇게 하면 프린팅 시간과 슬라이싱 시간은 개선되지만 기술적으로 내부채움이 공기 중에 노출된 상태로 남게 됩니다." #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1358,8 +1423,8 @@ msgstr "다림질 사용" #: fdmprinter.def.json 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 "상단 표면을 한 번 더 이동하지만 재료를 익스트루딩 시키지 않습니다. 이것은 맨 위의 플라스틱을 녹여 부드러운 표면을 만듭니다." +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 "상단 표면을 한 번 더 이동하지만 재료를 아주 약간만 압출 성형합니다. 따라서 맨 위의 플라스틱이 녹아 부드러운 표면을 만듭니다. 노즐 챔버 내의 압력이 고압으로 유지되므로 표면상의 주름이 재료로 채워집니다." #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1451,6 +1516,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "다림질을하는 동안 최대 순간 속도 변화." +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "스킨 겹침 비율" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "벽과 스킨-센터라인(종점) 사이의 겹침 양을 스킨 라인과 가장 안쪽 벽의 라인 폭 비율로 조정하십시오. 약간의 겹침으로 벽이 스킨에 확실하게 연결될 수 있습니다. 동일한 스킨 및 벽 라인-폭을 고려할 때 비율이 50%가 넘는다면, 그 지점에서 스킨-익스트루더의 노즐 위치가 이미 벽 중앙을 지나 도달할 수 있기 때문에 이미 스킨이 벽을 지나치고 있을 수 있습니다." + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "스킨 겹침" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "벽과 스킨-센터라인(종점) 사이의 겹침 양을 조정하십시오. 약간의 겹침으로 벽이 스킨에 확실하게 연결될 수 있습니다. 동일한 스킨 및 벽 라인-폭을 고려할 때 값이 벽 폭의 절반을 넘는다면, 그 지점에서 스킨-익스트루더의 노즐 위치가 이미 벽 중앙을 지나 도달할 수 있기 때문에 이미 스킨이 벽을 지나치고 있을 수 있습니다." + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1616,6 +1701,16 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "내부채움 패턴이 Y축을 따라 이 거리만큼 이동합니다." +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +msgstr "무작위 충전 시작" + +#: 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 "가장 먼저 프린트되는 충전 선을 무작위로 결정합니다. 이렇게 하면 특정 세그먼트가 가장 강한 세그먼트가 되는 일이 없지만, 추가 이동이 발생하지 않게 됩니다." + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1670,26 +1765,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "내부채움과 벽 사이의 겹침 정도. 약간 겹치면 벽이 내부채움에 단단히 연결됩니다." -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "스킨 겹침 비율" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "벽과 스킨-센터라인(종점) 사이의 겹침 양을 스킨 라인과 가장 안쪽 벽의 라인 폭 비율로 조정하십시오. 약간의 겹침으로 벽이 스킨에 확실하게 연결될 수 있습니다. 동일한 스킨 및 벽 라인-폭을 고려할 때 비율이 50%가 넘는다면, 그 지점에서 스킨-익스트루더의 노즐 위치가 이미 벽 중앙을 지나 도달할 수 있기 때문에 이미 스킨이 벽을 지나치고 있을 수 있습니다." - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "스킨 겹침" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "벽과 스킨-센터라인(종점) 사이의 겹침 양을 조정하십시오. 약간의 겹침으로 벽이 스킨에 확실하게 연결될 수 있습니다. 동일한 스킨 및 벽 라인-폭을 고려할 때 값이 벽 폭의 절반을 넘는다면, 그 지점에서 스킨-익스트루더의 노즐 위치가 이미 벽 중앙을 지나 도달할 수 있기 때문에 이미 스킨이 벽을 지나치고 있을 수 있습니다." - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1873,12 +1948,12 @@ msgstr "프린팅에 사용되는 기본 온도입니다. 이것은 재료의 \" #: fdmprinter.def.json msgctxt "build_volume_temperature label" msgid "Build Volume Temperature" -msgstr "" +msgstr "빌드 볼륨 온도" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." -msgstr "" +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." +msgstr "프린팅되는 환경의 온도입니다. 이 값이 0인 경우 빌드 볼륨 온도는 조정되지 않습니다." #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1990,6 +2065,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "수축 비율 퍼센트." +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "결정형 소재" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "이 소재는 가열 시 깔끔하게 분리되는 유형(결정형)입니까? 아니면 길게 얽힌 폴리머 체인을 생성하는 유형(비결정형)입니까?" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "흐름 방지 리트랙션 위치" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "흐름이 멈추기 전에 소재가 후퇴해야 하는 거리입니다." + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "흐름 방지 리트랙션 속도" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "흐름을 방지하기 위해 필라멘트 스위치 중 소재가 후퇴해야 하는 속도입니다." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "파단 준비 리트랙션 위치" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "가열 시 파단되기 전까지 필라멘트가 늘어날 수 있는 거리입니다." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "파단 준비 리트랙션 속도" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "리트랙션 시 파단되기 직전까지 필라멘트가 후퇴해야 하는 속도입니다." + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "파단 리트랙션 위치" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "필라멘트가 깔끔하게 파단되기 위해 후퇴해야 하는 거리입니다." + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "파단 리트랙션 속도" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "필라멘트가 깔끔하게 파단되기 위해 후퇴해야 하는 속도입니다." + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "파단 온도" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "필라멘트가 깔끔하게 파단되는 온도입니다." + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -2000,6 +2155,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "압출량 보상: 압출 된 재료의 양에 이 값을 곱합니다." +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "벽 압출량" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "벽 라인의 압출 보상입니다." + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "외벽 압출량" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "가장 외측 벽 라인의 압출 보상입니다." + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "내벽 압출량" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "가장 외측 벽을 제외한 모든 벽 라인의 압출 보상입니다." + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "상단/하단 압출량" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "상단/하단 라인의 압출 보상입니다." + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "상단 표면 스킨 압출량" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "프린트 상단 부분 라인의 압출 보상입니다." + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "내부채움 압출량" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "내부채움 라인의 압출 보상입니다." + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "스커트/브림 압출량" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "스커트 또는 브림 라인의 압출 보상입니다." + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "지지대 압출량" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "지지대 구조 라인의 압출 보상입니다." + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "지지대 인터페이스 압출량" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "지지대 지붕 또는 바닥 라인의 압출 보상입니다." + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "지지대 지붕 압출량" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "지지대 지붕 라인의 압출 보상입니다." + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "지지대 바닥 압출량" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "지지대 바닥 라인의 압출 보상입니다." + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "프라임 타워 압출량" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "프라임 타워 라인의 압출 보상입니다." + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2117,8 +2392,8 @@ msgstr "지지대 후퇴 제한" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." -msgstr "직선으로 지지대 사이를 이동하는 경우 후퇴는 불가능합니다. 이 설정을 사용하면 인쇄 시간은 절약할 수 있지만, 지지 구조물 내에 스트링이 과도하게 증가할 수 있습니다." +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." +msgstr "직선으로 지지대 사이를 이동하는 경우 리트랙션은 생략합니다. 이 설정을 사용하면 프린팅 시간은 절약할 수 있지만, 지지대 구조물 내에 스트링이 과도하게 증가할 수 있습니다." #: fdmprinter.def.json msgctxt "material_standby_temperature label" @@ -2170,6 +2445,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "노즐 스위치 리트렉션 후 필라멘트가 뒤로 밀리는 속도." +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "노즐 스위치 엑스트라 프라임 양" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "노즐 스위치 후 프라이밍하는 추가 소재의 양입니다." + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2361,14 +2646,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "스커트와 브림이 프린팅되는 속도입니다. 일반적으로 이것은 초기 레이어 속도에서 수행되지만 때로는 스커트나 브림을 다른 속도로 프린팅하려고 할 수 있습니다." #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "최대 Z 속도" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "Z 홉 속도" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "빌드 플레이트가 움직이는 최대 속도. 이 값을 0으로 설정하면 프린팅시 최대 z 속도의 펌웨어 기본값이 사용됩니다." +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "Z 홉을 위해 수직 Z 이동이 이루어지는 속도입니다. 빌드 플레이트 또는 기기의 갠트리를 움직이기가 더 어렵기 때문에 프린트 속도보다 낮은 것이 일반적입니다." #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2870,16 +3155,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "이동 중 출력물을 피할 때 노즐과 이미 프린팅 된 부분 사이의 거리." -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "같은 부분으로 레이어 시작" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "각 레이어에서 같은 지점 근처에서 개체를 프린팅, 새 레이어는 이전 레이어가 끝난 부분에서 프린팅을 하지 않는다.. 이것은 오버행 및 작은 부분을 개선하지만 프린팅 시간을 증가시킵니다." - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -2943,12 +3218,12 @@ msgstr "기기가 하나의 익스트루더에서 다른 익스트루더로 전 #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height label" msgid "Z Hop After Extruder Switch Height" -msgstr "" +msgstr "익스트루더 스위치 높이 후 Z 홉" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height description" msgid "The height difference when performing a Z Hop after extruder switch." -msgstr "" +msgstr "익스트루더 스위치 후 Z 홉을 수행할 때의 높이 차이." #: fdmprinter.def.json msgctxt "cooling label" @@ -3223,7 +3498,7 @@ msgstr "십자" #: fdmprinter.def.json msgctxt "support_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "자이로이드" #: fdmprinter.def.json msgctxt "support_wall_count label" @@ -3286,14 +3561,14 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "인쇄된 초기 레이어 서포트 구조 선 사이의 거리. 이 설정은 서포트 밀도로 계산됩니다." #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "서포트 내부채움 선 방향" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." -msgstr "서포트에 대한 내부채움 패턴 방향. 서포트 내부채움 패턴은 수평면에서 회전합니다." +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 "사용할 정수 선 방향 리스트입니다. 리스트의 요소는 레이어가 진행됨에 따라 순차적으로 사용되며 리스트의 끝에 도달하면 처음부터 다시 시작됩니다. 리스트 항목은 쉼표로 구분되며 전체 리스트는 대괄호 안에 들어 있습니다. 기본값은 빈 목록입니다. 즉 기본 각도인 0도를 사용합니다." #: fdmprinter.def.json msgctxt "support_brim_enable label" @@ -3422,8 +3697,8 @@ msgstr "서포트 Join 거리" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." -msgstr "X/Y 방향으로서포트 구조물 사이의 최대 거리. 별도의 구조가 이 값보다 가깝게 있으면 구조가 하나로 합쳐집니다." +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." +msgstr "X/Y 방향으로 지지대 구조물 사이의 최대 거리입니다. 별도의 구조가 이 값보다 가깝게 있으면 구조가 하나로 합쳐집니다." #: fdmprinter.def.json msgctxt "support_offset label" @@ -3760,6 +4035,39 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "서포트 바닥에 적용되는 오프셋 양." +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +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도를 번갈아 사용)." + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +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도를 번갈아 사용)." + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +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도를 번갈아 사용)." + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3801,14 +4109,14 @@ msgid "The diameter of a special tower." msgstr "특수 타워의 지름." #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "최소 지름" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "최대 타워 지지 직경" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." -msgstr "특수 서포트 타워에 의해서 서포트 될 작은 영역의 X/Y 방향의 최소 직경." +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "특수 지지대 타워에 의해서 지지될 작은 영역의 X/Y 방향의 최대 직경입니다." #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" @@ -4304,16 +4612,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "각 노즐을 교체 한 후에 재료를 프라이밍(Priming)하는 프린팅 옆에 타워를 프린팅하십시오." -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "원형 프라임 타워" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "프라임 타워를 원형으로 만들기." - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4354,16 +4652,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "프라임 타워 위치의 y 좌표입니다." -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "프라임 타워 압출량" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "압출량 보정 : 압출된 재료의 양에 이 값을 곱합니다." - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4377,12 +4665,12 @@ msgstr "하나의 노즐로 프라임 타워를 프린팅 한 후, 다른 타워 #: fdmprinter.def.json msgctxt "prime_tower_brim_enable label" msgid "Prime Tower Brim" -msgstr "" +msgstr "프라임 타워 브림" #: fdmprinter.def.json msgctxt "prime_tower_brim_enable description" msgid "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type." -msgstr "" +msgstr "프라임 타워는 모델이 제공하지 않더라도 브림이 제공하는 추가 접착이 필요할 수 있습니다. 현재 '래프트' 접착 유형을 사용할 수 없습니다." #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4666,8 +4954,8 @@ msgstr "부드러운 나선형 윤곽" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." -msgstr "나선형 윤곽선을 부드럽게하여 Z 솔기의 가시성을 줄입니다. (Z- 솔기는 출력물에서는 거의 보이지 않지만 레이어 뷰에서는 여전히 보임). 매끄러움은 표면의 세부 묘사를 흐릿하게하는 경향이 있습니다." +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgstr "나선형 윤곽선을 부드럽게 하여 Z 이음선이 잘 보이지 않도록 합니다(Z- 이음선은 출력물에서는 거의 보이지 않지만 레이어 뷰에서는 여전히 보임). 매끄러움은 표면의 세부 묘사를 흐릿하게 만드는 경향이 있습니다." #: fdmprinter.def.json msgctxt "relative_extrusion label" @@ -4902,12 +5190,12 @@ msgstr "슬라이딩 후의 이동 선분의 최소 크기입니다. 이 값을 #: fdmprinter.def.json msgctxt "meshfix_maximum_deviation label" msgid "Maximum Deviation" -msgstr "" +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." -msgstr "" +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" @@ -5166,8 +5454,8 @@ msgstr "원추형 서포트 사용" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "실험적 기능 : 오버행보다 하단에서 서포트 영역을 작게 만듭니다." +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "오버행보다 하단에서 지지대 영역을 작게 만듭니다." #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5509,7 +5797,7 @@ msgstr "노즐과 수평 아래쪽 라인 사이의 거리. 거리가 클수록 #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled label" msgid "Use Adaptive Layers" -msgstr "" +msgstr "어댑티브 레이어 사용" #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled description" @@ -5519,7 +5807,7 @@ msgstr "어댑티브 레이어는 모델의 모양에 따라 레이어의 높이 #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation label" msgid "Adaptive Layers Maximum Variation" -msgstr "" +msgstr "어댑티브 레이어 최대 변화" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" @@ -5529,7 +5817,7 @@ msgstr "기본 레이어 높이와 다른 최대 허용 높이." #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" msgid "Adaptive Layers Variation Step Size" -msgstr "" +msgstr "어댑티브 레이어 변화 단계 크기" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step description" @@ -5539,7 +5827,7 @@ msgstr "이전 높이와 비교되는 다음 레이어 높이의 차이." #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold label" msgid "Adaptive Layers Threshold" -msgstr "" +msgstr "어댑티브 레이어 임계 값" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" @@ -5759,152 +6047,192 @@ msgstr "세번째 브리지 벽과 스킨을 인쇄 할 때 사용하는 팬 속 #: fdmprinter.def.json msgctxt "clean_between_layers label" msgid "Wipe Nozzle Between Layers" -msgstr "" +msgstr "레이어 사이의 와이프 노즐" #: fdmprinter.def.json msgctxt "clean_between_layers description" msgid "Whether to include nozzle wipe G-Code between layers. Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working." -msgstr "" +msgstr "레이어 사이에 노즐 와이프 G 코드를 포함할지 여부를 결정합니다. 이 설정을 활성화하면 레이어 변경 시 리트렉트 동작에 영향을 줄 수 있습니다. 와이프 스크립트가 작동하는 레이어에서 리트랙션을 제어하려면 와이프 리트렉션 설정을 사용하십시오." #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe label" msgid "Material Volume Between Wipes" -msgstr "" +msgstr "와이프 사이의 재료 볼륨" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe description" msgid "Maximum material, that can be extruded before another nozzle wipe is initiated." -msgstr "" +msgstr "다른 노즐 와이프를 시작하기 전에 압출할 수 있는 최대 재료입니다." #: fdmprinter.def.json msgctxt "wipe_retraction_enable label" msgid "Wipe Retraction Enable" -msgstr "" +msgstr "와이프 리트랙션 활성화" #: fdmprinter.def.json msgctxt "wipe_retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area." -msgstr "" +msgstr "노즐이 프린팅되지 않은 영역 위로 움직일 때 필라멘트를 리트렉션합니다." #: fdmprinter.def.json msgctxt "wipe_retraction_amount label" msgid "Wipe Retraction Distance" -msgstr "" +msgstr "와이프 리트랙션 거리" #: fdmprinter.def.json msgctxt "wipe_retraction_amount description" msgid "Amount to retract the filament so it does not ooze during the wipe sequence." -msgstr "" +msgstr "필라멘트를 리트렉션하는 양으로 와이프 순서 동안 새어 나오지 않습니다." #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount label" msgid "Wipe Retraction Extra Prime Amount" -msgstr "" +msgstr "와이프 리트랙션 추가 초기 양" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount description" msgid "Some material can ooze away during a wipe travel moves, which can be compensated for here." -msgstr "" +msgstr "와이프 이동 중에 재료가 새어 나올 수 있습니다. 이 재료는 여기에서 보상받을 수 있습니다." #: fdmprinter.def.json msgctxt "wipe_retraction_speed label" msgid "Wipe Retraction Speed" -msgstr "" +msgstr "와이프 리트랙션 속도" #: fdmprinter.def.json msgctxt "wipe_retraction_speed description" msgid "The speed at which the filament is retracted and primed during a wipe retraction move." -msgstr "" +msgstr "와이프 리트랙션 이동 중에 필라멘트가 리트렉션 및 준비되는 속도입니다." #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed label" msgid "Wipe Retraction Retract Speed" -msgstr "" +msgstr "와이프 리트랙션 리트렉트 속도" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed description" msgid "The speed at which the filament is retracted during a wipe retraction move." -msgstr "" +msgstr "와이프 리트랙션 이동 중에 필라멘트가 리트렉트되는 속도입니다." #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "리트렉션 초기 속도" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed description" msgid "The speed at which the filament is primed during a wipe retraction move." -msgstr "" +msgstr "와이프 리트랙션 이동 중에 필라멘트가 초기화되는 속도입니다." #: fdmprinter.def.json msgctxt "wipe_pause label" msgid "Wipe Pause" -msgstr "" +msgstr "와이프 일시 정지" #: fdmprinter.def.json msgctxt "wipe_pause description" msgid "Pause after the unretract." -msgstr "" +msgstr "리트랙트를 실행 취소한 후 일시 정지합니다." #: fdmprinter.def.json msgctxt "wipe_hop_enable label" msgid "Wipe Z Hop When Retracted" -msgstr "" +msgstr "리트렉션했을 때의 와이프 Z 홉" #: fdmprinter.def.json msgctxt "wipe_hop_enable description" msgid "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." -msgstr "" +msgstr "리트렉션이 일어날 때마다 빌드 플레이트가 낮아져 노즐과 출력물 사이에 여유 공간이 생깁니다. 이동 중에 노즐이 인쇄물에 부딪치지 않도록 하여 인쇄물이 빌드 플레이트와 부딪힐 가능성을 줄여줍니다." #: fdmprinter.def.json msgctxt "wipe_hop_amount label" msgid "Wipe Z Hop Height" -msgstr "" +msgstr "화이프 Z 홉 높이" #: fdmprinter.def.json msgctxt "wipe_hop_amount description" msgid "The height difference when performing a Z Hop." -msgstr "" +msgstr "Z 홉을 수행할 때의 높이 차이." #: fdmprinter.def.json msgctxt "wipe_hop_speed label" msgid "Wipe Hop Speed" -msgstr "" +msgstr "와이프 홉 속도" #: fdmprinter.def.json msgctxt "wipe_hop_speed description" msgid "Speed to move the z-axis during the hop." -msgstr "" +msgstr "홉 중에 z축을 이동하는 속도입니다." #: fdmprinter.def.json msgctxt "wipe_brush_pos_x label" msgid "Wipe Brush X Position" -msgstr "" +msgstr "와이프 브러시 X 위치" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x description" msgid "X location where wipe script will start." -msgstr "" +msgstr "와이프 스크립트가 시작되는 X 위치입니다." #: fdmprinter.def.json msgctxt "wipe_repeat_count label" msgid "Wipe Repeat Count" -msgstr "" +msgstr "와이프 반복 횟수" #: fdmprinter.def.json msgctxt "wipe_repeat_count description" msgid "Number of times to move the nozzle across the brush." -msgstr "" +msgstr "브러시 전체에 노즐을 이동하는 횟수입니다." #: fdmprinter.def.json msgctxt "wipe_move_distance label" msgid "Wipe Move Distance" -msgstr "" +msgstr "와이프 이동 거리" #: fdmprinter.def.json msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." -msgstr "" +msgstr "브러시 전체에 헤드를 앞뒤로 이동하는 거리입니다." + +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "소형 구멍 최대 크기" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "이 수치보다 직경이 작은 구멍 및 부품 윤곽은 소형 피처 속도 기능을 이용해 프린트합니다." + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "소형 피처 최대 길이" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "이 수치보다 길이가 짧은 피처 윤곽은 소형 피처 속도 기능을 이용해 프린트합니다." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +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 "소형 피처는 정상적인 프린트 속도의 이 비율로 프린팅됩니다. 프린트 속도가 느리면 착력과 정확도가 개선됩니다." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor_0 label" +msgid "First 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 "첫 번째 레이어의 소형 피처는 정상적인 프린트 속도의 이 비율로 프린팅됩니다. 프린트 속도가 느리면 접착력과 정확도가 개선됩니다." #: fdmprinter.def.json msgctxt "command_line_settings label" @@ -5966,6 +6294,90 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." 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 "상단 표면을 한 번 더 이동하지만 재료를 익스트루딩 시키지 않습니다. 이것은 맨 위의 플라스틱을 녹여 부드러운 표면을 만듭니다." + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "같은 부분으로 레이어 시작" + +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "각 레이어에서 같은 지점 근처에서 개체를 프린팅, 새 레이어는 이전 레이어가 끝난 부분에서 프린팅을 하지 않는다.. 이것은 오버행 및 작은 부분을 개선하지만 프린팅 시간을 증가시킵니다." + +#~ msgctxt "support_infill_angles description" +#~ msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +#~ msgstr "서포트에 대한 내부채움 패턴 방향. 서포트 내부채움 패턴은 수평면에서 회전합니다." + +#~ 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." +#~ msgstr "최대 해상도 설정에 대한 해상도를 낮추면 최대 편차를 사용할 수 있습니다. 최대 편차를 높이면 프린트의 정확도는 감소하지만, G 코드도 감소합니다." + +#~ msgctxt "machine_gcode_flavor label" +#~ msgid "G-code Flavour" +#~ msgstr "G-code Flavour" + +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "모델 외곽선의 모서리가 솔기의 위치에 영향을 줄지 여부를 제어합니다. 이것은 코너가 솔기 위치에 영향을 미치지 않는다는 것을 의미하지 않습니다. 솔기 숨기기는 이음새가 안쪽 모서리에서 발생할 가능성을 높입니다. 솔기 노출은 솔기이 외부 모서리에서 발생할 가능성을 높입니다. 솔기 숨기기 또는 노출은 솔기이 내부나 외부 모서리에서 발생할 가능성을 높입니다." + +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "작은 Z 간격 무시" + +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "모델에 수직 간격이 작으면 이 좁은 공간에서 상단 및 하단 스킨을 생성하는 데 약 5%의 추가적인 계산시간을 소비 할 수 있습니다. 이 경우 설정을 해제하십시오." + +#~ msgctxt "build_volume_temperature description" +#~ msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +#~ msgstr "빌드 볼륨에 사용되는 온도입니다. 0인 경우 빌드 볼륨 온도는 조정되지 않습니다." + +#~ msgctxt "limit_support_retractions description" +#~ msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +#~ msgstr "직선으로 지지대 사이를 이동하는 경우 후퇴는 불가능합니다. 이 설정을 사용하면 인쇄 시간은 절약할 수 있지만, 지지 구조물 내에 스트링이 과도하게 증가할 수 있습니다." + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "최대 Z 속도" + +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "빌드 플레이트가 움직이는 최대 속도. 이 값을 0으로 설정하면 프린팅시 최대 z 속도의 펌웨어 기본값이 사용됩니다." + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "X/Y 방향으로서포트 구조물 사이의 최대 거리. 별도의 구조가 이 값보다 가깝게 있으면 구조가 하나로 합쳐집니다." + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "최소 지름" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "특수 서포트 타워에 의해서 서포트 될 작은 영역의 X/Y 방향의 최소 직경." + +#~ msgctxt "prime_tower_circular label" +#~ msgid "Circular Prime Tower" +#~ msgstr "원형 프라임 타워" + +#~ msgctxt "prime_tower_circular description" +#~ msgid "Make the prime tower as a circular shape." +#~ msgstr "프라임 타워를 원형으로 만들기." + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "압출량 보정 : 압출된 재료의 양에 이 값을 곱합니다." + +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "나선형 윤곽선을 부드럽게하여 Z 솔기의 가시성을 줄입니다. (Z- 솔기는 출력물에서는 거의 보이지 않지만 레이어 뷰에서는 여전히 보임). 매끄러움은 표면의 세부 묘사를 흐릿하게하는 경향이 있습니다." + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "실험적 기능 : 오버행보다 하단에서 서포트 영역을 작게 만듭니다." + #~ msgctxt "extruders_enabled_count label" #~ msgid "Number of Extruders that are enabled" #~ msgstr "활성화된 익스트루더의 수" diff --git a/resources/i18n/nl_NL/cura.po b/resources/i18n/nl_NL/cura.po index 6c5e372b0a..d15742a101 100644 --- a/resources/i18n/nl_NL/cura.po +++ b/resources/i18n/nl_NL/cura.po @@ -5,12 +5,12 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" -"PO-Revision-Date: 2019-03-13 14:00+0200\n" -"Last-Translator: Bothof \n" -"Language-Team: Dutch\n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" +"PO-Revision-Date: 2019-07-29 15:51+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Dutch , Dutch \n" "Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\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:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "Machine-instellingen" @@ -85,36 +85,45 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Profiel is platgemaakt en geactiveerd." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "AMF-bestand" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USB-printen" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Printen via USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Via USB Printen" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "Aangesloten via USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "Er wordt momenteel via USB geprint. Wanneer u Cura afsluit, wordt het printen gestopt. Weet u zeker dat u wilt afsluiten?" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /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/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "Er wordt nog een print afgedrukt. Cura kan pas een nieuwe print via USB starten zodra de vorige print is voltooid." + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +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" @@ -126,6 +135,11 @@ 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" @@ -160,7 +174,7 @@ msgid "Save to Removable Drive {0}" msgstr "Opslaan op Verwisselbaar Station {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Er zijn geen bestandsindelingen beschikbaar om te schrijven!" @@ -197,10 +211,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/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "Fout" @@ -229,9 +242,9 @@ 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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "Waarschuwing" @@ -258,347 +271,149 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Verwisselbaar Station" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "Printen via netwerk" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "Printen via netwerk" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "Via het netwerk verbonden." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "Via het netwerk verbonden. Keur de aanvraag goed op de printer." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "Via het netwerk verbonden. Kan de printer niet beheren." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "Er is een toegangsaanvraag voor de printer verstuurd. Keur de aanvraag goed op de printer" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "Verificatiestatus" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "Verificatiestatus" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "Opnieuw proberen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "De toegangsaanvraag opnieuw verzenden" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "Toegang tot de printer is geaccepteerd" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "Kan geen toegang verkrijgen om met deze printer te printen. Kan de printtaak niet verzenden." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "Toegang aanvragen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "Toegangsaanvraag naar de printer verzenden" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "Er kan geen nieuwe taak worden gestart." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "Er is een probleem met de configuratie van de Ultimaker waardoor het niet mogelijk is het printen te starten. Los het probleem op voordat u verder gaat." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "De configuratie komt niet overeen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "Weet u zeker dat u met de geselecteerde configuratie wilt printen?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "De configuratie of kalibratie van de printer komt niet overeen met de configuratie van Cura. Slice voor het beste resultaat altijd voor de PrintCores en materialen die in de printer zijn ingevoerd." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "Het verzenden van nieuwe taken is (tijdelijk) geblokkeerd. Nog bezig met het verzenden van de vorige printtaak." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "De gegevens worden naar de printer verzonden" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "Gegevens Verzenden" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Annuleren" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "Er is geen PrintCore geladen in de sleuf {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "Er is geen materiaal geladen in de sleuf {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "Er is een afwijkende PrintCore (Cura: {cura_printcore_name}, printer: {remote_printcore_name}) geselecteerd voor de extruder {extruder_id}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "Afwijkend materiaal (Cura: {0}, Printer: {1}) geselecteerd voor de extruder {2}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "Synchroniseren met de printer" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "Wilt u uw huidige printerconfiguratie gebruiken in Cura?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "De PrintCores en/of materialen in de printer wijken af van de PrintCores en/of materialen in uw huidige project. Slice voor het beste resultaat altijd voor de PrintCores en materialen die in de printer zijn ingevoerd." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "Via het netwerk verbonden" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "De printtaak is naar de printer verzonden." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "Gegevens verzonden" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "In monitor weergeven" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "Printer '{printer_name}' is klaar met het printen van '{job_name}'." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "De printtaak '{job_name}' is voltooid." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "Print klaar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "Leeg" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "Onbekend" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "Printen via Cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "Printen via Cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "Verbonden via Cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "Cloud-fout" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "Kan de printtaak niet exporteren." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "Kan de gegevens niet uploaden naar de printer." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "morgen" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "vandaag" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "Er is een fout opgetreden tijdens het verbinden met de cloud." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Verzend en controleer overal printtaken met uw Ultimaker-account." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "Niet opnieuw vragen voor deze printer." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "Aan de slag" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "U kunt nu overal vandaan printtaken verzenden en controleren met uw Ultimaker-account." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "Verbonden!" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "Uw verbinding controleren" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Verbinding Maken via Netwerk" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" -msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +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 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "Printen via netwerk" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "Via het netwerk verbonden" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "Wacht tot de huidige taak is verzonden." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "Printfout" + +#: /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 "U probeert verbinding te maken met {0}, maar deze is niet de host van een groep. U kunt de webpagina bezoeken om deze als groephost te configureren." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "Geen groephost" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "Groep configureren" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "Verzend en controleer overal printtaken met uw Ultimaker-account." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "Verbinden met Ultimaker Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "Aan de slag" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "Printtaak verzenden" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "Printtaak naar printer aan het uploaden." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "De printtaak is naar de printer verzonden." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "Gegevens verzonden" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "U probeert verbinding te maken met een printer waarop Ultimaker Connect niet wordt uitgevoerd. Werk de printer bij naar de nieuwste firmware." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "Uw printer bijwerken" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "Cura heeft materiaalprofielen gedetecteerd die nog niet op de hostprinter van groep {0} zijn geïnstalleerd." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "De materialen worden naar de printer verzonden" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "Kan de gegevens niet uploaden naar de printer." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "Netwerkfout" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "morgen" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "vandaag" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "Printen via Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "Printen via Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" +msgstr "Verbonden via Cloud" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Controleren" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "Geen toegang tot update-informatie." @@ -625,12 +440,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Laagweergave" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Als draadprinten is ingeschakeld, geeft Cura lagen niet nauwkeurig weer" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "Simulatieweergave" @@ -685,6 +500,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF-afbeelding" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "Gecomprimeerde driehoeksnet openen" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "COLLADA Digital Asset Exchange" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "glTF-binair" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "glTF-ingesloten JSON" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "Stanford-driehoeksformaat" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "Gecomprimeerde COLLADA Digital Asset Exchange" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -765,19 +610,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF-bestand" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "Nozzle" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "Projectbestand Openen" @@ -792,18 +637,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G-bestand" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-code parseren" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "Details van de G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Zorg ervoor dat de G-code geschikt is voor uw printer en de printerconfiguratie voordat u het bestand verzendt. Mogelijk is de weergave van de G-code niet nauwkeurig." @@ -906,16 +751,16 @@ msgstr "Inloggen mislukt" #: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33 msgctxt "@info:not supported profile" msgid "Not supported" -msgstr "" +msgstr "Niet ondersteund" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 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:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -928,116 +773,109 @@ msgid "Invalid file URL:" msgstr "Ongeldige bestands-URL:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" -msgstr "De instellingen zijn gewijzigd zodat deze overeenkomen met de huidige beschikbaarheid van de extruders: [%s]" +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 msgctxt "@info:title" msgid "Settings updated" msgstr "De instellingen zijn bijgewerkt" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "Extruder(s) uitgeschakeld" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, 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:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, 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:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, 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:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "De export is voltooid" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, 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:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, 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:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, 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:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, 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:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "De machine die is vastgelegd in het profiel {0} ({1}), komt niet overeen met uw huidige machine ({2}). Kan het profiel niet importeren." - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, 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:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, 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:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, 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:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "Aangepast profiel" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 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:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1086,7 +924,7 @@ msgstr "Skirt" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:84 msgctxt "@tooltip" msgid "Prime Tower" -msgstr "" +msgstr "Primepijler" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:85 msgctxt "@tooltip" @@ -1115,7 +953,7 @@ msgctxt "@action:button" msgid "Next" msgstr "Volgende" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1123,22 +961,36 @@ 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/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "Sluiten" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" 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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Annuleren" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1155,23 +1007,22 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Alle Bestanden (*)" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" -msgstr "" +msgstr "Kan de onderstaande printer(s) niet verbinden omdat deze deel uitmaakt/uitmaken van een groep" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" -msgstr "" +msgstr "Beschikbare netwerkprinters" #: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689 msgctxt "@label" @@ -1184,12 +1035,12 @@ msgctxt "@label" msgid "Custom" msgstr "Aangepast" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "De hoogte van het bouwvolume is verminderd wegens de waarde van de instelling “Printvolgorde”, om te voorkomen dat de rijbrug tegen geprinte modellen botst." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "Werkvolume" @@ -1207,46 +1058,51 @@ msgstr "Geprobeerd een Cura-back-up te herstellen zonder correcte gegevens of me #: /home/ruben/Projects/Cura/cura/Backups/Backup.py:125 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that is higher than the current version." -msgstr "" +msgstr "Geprobeerd een Cura-back-up te herstellen van een versie die hoger is dan de huidige versie." #: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationHelpers.py:79 msgctxt "@message" msgid "Could not read response." -msgstr "" +msgstr "Kan het antwoord niet lezen." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 msgctxt "@info" msgid "Unable to reach the Ultimaker account server." msgstr "Kan de Ultimaker-accountserver niet bereiken." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:66 +#: /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." -msgstr "" +msgstr "Verleen de vereiste toestemmingen toe bij het autoriseren van deze toepassing." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "Er heeft een onverwachte gebeurtenis plaatsgevonden bij het aanmelden. Probeer het opnieuw." -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "Objecten verveelvoudigen en plaatsen" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "Objecten plaatsen" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Kan binnen het werkvolume niet voor alle objecten een locatie vinden" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "Object plaatsen" @@ -1395,48 +1251,48 @@ msgstr "Logboeken" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" -msgstr "Gebruikersbeschrijving" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" +msgstr "Gebruikersbeschrijving (opmerking: ontwikkelaars spreken uw taal mogelijk niet; gebruik indien mogelijk Engels)" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "Rapport verzenden" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Machines laden..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Scene instellen..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Interface laden..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, 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:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, 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:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Het geselecteerde model is te klein om te laden." @@ -1444,103 +1300,108 @@ msgstr "Het geselecteerde model is te klein om te laden." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58 msgctxt "@title:label" msgid "Printer Settings" -msgstr "" +msgstr "Printerinstellingen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X (Breedte)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Diepte)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Hoogte)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "Vorm van het platform" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" -msgstr "" +msgstr "Centraal oorsprongpunt" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" -msgstr "" +msgstr "Verwarmd bed" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "Verwarmde werkvolume" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "Versie G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" -msgstr "" +msgstr "Printkopinstellingen" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "X max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "Y max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" -msgstr "" +msgstr "Rijbrughoogte" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "Aantal extruders" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" -msgstr "" +msgstr "Start G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" -msgstr "" +msgstr "Eind G-code" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:42 msgctxt "@title:tab" @@ -1550,7 +1411,7 @@ msgstr "Printer" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:63 msgctxt "@title:label" msgid "Nozzle Settings" -msgstr "" +msgstr "Nozzle-instellingen" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:75 msgctxt "@label" @@ -1567,25 +1428,25 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "Nozzle-offset X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Nozzle-offset Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "Nummer van koelventilator" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" -msgstr "" +msgstr "Start-G-code van extruder" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" -msgstr "" +msgstr "Eind-G-code van extruder" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 msgctxt "@action:button" @@ -1593,7 +1454,7 @@ msgid "Install" msgstr "Installeren" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "Geïnstalleerd" @@ -1608,16 +1469,16 @@ msgctxt "@label" msgid "ratings" msgstr "beoordelingen" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "Invoegtoepassingen" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "Materialen" @@ -1627,49 +1488,49 @@ msgctxt "@label" msgid "Your rating" msgstr "Uw beoordeling" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "Versie" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "Laatst bijgewerkt" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "Auteur" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "Downloads" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "Aanmelden is vereist voor installeren of bijwerken" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" -msgstr "" +msgstr "Materiaalspoelen kopen" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "Bijwerken" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "Bijwerken" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1730,17 +1591,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "Cura sluiten" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "Community-bijdragen" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "Community-invoegtoepassingen" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "Standaard materialen" @@ -1801,27 +1662,52 @@ msgctxt "@label" msgid "Featured" msgstr "Functies" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "Compatibiliteit" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +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" +msgstr "Platform" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "Supportstructuur" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "Kwaliteit" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "Technisch informatieblad" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "Veiligheidsinformatieblad" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "Richtlijnen voor printen" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "Website" @@ -1921,70 +1807,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Firmware-update mislukt door ontbrekende firmware." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "Printer beheren" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "Glas" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." -msgstr "Deze opties zijn niet beschikbaar omdat u een cloudprinter controleert." +msgid "Please update your printer's firmware to manage the queue remotely." +msgstr "Werk de firmware van uw printer bij om de wachtrij op afstand te beheren." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "De webcam is niet beschikbaar omdat u een cloudprinter controleert." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "Laden..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "Niet beschikbaar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "Onbereikbaar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "Inactief" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "Zonder titel" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "Anoniem" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "Hiervoor zijn configuratiewijzigingen vereist" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "Details" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "Niet‑beschikbare printer" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "Eerst beschikbaar" @@ -1994,197 +1886,180 @@ msgctxt "@label" msgid "Queued" msgstr "In wachtrij" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" -msgstr "Ga naar Cura Connect" +msgid "Manage in browser" +msgstr "Beheren in browser" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "Er staan geen afdruktaken in de wachtrij. Slice een taak en verzend deze om er een toe te voegen." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "Printtaken" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "Totale printtijd" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "Wachten op" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "Printgeschiedenis weergeven" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "Bestaande verbinding" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "Deze printer/groep is al aan Cura toegevoegd. Selecteer een andere printer/groep." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Verbinding Maken met Printer in het Netwerk" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" -msgstr "" -"Als u rechtstreeks via het netwerk wilt printen naar de printer, moet u ervoor zorgen dat de printer met een netwerkkabel is verbonden met het netwerk of moet u verbinding maken met de printer via het wifi-netwerk. Als u geen verbinding maakt tussen Cura en de printer, kunt u een USB-station gebruiken om g-code-bestanden naar de printer over te zetten.\n" -"\n" -"Selecteer uw printer in de onderstaande lijst:" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." +msgstr "Als u rechtstreeks via het netwerk wilt printen naar de printer, moet u ervoor zorgen dat de printer met een netwerkkabel is verbonden met het netwerk of moet u verbinding maken met de printer via het wifi-netwerk. Als u geen verbinding maakt tussen Cura en de printer, kunt u een USB-station gebruiken om G-code-bestanden naar de printer over te zetten." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "Selecteer uw printer in de onderstaande lijst:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "Bewerken" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "Verwijderen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "Vernieuwen" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Raadpleeg de handleiding voor probleemoplossing bij printen via het netwerk als uw printer niet in de lijst wordt vermeld" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "Type" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /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:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /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:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 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:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 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:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 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:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "Verbinden" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" -msgstr "" +msgstr "Ongeldig IP-adres" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146 msgctxt "@text" msgid "Please enter a valid IP address." -msgstr "" +msgstr "Voer een geldig IP-adres in." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "Printeradres" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." -msgstr "" +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:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "Afgebroken" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "Gereed" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "Voorbereiden..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "Afbreken..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "Pauzeren..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "Gepauzeerd" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "Hervatten..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "Handeling nodig" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "Voltooit %1 om %2" @@ -2288,73 +2163,65 @@ msgctxt "@action:button" msgid "Override" msgstr "Overschrijven" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" msgstr[0] "Voor de toegewezen printer, %1, is de volgende configuratiewijziging vereist:" msgstr[1] "Voor de toegewezen printer, %1, zijn de volgende configuratiewijzigingen vereist:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "De printer %1 is toegewezen. De taak bevat echter een onbekende materiaalconfiguratie." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "Wijzig het materiaal %1 van %2 in %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "Laad %3 als materiaal %1 (kan niet worden overschreven)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." msgstr "Wijzig de print core %1 van %2 in %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "Wijzig het platform naar %1 (kan niet worden overschreven)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "Met het overschrijven worden de opgegeven instellingen gebruikt met de bestaande printerconfiguratie. De print kan hierdoor mislukken." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "Aluminium" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "Verbinding maken met een printer" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" "Controleer of de printer verbonden is:\n" "- Controleer of de printer ingeschakeld is.\n" -"- Controleer of de printer verbonden is met het netwerk." +"- Controleer of de printer verbonden is met het netwerk.\n" +"- Controleer of u bent aangemeld om met de cloud verbonden printers te detecteren." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 msgctxt "@info" msgid "Please connect your printer to the network." -msgstr "" +msgstr "Verbind uw printer met het netwerk." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:156 msgctxt "@label link to technical assistance" @@ -2476,17 +2343,17 @@ msgstr "Meer informatie over anonieme gegevensverzameling" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:74 msgctxt "@text:window" msgid "Ultimaker Cura collects anonymous data in order to improve the print quality and user experience. Below is an example of all the data that is shared:" -msgstr "" +msgstr "Ultimaker Cura verzamelt anonieme gegevens om de printkwaliteit en gebruikerservaring te verbeteren. Hieronder ziet u een voorbeeld van alle gegevens die worden gedeeld:" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:109 msgctxt "@text:window" msgid "I don't want to send anonymous data" -msgstr "" +msgstr "Ik wil geen anonieme gegevens verzenden" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:118 msgctxt "@text:window" msgid "Allow sending anonymous data" -msgstr "" +msgstr "Verzenden van anonieme gegevens toestaan" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2536,7 +2403,7 @@ msgstr "Diepte (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 msgctxt "@info:tooltip" msgid "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model." -msgstr "" +msgstr "Bij lithofanen dienen donkere pixels overeen te komen met de dikkere plekken om meer licht tegen te houden. Bij hoogtekaarten geven lichtere pixels hoger terrein aan. Lichtere pixels dienen daarom overeen te komen met dikkere plekken in het gegenereerde 3D-model." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 msgctxt "@item:inlistbox" @@ -2661,7 +2528,7 @@ msgid "Printer Group" msgstr "Printergroep" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "Profielinstellingen" @@ -2674,19 +2541,19 @@ 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/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 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:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 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:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2858,18 +2725,24 @@ msgid "Previous" msgstr "Vorige" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "Tip" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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" @@ -2989,155 +2862,155 @@ 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:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "Naam" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "Merk" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "Type Materiaal" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "Kleur" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "Eigenschappen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "Dichtheid" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "Diameter" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "Kostprijs Filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "Gewicht filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "Lengte filament" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "Kostprijs per meter" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "Materiaal ontkoppelen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "Beschrijving" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "Gegevens Hechting" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /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:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "Activeren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "Maken" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "Dupliceren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "Importeren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "Printer" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "Verwijderen Bevestigen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 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:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "Materiaal Importeren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 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:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "Materiaal Exporteren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 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:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "Materiaal is geëxporteerd naar %1" @@ -3178,388 +3051,411 @@ msgid "Unit" msgstr "Eenheid" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "Algemeen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "Interface" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "Taal:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "Valuta:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "Thema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 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:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "Automatisch slicen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "Gedrag kijkvenster" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "Overhang weergeven" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 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:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 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:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 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:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 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:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 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:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +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 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:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 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:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Modellen gescheiden houden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 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:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 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:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 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:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 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:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 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:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 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:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +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 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "Cameraweergave: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "Perspectief" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "Orthografisch" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "Bestanden openen en opslaan" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 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:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "Grote modellen schalen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Extreem kleine modellen schalen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 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:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Modellen selecteren wanneer ze geladen zijn" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 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:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Machinevoorvoegsel toevoegen aan taaknaam" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 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:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 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:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 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:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 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:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "Altijd vragen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Altijd als project openen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "Altijd modellen importeren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "Profielen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 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:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /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:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "Gewijzigde instellingen altijd verwijderen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 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:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "Privacy" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 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:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Bij starten op updates controleren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(Anonieme) printgegevens verzenden" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "Meer informatie" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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:715 +#: /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:720 +#: /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:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "Printers" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "Hernoemen" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /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:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "Maken" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "Dupliceren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "Profiel Maken" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 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:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Profiel Dupliceren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "Profiel Hernoemen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "Profiel Importeren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "Profiel Exporteren" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Printer: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /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:413 +#: /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:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 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:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "Huidige wijzigingen verwijderen" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 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:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 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:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "Algemene Instellingen" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "Marktplaats" @@ -3622,33 +3518,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "instellingen zoeken" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 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:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 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:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide 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 "Don't show this setting" msgstr "Deze instelling verbergen" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Deze instelling zichtbaar houden" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Zichtbaarheid Instelling Configureren..." @@ -3664,32 +3560,32 @@ msgstr "" "\n" "Klik om deze instellingen zichtbaar te maken." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." -msgstr "" +msgstr "Deze instelling wordt niet gebruikt omdat alle instellingen waarop deze invloed heeft, worden overschreven." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "Beïnvloedt" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Beïnvloed door" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 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:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 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:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3700,7 +3596,7 @@ msgstr "" "\n" "Klik om de waarde van het profiel te herstellen." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3716,7 +3612,7 @@ msgctxt "@button" msgid "Recommended" msgstr "Aanbevolen" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "Aangepast" @@ -3741,12 +3637,12 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Genereer structuren om delen van het model met overhang te ondersteunen. Zonder deze structuren zakken dergelijke delen in tijdens het printen." -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "Hechting" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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." @@ -3764,7 +3660,7 @@ msgstr "U hebt enkele profielinstellingen aangepast. Ga naar de aangepaste modus #: /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 "" +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" @@ -3800,7 +3696,7 @@ 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." -msgstr "" +msgstr "De printinstelling is uitgeschakeld. Het G-code-bestand kan niet worden gewijzigd." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:52 msgctxt "@label" @@ -3832,59 +3728,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "G-code verzenden" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "Verzend een aangepaste G-code-opdracht naar de verbonden printer. Druk op Enter om de opdracht te verzenden." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "Extruder" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "De doeltemperatuur van de hot-end. De hot-end wordt verwarmd of afgekoeld totdat deze temperatuur bereikt is. Als deze waarde ingesteld is op 0, wordt de verwarming van de hot-end uitgeschakeld." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "De huidige temperatuur van dit hotend." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "De temperatuur waarnaar het hotend moet worden voorverwarmd." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "Annuleren" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "Voorverwarmen" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "Verwarm het hotend voordat u gaat printen. U kunt doorgaan met het aanpassen van uw print terwijl het hotend wordt verwarmd. Zo hoeft u niet te wachten totdat het hotend is opgewarmd wanneer u gereed bent om te printen." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "De kleur van het materiaal in deze extruder." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "Het materiaal in deze extruder." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "De nozzle die in deze extruder geplaatst is." @@ -3929,11 +3825,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "Favorieten" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -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" @@ -3949,32 +3840,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Printer" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "&Materiaal" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Instellen als Actieve Extruder" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Extruder inschakelen" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Extruder uitschakelen" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /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:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "&Profiel" @@ -3984,7 +3875,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "&Camerapositie" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "Camerabeeld" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "Perspectief" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "Orthografisch" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "&Platform" @@ -4004,17 +3910,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Instelling voor zichtbaarheid beheren..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "&Opslaan..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "&Exporteren..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "Selectie Exporteren..." @@ -4103,22 +4009,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "&Recente bestanden openen" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "Actieve print" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "Taaknaam" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "Printtijd" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "Geschatte resterende tijd" @@ -4126,12 +4032,17 @@ msgstr "Geschatte resterende tijd" #: /home/ruben/Projects/Cura/resources/qml/ViewsSelector.qml:50 msgctxt "@label" msgid "View type" -msgstr "" +msgstr "Type weergeven" + +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "Lijst met objecten" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" -msgstr "" +msgstr "Hallo %1" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:33 msgctxt "@button" @@ -4160,6 +4071,9 @@ msgid "" "- Store your Ultimaker Cura settings in the cloud for use anywhere\n" "- Get exclusive access to print profiles from leading brands" msgstr "" +"- Printtaken verzenden naar Ultimaker-printers buiten uw lokale netwerk\n" +"- Ultimaker Cura-instellingen opslaan in de cloud zodat u ze overal kunt gebruiken\n" +"- Exclusieve toegang verkrijgen tot printprofielen van toonaangevende merken" #: /home/ruben/Projects/Cura/resources/qml/Account/GeneralOperations.qml:78 msgctxt "@button" @@ -4176,32 +4090,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "Geen kostenraming beschikbaar" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "Voorbeeld" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Slicen..." -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" -msgstr "" +msgstr "Kan niet slicen" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "Verwerken" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "Slicen" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "Het sliceproces starten" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "Annuleren" @@ -4209,12 +4128,12 @@ msgstr "Annuleren" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:31 msgctxt "@label" msgid "Time estimation" -msgstr "" +msgstr "Tijdschatting" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:114 msgctxt "@label" msgid "Material estimation" -msgstr "" +msgstr "Materiaalschatting" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:164 msgctxt "@label m for meter" @@ -4236,233 +4155,238 @@ msgctxt "@label" msgid "Preset printers" msgstr "Vooraf ingestelde printers" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "Printer toevoegen" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "Printers beheren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "Online gids voor probleemoplossing weergegeven" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "Volledig Scherm In-/Uitschakelen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "Volledig scherm sluiten" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "Ongedaan &Maken" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Opnieuw" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Afsluiten" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "3D-weergave" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "Weergave voorzijde" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "Weergave bovenzijde" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "Weergave linkerzijde" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "Weergave rechterzijde" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Cura Configureren..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Printer Toevoegen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Pr&inters Beheren..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Materialen Beheren..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "Profiel bijwerken met h&uidige instellingen/overschrijvingen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "Hui&dige wijzigingen verwijderen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "Profiel maken op basis van huidige instellingen/overs&chrijvingen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Profielen Beheren..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Online &Documentatie Weergeven" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Een &Bug Rapporteren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" -msgstr "" +msgstr "Nieuwe functies" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "Over..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "Geselecteerd model verwijderen" msgstr[1] "Geselecteerde modellen verwijderen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Geselecteerd model centreren" msgstr[1] "Geselecteerde modellen centreren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Geselecteerd model verveelvoudigen" msgstr[1] "Geselecteerde modellen verveelvoudigen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Model Verwijderen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Model op Platform Ce&ntreren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "Modellen &Groeperen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Groeperen van Modellen Opheffen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Modellen Samen&voegen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Model verveelvoudigen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Alle Modellen Selecteren" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Platform Leegmaken" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Alle Modellen Opnieuw Laden" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Alle modellen schikken op alle platformen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Alle modellen schikken" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Selectie schikken" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Alle Modelposities Herstellen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Alle Modeltransformaties Herstellen" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "Bestand(en) &openen..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nieuw project..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Open Configuratiemap" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "&Marktplaats" @@ -4477,52 +4401,52 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Dit package wordt na opnieuw starten geïnstalleerd." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "Instellingen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "Cura afsluiten" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 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:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /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:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "Package installeren" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "Bestand(en) openen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "Printer Toevoegen" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" -msgstr "" +msgstr "Nieuwe functies" #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 msgctxt "@label %1 is filled in with the name of an extruder" @@ -4744,32 +4668,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Project opslaan" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /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:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extruder %1" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 &materiaal" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" -msgstr "" +msgstr "Materiaal" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 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:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "Opslaan" @@ -4802,158 +4726,158 @@ msgstr "Modellen importeren" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DropDownWidget.qml:93 msgctxt "@label" msgid "Empty" -msgstr "" +msgstr "Leeg" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:24 msgctxt "@label" msgid "Add a printer" -msgstr "" +msgstr "Een printer toevoegen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:39 msgctxt "@label" msgid "Add a networked printer" -msgstr "" +msgstr "Een netwerkprinter toevoegen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:81 msgctxt "@label" msgid "Add a non-networked printer" -msgstr "" +msgstr "Een niet-netwerkprinter toevoegen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:70 msgctxt "@label" msgid "Add printer by IP address" -msgstr "" +msgstr "Een printer toevoegen op IP-adres" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:133 msgctxt "@text" msgid "Place enter your printer's IP address." -msgstr "" +msgstr "Voer het IP-adres van uw printer in." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:158 msgctxt "@button" msgid "Add" -msgstr "" +msgstr "Toevoegen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:204 msgctxt "@label" msgid "Could not connect to device." -msgstr "" +msgstr "Kan geen verbinding maken met het apparaat." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:208 msgctxt "@label" msgid "The printer at this address has not responded yet." -msgstr "" +msgstr "De printer op dit adres heeft nog niet gereageerd." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:240 msgctxt "@label" msgid "This printer cannot be added because it's an unknown printer or it's not the host of a group." -msgstr "" +msgstr "Kan de printer niet toevoegen omdat het een onbekende printer is of omdat het niet de host in een groep is." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:329 msgctxt "@button" msgid "Back" -msgstr "" +msgstr "Terug" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:342 msgctxt "@button" msgid "Connect" -msgstr "" +msgstr "Verbinding maken" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/FirstStartMachineActionsContent.qml:77 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:123 msgctxt "@button" msgid "Next" -msgstr "" +msgstr "Volgende" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:23 msgctxt "@label" msgid "User Agreement" -msgstr "" +msgstr "Gebruikersovereenkomst" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:56 msgctxt "@button" msgid "Agree" -msgstr "" +msgstr "Akkoord" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:70 msgctxt "@button" msgid "Decline and close" -msgstr "" +msgstr "Afwijzen en sluiten" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:24 msgctxt "@label" msgid "Help us to improve Ultimaker Cura" -msgstr "" +msgstr "Help ons Ultimaker Cura te verbeteren" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:57 msgctxt "@text" msgid "Ultimaker Cura collects anonymous data to improve print quality and user experience, including:" -msgstr "" +msgstr "Ultimaker Cura verzamelt anonieme gegevens om de printkwaliteit en gebruikerservaring te verbeteren, waaronder:" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:71 msgctxt "@text" msgid "Machine types" -msgstr "" +msgstr "Machinetypen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:77 msgctxt "@text" msgid "Material usage" -msgstr "" +msgstr "Materiaalgebruik" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:83 msgctxt "@text" msgid "Number of slices" -msgstr "" +msgstr "Aantal slices" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:89 msgctxt "@text" msgid "Print settings" -msgstr "" +msgstr "Instellingen voor printen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:102 msgctxt "@text" msgid "Data collected by Ultimaker Cura will not contain any personal information." -msgstr "" +msgstr "De gegevens die Ultimaker Cura verzamelt, bevatten geen persoonlijke informatie." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:103 msgctxt "@text" msgid "More information" -msgstr "" +msgstr "Meer informatie" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WhatsNewContent.qml:24 msgctxt "@label" msgid "What's new in Ultimaker Cura" -msgstr "" +msgstr "Nieuwe functies in Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:42 msgctxt "@label" msgid "There is no printer found over your network." -msgstr "" +msgstr "Kan in uw netwerk geen printer vinden." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:179 msgctxt "@label" msgid "Refresh" -msgstr "" +msgstr "Vernieuwen" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:190 msgctxt "@label" msgid "Add printer by IP" -msgstr "" +msgstr "Printer toevoegen op IP" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:223 msgctxt "@label" msgid "Troubleshooting" -msgstr "" +msgstr "Probleemoplossing" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" -msgstr "" +msgstr "Printernaam" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" -msgstr "" +msgstr "Voer een naam in voor uw printer" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:36 msgctxt "@label" @@ -4963,37 +4887,37 @@ msgstr "Ultimaker Cloud" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:77 msgctxt "@text" msgid "The next generation 3D printing workflow" -msgstr "" +msgstr "De 3D-printworkflow van de volgende generatie" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:94 msgctxt "@text" msgid "- Send print jobs to Ultimaker printers outside your local network" -msgstr "" +msgstr "- Printtaken verzenden naar Ultimaker-printers buiten uw lokale netwerk" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:97 msgctxt "@text" msgid "- Store your Ultimaker Cura settings in the cloud for use anywhere" -msgstr "" +msgstr "- Ultimaker Cura-instellingen opslaan in de cloud zodat u ze overal kunt gebruiken" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:100 msgctxt "@text" msgid "- Get exclusive access to print profiles from leading brands" -msgstr "" +msgstr "- Exclusieve toegang tot printprofielen van toonaangevende merken" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:119 msgctxt "@button" msgid "Finish" -msgstr "" +msgstr "Voltooien" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:128 msgctxt "@button" msgid "Create an account" -msgstr "" +msgstr "Een account maken" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:29 msgctxt "@label" msgid "Welcome to Ultimaker Cura" -msgstr "" +msgstr "Welkom bij Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:47 msgctxt "@text" @@ -5001,26 +4925,13 @@ msgid "" "Please follow these steps to set up\n" "Ultimaker Cura. This will only take a few moments." msgstr "" +"Volg deze stappen voor het instellen van\n" +"Ultimaker Cura. Dit duurt slechts even." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:58 msgctxt "@button" msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "Alleen huidig platform weergeven" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "Schikken naar alle platformen" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "Huidig platform schikken" +msgstr "Aan de slag" #: MachineSettingsAction/plugin.json msgctxt "description" @@ -5105,12 +5016,22 @@ msgstr "Firmware-updater" #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattened quality changes profile." -msgstr "" +msgstr "Hiermee maakt u een afgevlakte versie van het gewijzigde profiel." #: ProfileFlattener/plugin.json msgctxt "name" msgid "Profile Flattener" -msgstr "" +msgstr "Profielvlakker" + +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "Biedt ondersteuning voor het lezen van AMF-bestanden." + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "AMF-lezer" #: USBPrinting/plugin.json msgctxt "description" @@ -5122,16 +5043,6 @@ msgctxt "name" msgid "USB printing" msgstr "USB-printen" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "Hiermee slaat u de resulterende slice op als X3G-bestand, om printers te ondersteunen die deze indeling lezen (Malyan, Makerbot en andere Sailfish-gebaseerde printers)." - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "X3G-schrijver" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5174,23 +5085,13 @@ msgstr "Invoegtoepassing voor Verwijderbaar uitvoerapparaat" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Hiermee beheert u netwerkverbindingen naar Ultimaker 3-printers." +msgid "Manages network connections to Ultimaker networked printers." +msgstr "Hiermee beheert u netwerkverbindingen naar Ultimaker-netwerkprinters." #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "UM3-netwerkverbinding" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" -msgstr "" +msgid "Ultimaker Network Connection" +msgstr "Ultimaker-netwerkverbinding" #: MonitorStage/plugin.json msgctxt "description" @@ -5255,12 +5156,12 @@ msgstr "Supportwisser" #: UFPReader/plugin.json msgctxt "description" msgid "Provides support for reading Ultimaker Format Packages." -msgstr "" +msgstr "Deze optie biedt ondersteuning voor het lezen van Ultimaker Format Packages." #: UFPReader/plugin.json msgctxt "name" msgid "UFP Reader" -msgstr "" +msgstr "UFP-lezer" #: SliceInfoPlugin/plugin.json msgctxt "description" @@ -5345,12 +5246,12 @@ msgstr "Versie-upgrade van 2.7 naar 3.0" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.5 to Cura 4.0." -msgstr "" +msgstr "Hiermee worden configuraties bijgewerkt van Cura 3.5 naar Cura 4.0." #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "name" msgid "Version Upgrade 3.5 to 4.0" -msgstr "" +msgstr "Versie-upgrade van 3.5 naar 4.0" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" @@ -5365,12 +5266,12 @@ msgstr "Versie-upgrade van 3.4 naar 3.5" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 4.0 to Cura 4.1." -msgstr "" +msgstr "Hiermee worden configuraties bijgewerkt van Cura 4.0 naar Cura 4.1." #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "name" msgid "Version Upgrade 4.0 to 4.1" -msgstr "" +msgstr "Versie-upgrade van 4.0 naar 4.1" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" @@ -5382,6 +5283,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "Versie-upgrade van 3.0 naar 3.1" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "Hiermee worden configuraties bijgewerkt van Cura 4.1 naar Cura 4.2." + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "Versie-upgrade van 4.1 naar 4.2" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5412,6 +5323,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "Versie-upgrade van 2.2 naar 2.4" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "Hiermee worden configuraties bijgewerkt van Cura 4.2 naar Cura 4.3." + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "Versie-upgrade van 4.2 naar 4.3" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5422,6 +5343,16 @@ msgctxt "name" msgid "Image Reader" msgstr "Afbeeldinglezer" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "Biedt ondersteuning voor het lezen van modelbestanden." + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "Trimesh-lezer" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5452,16 +5383,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "3MF-lezer" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5485,12 +5406,12 @@ msgstr "G-code-lezer" #: CuraDrive/plugin.json msgctxt "description" msgid "Backup and restore your configuration." -msgstr "" +msgstr "Een back-up maken van uw configuratie en deze herstellen." #: CuraDrive/plugin.json msgctxt "name" msgid "Cura Backups" -msgstr "" +msgstr "Cura-back-ups" #: CuraProfileWriter/plugin.json msgctxt "description" @@ -5525,12 +5446,12 @@ msgstr "3MF-schrijver" #: PreviewStage/plugin.json msgctxt "description" msgid "Provides a preview stage in Cura." -msgstr "" +msgstr "Deze optie biedt een voorbeeldstadium in Cura." #: PreviewStage/plugin.json msgctxt "name" msgid "Preview Stage" -msgstr "" +msgstr "Voorbeeldstadium" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -5552,6 +5473,297 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura-profiellezer" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "Via het netwerk verbonden." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "Via het netwerk verbonden. Keur de aanvraag goed op de printer." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "Via het netwerk verbonden. Kan de printer niet beheren." + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "Er is een toegangsaanvraag voor de printer verstuurd. Keur de aanvraag goed op de printer" + +#~ msgctxt "@info:title" +#~ msgid "Authentication status" +#~ msgstr "Verificatiestatus" + +#~ msgctxt "@info:title" +#~ msgid "Authentication Status" +#~ msgstr "Verificatiestatus" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "De toegangsaanvraag opnieuw verzenden" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "Toegang tot de printer is geaccepteerd" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "Kan geen toegang verkrijgen om met deze printer te printen. Kan de printtaak niet verzenden." + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "Toegang aanvragen" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "Toegangsaanvraag naar de printer verzenden" + +#~ msgctxt "@label" +#~ msgid "Unable to start a new print job." +#~ msgstr "Er kan geen nieuwe taak worden gestart." + +#~ msgctxt "@label" +#~ msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." +#~ msgstr "Er is een probleem met de configuratie van de Ultimaker waardoor het niet mogelijk is het printen te starten. Los het probleem op voordat u verder gaat." + +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "De configuratie komt niet overeen" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "Weet u zeker dat u met de geselecteerde configuratie wilt printen?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "De configuratie of kalibratie van de printer komt niet overeen met de configuratie van Cura. Slice voor het beste resultaat altijd voor de PrintCores en materialen die in de printer zijn ingevoerd." + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "Het verzenden van nieuwe taken is (tijdelijk) geblokkeerd. Nog bezig met het verzenden van de vorige printtaak." + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "De gegevens worden naar de printer verzonden" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "Gegevens Verzenden" + +#~ msgctxt "@info:status" +#~ msgid "No Printcore loaded in slot {slot_number}" +#~ msgstr "Er is geen PrintCore geladen in de sleuf {slot_number}" + +#~ msgctxt "@info:status" +#~ msgid "No material loaded in slot {slot_number}" +#~ msgstr "Er is geen materiaal geladen in de sleuf {slot_number}" + +#~ msgctxt "@label" +#~ msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" +#~ msgstr "Er is een afwijkende PrintCore (Cura: {cura_printcore_name}, printer: {remote_printcore_name}) geselecteerd voor de extruder {extruder_id}" + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "Afwijkend materiaal (Cura: {0}, Printer: {1}) geselecteerd voor de extruder {2}" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "Synchroniseren met de printer" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "Wilt u uw huidige printerconfiguratie gebruiken in Cura?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "De PrintCores en/of materialen in de printer wijken af van de PrintCores en/of materialen in uw huidige project. Slice voor het beste resultaat altijd voor de PrintCores en materialen die in de printer zijn ingevoerd." + +#~ msgctxt "@action:button" +#~ msgid "View in Monitor" +#~ msgstr "In monitor weergeven" + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "Printer '{printer_name}' is klaar met het printen van '{job_name}'." + +#~ msgctxt "@info:status" +#~ msgid "The print job '{job_name}' was finished." +#~ msgstr "De printtaak '{job_name}' is voltooid." + +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "Print klaar" + +#~ msgctxt "@label:material" +#~ msgid "Empty" +#~ msgstr "Leeg" + +#~ msgctxt "@label:material" +#~ msgid "Unknown" +#~ msgstr "Onbekend" + +#~ msgctxt "@info:title" +#~ msgid "Cloud error" +#~ msgstr "Cloud-fout" + +#~ msgctxt "@info:status" +#~ msgid "Could not export print job." +#~ msgstr "Kan de printtaak niet exporteren." + +#~ msgctxt "@info:description" +#~ msgid "There was an error connecting to the cloud." +#~ msgstr "Er is een fout opgetreden tijdens het verbinden met de cloud." + +#~ msgctxt "@info:status" +#~ msgid "Uploading via Ultimaker Cloud" +#~ msgstr "Uploaden via Ultimaker Cloud" + +#~ msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." +#~ msgid "Connect to Ultimaker Cloud" +#~ msgstr "Verbinden met Ultimaker Cloud" + +#~ msgctxt "@action" +#~ msgid "Don't ask me again for this printer." +#~ msgstr "Niet opnieuw vragen voor deze printer." + +#~ msgctxt "@info:status" +#~ msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." +#~ msgstr "U kunt nu overal vandaan printtaken verzenden en controleren met uw Ultimaker-account." + +#~ msgctxt "@info:status" +#~ msgid "Connected!" +#~ msgstr "Verbonden!" + +#~ msgctxt "@action" +#~ msgid "Review your connection" +#~ msgstr "Uw verbinding controleren" + +#~ msgctxt "@info:status Don't translate the XML tags !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "De machine die is vastgelegd in het profiel {0} ({1}), komt niet overeen met uw huidige machine ({2}). Kan het profiel niet importeren." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "Failed to import profile from {0}:" +#~ msgstr "Kan het profiel niet importeren uit {0}:" + +#~ msgctxt "@window:title" +#~ msgid "Existing Connection" +#~ msgstr "Bestaande verbinding" + +#~ msgctxt "@message:text" +#~ msgid "This printer/group is already added to Cura. Please select another printer/group." +#~ msgstr "Deze printer/groep is al aan Cura toegevoegd. Selecteer een andere printer/groep." + +#~ msgctxt "@label" +#~ msgid "Enter the IP address or hostname of your printer on the network." +#~ msgstr "Voer het IP-adres of de hostnaam van de printer in het netwerk in." + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "Verbinding maken met een printer" + +#~ msgctxt "@title" +#~ msgid "Cura Settings Guide" +#~ msgstr "Cura-instellingengids" + +#~ msgctxt "@info:tooltip" +#~ msgid "Zooming towards the mouse is not supported in the orthogonal perspective." +#~ msgstr "Zoomen in de richting van de muis wordt niet ondersteund in het orthogonale perspectief." + +#~ msgid "Orthogonal" +#~ msgstr "Orthografisch" + +#~ msgctxt "description" +#~ msgid "Manages network connections to Ultimaker 3 printers." +#~ msgstr "Hiermee beheert u netwerkverbindingen naar Ultimaker 3-printers." + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "UM3-netwerkverbinding" + +#~ msgctxt "description" +#~ msgid "Provides extra information and explanations about settings in Cura, with images and animations." +#~ msgstr "Biedt extra informatie en uitleg over instellingen in Cura, voorzien van afbeeldingen en animaties." + +#~ msgctxt "name" +#~ msgid "Settings Guide" +#~ msgstr "Instellingengids" + +#~ msgctxt "@item:inmenu" +#~ msgid "Cura Settings Guide" +#~ msgstr "Cura-instellingengids" + +#~ msgctxt "@info:generic" +#~ msgid "Settings have been changed to match the current availability of extruders: [%s]" +#~ msgstr "De instellingen zijn gewijzigd zodat deze overeenkomen met de huidige beschikbaarheid van de extruders: [%s]" + +#~ msgctxt "@title:groupbox" +#~ msgid "User description" +#~ msgstr "Gebruikersbeschrijving" + +#~ msgctxt "@info" +#~ msgid "These options are not available because you are monitoring a cloud printer." +#~ msgstr "Deze opties zijn niet beschikbaar omdat u een cloudprinter controleert." + +#~ msgctxt "@label link to connect manager" +#~ msgid "Go to Cura Connect" +#~ msgstr "Ga naar Cura Connect" + +#~ msgctxt "@info" +#~ msgid "All jobs are printed." +#~ msgstr "Alle taken zijn geprint." + +#~ msgctxt "@label link to connect manager" +#~ msgid "View print history" +#~ msgstr "Printgeschiedenis weergeven" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "Als u rechtstreeks via het netwerk wilt printen naar de printer, moet u ervoor zorgen dat de printer met een netwerkkabel is verbonden met het netwerk of moet u verbinding maken met de printer via het wifi-netwerk. Als u geen verbinding maakt tussen Cura en de printer, kunt u een USB-station gebruiken om G-code-bestanden naar de printer over te zetten.\n" +#~ "\n" +#~ "Selecteer uw printer in de onderstaande lijst:" + +#~ msgctxt "@info" +#~ msgid "" +#~ "Please make sure your printer has a connection:\n" +#~ "- Check if the printer is turned on.\n" +#~ "- Check if the printer is connected to the network." +#~ msgstr "" +#~ "Controleer of de printer verbonden is:\n" +#~ "- Controleer of de printer ingeschakeld is.\n" +#~ "- Controleer of de printer verbonden is met het netwerk." + +#~ msgctxt "@option:check" +#~ msgid "See only current build plate" +#~ msgstr "Alleen huidig platform weergeven" + +#~ msgctxt "@action:button" +#~ msgid "Arrange to all build plates" +#~ msgstr "Schikken naar alle platformen" + +#~ msgctxt "@action:button" +#~ msgid "Arrange current build plate" +#~ msgstr "Huidig platform schikken" + +#~ msgctxt "description" +#~ msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." +#~ msgstr "Hiermee slaat u de resulterende slice op als X3G-bestand, om printers te ondersteunen die deze indeling lezen (Malyan, Makerbot en andere Sailfish-gebaseerde printers)." + +#~ msgctxt "name" +#~ msgid "X3GWriter" +#~ msgstr "X3G-schrijver" + +#~ msgctxt "description" +#~ msgid "Reads SVG files as toolpaths, for debugging printer movements." +#~ msgstr "Hiermee leest u SVG-bestanden als gereedschapsbanen, voor probleemoplossing in printerverplaatsingen." + +#~ msgctxt "name" +#~ msgid "SVG Toolpath Reader" +#~ msgstr "SVG-gereedschapsbaanlezer" + #~ msgctxt "@item:inmenu" #~ msgid "Changelog" #~ msgstr "Wijzigingenlogboek" diff --git a/resources/i18n/nl_NL/fdmextruder.def.json.po b/resources/i18n/nl_NL/fdmextruder.def.json.po index dc2164aa24..3d30c6745d 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.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+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 212804f7a6..61b2b93f3b 100644 --- a/resources/i18n/nl_NL/fdmprinter.def.json.po +++ b/resources/i18n/nl_NL/fdmprinter.def.json.po @@ -5,12 +5,12 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" -"PO-Revision-Date: 2019-03-13 14:00+0200\n" -"Last-Translator: Bothof \n" -"Language-Team: Dutch\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" +"PO-Revision-Date: 2019-07-29 15:51+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Dutch , Dutch \n" "Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -123,7 +123,7 @@ msgstr "Materiaaltemperatuur invoegen" #: fdmprinter.def.json msgctxt "material_print_temp_prepend description" msgid "Whether to include nozzle temperature commands at the start of the gcode. When the start_gcode already contains nozzle temperature commands Cura frontend will automatically disable this setting." -msgstr "Hiermee bepaalt u of aan het begin van de g-code opdrachten voor de nozzletemperatuur moeten worden ingevoegd. Wanneer de start-g-code al opdrachten voor de nozzletemperatuur bevat, wordt deze instelling automatisch uitgeschakeld door de Cura-frontend." +msgstr "Hiermee bepaalt u of aan het begin van de G-code opdrachten voor de nozzletemperatuur moeten worden ingevoegd. Wanneer de start-g-code al opdrachten voor de nozzletemperatuur bevat, wordt deze instelling automatisch uitgeschakeld door de Cura-frontend." #: fdmprinter.def.json msgctxt "material_bed_temp_prepend label" @@ -133,7 +133,7 @@ msgstr "Platformtemperatuur invoegen" #: fdmprinter.def.json msgctxt "material_bed_temp_prepend description" msgid "Whether to include build plate temperature commands at the start of the gcode. When the start_gcode already contains build plate temperature commands Cura frontend will automatically disable this setting." -msgstr "Hiermee bepaalt u of aan het begin van de g-code opdrachten voor de platformtemperatuur moeten worden ingevoegd. Wanneer de start-g-code al opdrachten voor de platformtemperatuur bevat, wordt deze instelling automatisch uitgeschakeld door de Cura-frontend." +msgstr "Hiermee bepaalt u of aan het begin van de G-code opdrachten voor de platformtemperatuur moeten worden ingevoegd. Wanneer de start-g-code al opdrachten voor de platformtemperatuur bevat, wordt deze instelling automatisch uitgeschakeld door de Cura-frontend." #: fdmprinter.def.json msgctxt "machine_width label" @@ -215,6 +215,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "Hiermee geeft u aan of een verwarmd platform aanwezig is." +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "Heeft temperatuurstabilisatie van werkvolume" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "Of de machine in staat is de temperatuur van het werkvolume te stabiliseren." + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -238,7 +248,7 @@ msgstr "Aantal extruder trains. Een extruder train is de combinatie van een feed #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders That Are Enabled" -msgstr "" +msgstr "Aantal ingeschakelde extruders" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -248,7 +258,7 @@ msgstr "Het aantal extruder trains dat ingeschakeld is; automatisch ingesteld in #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer Nozzle Diameter" -msgstr "" +msgstr "Buitendiameter nozzle" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter description" @@ -258,7 +268,7 @@ msgstr "De buitendiameter van de punt van de nozzle." #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle Length" -msgstr "" +msgstr "Nozzlelengte" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance description" @@ -268,7 +278,7 @@ msgstr "Het hoogteverschil tussen de punt van de nozzle en het laagste deel van #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle Angle" -msgstr "" +msgstr "Nozzlehoek" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle description" @@ -278,7 +288,7 @@ msgstr "De hoek tussen het horizontale vlak en het conische gedeelte boven de pu #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat Zone Length" -msgstr "" +msgstr "Lengte verwarmingszone" #: fdmprinter.def.json msgctxt "machine_heat_zone_length description" @@ -308,7 +318,7 @@ msgstr "Hiermee geeft u aan of u de temperatuur wilt reguleren vanuit Cura. Scha #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat Up Speed" -msgstr "" +msgstr "Verwarmingssnelheid" #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed description" @@ -318,7 +328,7 @@ msgstr "De snelheid (°C/s) waarmee de nozzle wordt verwarmd, gemiddeld over het #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool Down Speed" -msgstr "" +msgstr "Afkoelsnelheid" #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed description" @@ -337,8 +347,8 @@ msgstr "De minimale tijd die een extruder inactief moet zijn, voordat de nozzle #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" -msgstr "" +msgid "G-code Flavor" +msgstr "Versie G-code" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" @@ -403,7 +413,7 @@ msgstr "Hiermee bepaalt u of u voor het intrekken van materiaal firmwareopdracht #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed Areas" -msgstr "" +msgstr "Verboden gebieden" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" @@ -423,7 +433,7 @@ msgstr "Een lijst polygonen met gebieden waarin de nozzle niet mag komen." #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine Head Polygon" -msgstr "" +msgstr "Machinekoppolygoon" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -433,7 +443,7 @@ msgstr "Een 2D-silouette van de printkop (exclusief ventilatorkappen)." #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine Head & Fan Polygon" -msgstr "" +msgstr "Machinekop- en ventilatorpolygoon" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -443,7 +453,7 @@ msgstr "Een 2D-silouette van de printkop (inclusief ventilatorkappen)." #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry Height" -msgstr "" +msgstr "Rijbrughoogte" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -473,7 +483,7 @@ msgstr "De binnendiameter van de nozzle. Verander deze instelling wanneer u een #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset with Extruder" -msgstr "" +msgstr "Offset met extruder" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -1270,6 +1280,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "Scherpste hoek" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "Z-naadpositie" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "De positie nabij waar met het printen van elk deel van een laag moet worden begonnen." + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "Linksachter" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "Achter" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "Rechtsachter" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "Rechts" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "Rechtsvoor" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "Voor" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "Linksvoor" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "Links" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1297,8 +1357,8 @@ msgstr "Voorkeur van naad en hoek" #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "Instellen of hoeken in het model invloed hebben op de positie van de naad. Geen wil zeggen dat hoeken geen invloed hebben op de positie van de naad. Met Naad verbergen is de kans groter dat de naad op een binnenhoek komt. Met Naad zichtbaar maken is de kans groter dat de naad op een buitenhoek komt. Met Naad verbergen of Naad zichtbaar maken is de kans groter dat de naad op een binnen- of buitenhoek komt." +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "Instellen of hoeken in het model invloed hebben op de positie van de naad. Geen wil zeggen dat hoeken geen invloed hebben op de positie van de naad. Met Naad Verbergen is de kans groter dat de naad op een binnenhoek komt. Met Naad Zichtbaar Maken is de kans groter dat de naad op een buitenhoek komt. Met Naad Verbergen of Naad Zichtbaar Maken is de kans groter dat de naad op een binnen- of buitenhoek komt. Met Slim Verbergen zijn zowel binnen- als buitenhoeken mogelijk, maar wordt er vaker (indien van toepassing) gebruikgemaakt van binnenhoeken." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1320,6 +1380,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "Naad verbergen of zichtbaar maken" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "Slim verbergen" + #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" @@ -1332,13 +1397,13 @@ msgstr "Als deze optie ingeschakeld is, zijn de Z-naadcoördinaten relatief ten #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "Kleine Z-gaten Negeren" +msgid "No Skin in Z Gaps" +msgstr "Geen skin in Z-gaten" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "Wanneer het model kleine verticale gaten heeft, kan er circa 5% berekeningstijd extra worden besteed aan het genereren van de boven- en onderskin in deze kleine ruimten. Indien u dit wenst, schakelt u de instelling uit." +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "Als het model kleine verticale gaten van slechts een paar lagen heeft, bevindt er zich doorgaans een skin rond die lagen in de kleine ruimte. Schakel deze instelling in om geen skin te genereren als de verticale tussenruimte erg klein is. Zo verloopt printen en slicen sneller, maar technisch nadeel is dat de vulling aan de lucht wordt blootgesteld." #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1357,8 +1422,9 @@ msgstr "Strijken inschakelen" #: fdmprinter.def.json 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." +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." #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1450,6 +1516,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "De maximale onmiddellijke snelheidsverandering tijdens het strijken." +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "Overlappercentage Skin" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Pas de mate van overlap tussen de wanden en (de eindpunten van) de skin-middellijnen aan, als percentage van de lijnbreedtes van de skin-lijnen en de binnenste wand. Met een lichte overlap kunnen de wanden goed hechten aan de skin. Houd er rekening mee dat met een gelijke lijnbreedte voor skin en wand, skin buiten de wand kan treden bij een percentage hoger dan 50%, omdat de nozzle van de skin-extruder op deze positie al voorbij het midden van de wand kan zijn." + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "Overlap Skin" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Pas de mate van overlap tussen de wanden en (de eindpunten van) de skin-middellijnen aan. Met een lichte overlap kunnen de wanden goed hechten aan de skin. Houd er rekening mee dat met een gelijke lijnbreedte voor skin en wand, skin buiten de wand kan treden bij een waarde groter dan de halve wandbreedte, omdat de nozzle van de skin-extruder op deze positie het midden van de wand al kan hebben bereikt." + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1615,6 +1701,16 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Het vulpatroon wordt over deze afstand verplaatst langs de Y-as." +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +msgstr "Start willekeurig invullen" + +#: 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 "Bepaal willekeurig welke invullijn het eerst wordt geprint. Dit voorkomt dat één segment het sterkst wordt, maar gaat ten koste van een extra beweging." + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1669,26 +1765,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "De mate van overlap tussen de vulling en de wanden. Met een lichte overlap kunnen de wanden goed hechten aan de vulling." -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "Overlappercentage Skin" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Pas de mate van overlap tussen de wanden en (de eindpunten van) de skin-middellijnen aan, als percentage van de lijnbreedtes van de skin-lijnen en de binnenste wand. Met een lichte overlap kunnen de wanden goed hechten aan de skin. Houd er rekening mee dat met een gelijke lijnbreedte voor skin en wand, skin buiten de wand kan treden bij een percentage hoger dan 50%, omdat de nozzle van de skin-extruder op deze positie al voorbij het midden van de wand kan zijn." - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "Overlap Skin" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Pas de mate van overlap tussen de wanden en (de eindpunten van) de skin-middellijnen aan. Met een lichte overlap kunnen de wanden goed hechten aan de skin. Houd er rekening mee dat met een gelijke lijnbreedte voor skin en wand, skin buiten de wand kan treden bij een waarde groter dan de halve wandbreedte, omdat de nozzle van de skin-extruder op deze positie het midden van de wand al kan hebben bereikt." - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1872,12 +1948,12 @@ msgstr "De standaardtemperatuur waarmee wordt geprint. Dit moet overeenkomen met #: fdmprinter.def.json msgctxt "build_volume_temperature label" msgid "Build Volume Temperature" -msgstr "" +msgstr "Temperatuur werkvolume" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." -msgstr "" +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." +msgstr "De omgevingstemperatuur waarin wordt geprint. Als deze waarde is ingesteld op 0, wordt de temperatuur van het werkvolume niet aangepast." #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1989,6 +2065,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "Krimpverhouding in procenten." +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "Kristallijnmateriaal" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "Breekt dit materiaal recht af wanneer het wordt verwarmd (kristallijn) of produceert het lange, met elkaar verweven polymeerketens (niet-kristallijn)?" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "Intrekpositie voor niet-uitlopen" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "Hoe ver het materiaal moet worden ingetrokken voordat het niet meer uitloopt." + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "Intreksnelheid voor niet-uitlopen" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "Hoe snel het materiaal moet worden ingetrokken tijdens het wisselen van een filament om uitlopen te voorkomen." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "Intrekpositie voor voorbereiding van afbreken" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "Hoe ver het filament kan worden uitgerekt voordat het afbreekt, wanneer het wordt verwarmd." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "Intreksnelheid voor voorbereiding van afbreken" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "Hoe snel het filament moet worden ingetrokken voordat het bij het intrekken afbreekt." + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "Intrekpositie voor afbreken" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "Hoe ver het filament moet worden ingetrokken om het recht af te breken." + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "Intreksnelheid voor afbreken" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "De snelheid waarmee het filament wordt ingetrokken om het recht af te breken." + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "Temperatuur voor afbreken" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "De temperatuur waarbij het filament wordt afgebroken om het recht af te breken." + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -1999,6 +2155,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "Doorvoercompensatie: de hoeveelheid materiaal die wordt doorgevoerd, wordt vermenigvuldigd met deze waarde." +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "Wanddoorvoer" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "Doorvoercompensatie op wandlijnen." + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "Buitenste wanddoorvoer" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "Doorvoercompensatie op de buitenste wandlijn." + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "Doorvoer binnenwand(en)" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "Doorvoercompensatie op wandlijnen voor alle wandlijnen behalve de buitenste." + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "Doorvoer boven/onder" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "Doorvoercompensatie op bovenste/onderste lijn." + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "Bovenste oppervlak skindoorvoer" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "Doorvoercompensatie op lijnen van de gebieden bovenaan de print." + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "Doorvoer vulling" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "Doorvoercompensatie op vullijnen." + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "Doorvoer skirt/brim" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "Doorvoercompensatie op skirt- of brimlijnen." + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "Doorvoer support" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "Doorvoercompensatie op de supportstructuurlijnen." + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "Doorvoer supportinterface" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "Doorvoercompensatie op de lijnen van supportdak of de supportvloer." + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "Doorvoer supportdak" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "Doorvoercompensatie op supportdaklijnen." + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "Doorvoer supportvloer" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "Doorvoercompensatie op de supportvloerlijnen." + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "Doorvoer Primepijler" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "Doorvoercompensatie op primepijlerlijnen." + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2116,7 +2392,7 @@ msgstr "Supportintrekkingen beperken" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." msgstr "Sla intrekking over tijdens bewegingen in een rechte lijn van support naar support. Deze instelling verkort de printtijd, maar kan leiden tot overmatige draadvorming in de supportstructuur." #: fdmprinter.def.json @@ -2169,6 +2445,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "De snelheid waarmee het filament tijdens een intrekbeweging na het wisselen van de nozzles wordt geprimed." +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "Extra primehoeveelheid na wisselen van nozzle" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "Extra primemateriaal na het wisselen van de nozzle." + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2360,14 +2646,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "De snelheid waarmee de skirt en de brim worden geprint. Normaal gebeurt dit met dezelfde snelheid als de snelheid van de eerste laag, maar in sommige situaties wilt u de skirt of de brim mogelijk met een andere snelheid printen." #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "Maximale Z-snelheid" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "Snelheid Z-sprong" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "De maximale snelheid waarmee het platform wordt bewogen. Wanneer u deze optie instelt op 0, worden voor het printen de standaardwaarden voor de maximale Z-snelheid gebruikt." +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "De snelheid waarmee de verticale Z-beweging wordt gemaakt voor Z-sprongen. Dit is meestal lager dan de printsnelheid, omdat het platform of de rijbrug van de machine moeilijker te verplaatsen is." #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2869,16 +3155,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "De afstand tussen de nozzle en geprinte delen wanneer deze tijdens bewegingen worden gemeden." -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "Lagen beginnen met hetzelfde deel" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "Begin het printen van elke laag van het object bij hetzelfde punt, zodat we geen nieuwe laag beginnen met het printen van het deel waarmee de voorgaande laag is geëindigd. Hiermee wordt de kwaliteit van overhangende gedeelten en kleine delen verbeterd, maar duurt het printen langer." - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -2932,7 +3208,7 @@ msgstr "Het hoogteverschil dat wordt aangehouden tijdens een Z-sprong." #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch label" msgid "Z Hop After Extruder Switch" -msgstr "Z-beweging na Wisselen Extruder" +msgstr "Z-sprong na Wisselen Extruder" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch description" @@ -2942,12 +3218,12 @@ msgstr "Nadat de machine van de ene extruder naar de andere is gewisseld, wordt #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height label" msgid "Z Hop After Extruder Switch Height" -msgstr "" +msgstr "Hoogte Z-sprong na wisselen extruder" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height description" msgid "The height difference when performing a Z Hop after extruder switch." -msgstr "" +msgstr "Het hoogteverschil dat wordt aangehouden tijdens een Z-sprong na wisselen extruder." #: fdmprinter.def.json msgctxt "cooling label" @@ -3222,7 +3498,7 @@ msgstr "Kruis" #: fdmprinter.def.json msgctxt "support_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "Gyroïde" #: fdmprinter.def.json msgctxt "support_wall_count label" @@ -3285,14 +3561,16 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "Afstand tussen de lijnen van de supportstructuur voor de eerste laag. Deze wordt berekend op basis van de dichtheid van de supportstructuur." #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "Lijnrichting Vulling Supportstructuur" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." -msgstr "Richting van het vulpatroon voor supportstructuren. Het vulpatroon voor de supportstructuur wordt in het horizontale vlak gedraaid." +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." #: fdmprinter.def.json msgctxt "support_brim_enable label" @@ -3421,7 +3699,7 @@ msgstr "Samenvoegafstand Supportstructuur" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." msgstr "De maximale afstand tussen de supportstructuren in de X- en Y-richting. Wanneer afzonderlijke structuren dichter bij elkaar staan dan deze waarde, worden deze samengevoegd tot één structuur." #: fdmprinter.def.json @@ -3759,6 +4037,45 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "De mate van offset die wordt toegepast op de supportvloeren." +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +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." + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +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." + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +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." + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3800,14 +4117,14 @@ msgid "The diameter of a special tower." msgstr "De diameter van een speciale pijler." #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "Minimale Diameter" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "Maximale pijler-ondersteunde diameter" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." -msgstr "De minimale diameter in de X- en Y-richting van een kleiner gebied dat moet worden ondersteund door een speciale steunpijler." +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "De maximale diameter in de X- en Y-richting van een kleiner gebied dat moet worden ondersteund door een speciale steunpijler." #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" @@ -4303,16 +4620,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "Print een pijler naast de print, waarop het materiaal na iedere nozzlewisseling wordt ingespoeld." -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "Ronde primepijler" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "Geef de primepijler een ronde vorm." - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4353,16 +4660,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "De Y-coördinaat van de positie van de primepijler." -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "Doorvoer Primepijler" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "Doorvoercompensatie: de hoeveelheid materiaal die wordt doorgevoerd, wordt vermenigvuldigd met deze waarde." - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4376,12 +4673,12 @@ msgstr "Veeg na het printen van de primepijler met één nozzle het doorgevoerde #: fdmprinter.def.json msgctxt "prime_tower_brim_enable label" msgid "Prime Tower Brim" -msgstr "" +msgstr "Brim primepijler" #: fdmprinter.def.json msgctxt "prime_tower_brim_enable description" msgid "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type." -msgstr "" +msgstr "Primepijlers hebben mogelijk de extra hechting van een brim nodig, ook als het model dit niet nodig heeft. Kan momenteel niet worden gebruikt met het hechtingstype 'Raft'." #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4665,7 +4962,7 @@ msgstr "Gespiraliseerde contouren effenen" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." msgstr "Maak de gespiraliseerde contouren vlak om de zichtbaarheid van de Z-naad te verminderen (de Z-naad mag in de print nauwelijks zichtbaar zijn, maar is nog wel zichtbaar in de laagweergave). Houd er rekening mee dat fijne oppervlaktedetails worden vervaagd door het effenen." #: fdmprinter.def.json @@ -4901,12 +5198,14 @@ msgstr "Het minimale formaat van een bewegingslijnsegment na het slicen. Als u d #: fdmprinter.def.json msgctxt "meshfix_maximum_deviation label" msgid "Maximum Deviation" -msgstr "" +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." -msgstr "" +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" @@ -5165,8 +5464,8 @@ msgstr "Conische supportstructuur inschakelen" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "Experimentele functie: maak draagvlakken aan de onderkant kleiner dan bij de overhang." +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "Maak draagvlakken aan de onderkant kleiner dan bij de overhang." #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5510,7 +5809,7 @@ msgstr "De afstand tussen de nozzle en horizontaal neergaande lijnen. Een groter #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled label" msgid "Use Adaptive Layers" -msgstr "" +msgstr "Adaptieve lagen gebruiken" #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled description" @@ -5520,7 +5819,7 @@ msgstr "Met adaptieve lagen berekent u de laaghoogte afhankelijk van de vorm van #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation label" msgid "Adaptive Layers Maximum Variation" -msgstr "" +msgstr "Maximale variatie adaptieve lagen" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" @@ -5530,7 +5829,7 @@ msgstr "De maximaal toegestane hoogte ten opzichte van de grondlaaghoogte." #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" msgid "Adaptive Layers Variation Step Size" -msgstr "" +msgstr "Stapgrootte variatie adaptieve lagen" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step description" @@ -5540,7 +5839,7 @@ 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 "" +msgstr "Drempelwaarde adaptieve lagen" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" @@ -5760,152 +6059,194 @@ msgstr "Percentage ventilatorsnelheid tijdens het printen van de derde brugskinl #: fdmprinter.def.json msgctxt "clean_between_layers label" msgid "Wipe Nozzle Between Layers" -msgstr "" +msgstr "Nozzle afvegen tussen lagen" #: fdmprinter.def.json msgctxt "clean_between_layers description" msgid "Whether to include nozzle wipe G-Code between layers. Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working." -msgstr "" +msgstr "Hiermee bepaalt u of u het afvegen van de nozzle tussen lagen wilt opnemen in de G-code. Het inschakelen van deze instelling kan het gedrag van het intrekken tijdens de laagwissel beïnvloeden. Gebruik de instelling voor intrekken bij afvegen om het intrekken te controleren bij lagen waarop afveegscript van toepassing is." #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe label" msgid "Material Volume Between Wipes" -msgstr "" +msgstr "Materiaalvolume tussen afvegen" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe description" msgid "Maximum material, that can be extruded before another nozzle wipe is initiated." -msgstr "" +msgstr "Maximale materiaalhoeveelheid die kan worden doorgevoerd voordat de nozzle opnieuw wordt afgeveegd." #: fdmprinter.def.json msgctxt "wipe_retraction_enable label" msgid "Wipe Retraction Enable" -msgstr "" +msgstr "Intrekken voor afvegen inschakelen" #: fdmprinter.def.json msgctxt "wipe_retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area." -msgstr "" +msgstr "Hiermee wordt het filament ingetrokken wanneer de nozzle over een niet-printbaar gebied gaat." #: fdmprinter.def.json msgctxt "wipe_retraction_amount label" msgid "Wipe Retraction Distance" -msgstr "" +msgstr "Intrekafstand voor afvegen" #: fdmprinter.def.json msgctxt "wipe_retraction_amount description" msgid "Amount to retract the filament so it does not ooze during the wipe sequence." -msgstr "" +msgstr "Volume filament dat moet worden ingetrokken om te voorkomen dat filament verloren gaat tijdens het afvegen." #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount label" msgid "Wipe Retraction Extra Prime Amount" -msgstr "" +msgstr "Extra primehoeveelheid na intrekken voor afvegen" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount description" msgid "Some material can ooze away during a wipe travel moves, which can be compensated for here." -msgstr "" +msgstr "Tijdens veegbewegingen kan materiaal verloren gaan, wat met deze optie kan worden gecompenseerd." #: fdmprinter.def.json msgctxt "wipe_retraction_speed label" msgid "Wipe Retraction Speed" -msgstr "" +msgstr "Intreksnelheid voor afvegen" #: fdmprinter.def.json msgctxt "wipe_retraction_speed description" msgid "The speed at which the filament is retracted and primed during a wipe retraction move." -msgstr "" +msgstr "De snelheid waarmee het filament tijdens een intrekbeweging voor afvegen wordt ingetrokken en geprimed." #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed label" msgid "Wipe Retraction Retract Speed" -msgstr "" +msgstr "Intreksnelheid voor afvegen (intrekken)" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed description" msgid "The speed at which the filament is retracted during a wipe retraction move." -msgstr "" +msgstr "De snelheid waarmee het filament tijdens een intrekbeweging voor afvegen wordt ingetrokken." #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "Intreksnelheid (primen)" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed description" msgid "The speed at which the filament is primed during a wipe retraction move." -msgstr "" +msgstr "De snelheid waarmee het filament tijdens een intrekbeweging voor afvegen wordt geprimed." #: fdmprinter.def.json msgctxt "wipe_pause label" msgid "Wipe Pause" -msgstr "" +msgstr "Afvegen pauzeren" #: fdmprinter.def.json msgctxt "wipe_pause description" msgid "Pause after the unretract." -msgstr "" +msgstr "Pauzeren na het ongedaan maken van intrekken." #: fdmprinter.def.json msgctxt "wipe_hop_enable label" msgid "Wipe Z Hop When Retracted" -msgstr "" +msgstr "Z-sprong wanneer ingetrokken voor afvegen" #: fdmprinter.def.json msgctxt "wipe_hop_enable description" msgid "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." -msgstr "" +msgstr "Tijdens het intrekken wordt het platform omlaag gebracht om ruimte te creëren tussen de nozzle en de print. Hiermee wordt voorkomen dat de nozzle de print raakt tijdens een beweging en wordt de kans verkleind dat de print van het platform wordt gestoten." #: fdmprinter.def.json msgctxt "wipe_hop_amount label" msgid "Wipe Z Hop Height" -msgstr "" +msgstr "Hoogte Z-sprong voor afvegen" #: fdmprinter.def.json msgctxt "wipe_hop_amount description" msgid "The height difference when performing a Z Hop." -msgstr "" +msgstr "Het hoogteverschil dat wordt aangehouden tijdens een Z-sprong." #: fdmprinter.def.json msgctxt "wipe_hop_speed label" msgid "Wipe Hop Speed" -msgstr "" +msgstr "Sprongsnelheid voor afvegen" #: fdmprinter.def.json msgctxt "wipe_hop_speed description" msgid "Speed to move the z-axis during the hop." -msgstr "" +msgstr "Snelheid waarmee de Z-as wordt verplaatst tijdens de sprong." #: fdmprinter.def.json msgctxt "wipe_brush_pos_x label" msgid "Wipe Brush X Position" -msgstr "" +msgstr "X-positie afveegborstel" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x description" msgid "X location where wipe script will start." -msgstr "" +msgstr "X-positie waar afveegscript start." #: fdmprinter.def.json msgctxt "wipe_repeat_count label" msgid "Wipe Repeat Count" -msgstr "" +msgstr "Aantal afveegbewegingen" #: fdmprinter.def.json msgctxt "wipe_repeat_count description" msgid "Number of times to move the nozzle across the brush." -msgstr "" +msgstr "Aantal keren dat de nozzle over de borstel beweegt." #: fdmprinter.def.json msgctxt "wipe_move_distance label" msgid "Wipe Move Distance" -msgstr "" +msgstr "Verplaatsingsafstand voor afvegen" #: fdmprinter.def.json msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." -msgstr "" +msgstr "De afstand die de kop heen en weer wordt bewogen over de borstel." + +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "Maximale grootte kleine gaten" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "Gaten en contouren van onderdelen met een kleinere diameter dan deze worden afgedrukt met behulp van Klein kenmerksnelheid." + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "Maximale lengte klein kenmerk" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "Kenmerkcontouren die korter zijn dan deze lengte, worden afgedrukt met behulp van Klein kenmerksnelheid." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +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" +" nauwkeurigheid verbeteren." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor_0 label" +msgid "First Layer Speed" +msgstr "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." +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." #: fdmprinter.def.json msgctxt "command_line_settings label" @@ -5967,6 +6308,90 @@ 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 "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." + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "Lagen beginnen met hetzelfde deel" + +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "Begin het printen van elke laag van het object bij hetzelfde punt, zodat we geen nieuwe laag beginnen met het printen van het deel waarmee de voorgaande laag is geëindigd. Hiermee wordt de kwaliteit van overhangende gedeelten en kleine delen verbeterd, maar duurt het printen langer." + +#~ msgctxt "support_infill_angles description" +#~ msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +#~ msgstr "Richting van het vulpatroon voor supportstructuren. Het vulpatroon voor de supportstructuur wordt in het horizontale vlak gedraaid." + +#~ 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." +#~ 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." + +#~ msgctxt "machine_gcode_flavor label" +#~ msgid "G-code Flavour" +#~ msgstr "Versie G-code" + +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "Instellen of hoeken in het model invloed hebben op de positie van de naad. Geen wil zeggen dat hoeken geen invloed hebben op de positie van de naad. Met Naad verbergen is de kans groter dat de naad op een binnenhoek komt. Met Naad zichtbaar maken is de kans groter dat de naad op een buitenhoek komt. Met Naad verbergen of Naad zichtbaar maken is de kans groter dat de naad op een binnen- of buitenhoek komt." + +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "Kleine Z-gaten Negeren" + +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "Wanneer het model kleine verticale gaten heeft, kan er circa 5% berekeningstijd extra worden besteed aan het genereren van de boven- en onderskin in deze kleine ruimten. Indien u dit wenst, schakelt u de instelling uit." + +#~ msgctxt "build_volume_temperature description" +#~ msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +#~ msgstr "De temperatuur van het werkvolume. Als deze waarde is ingesteld op 0, wordt de temperatuur van het werkvolume niet aangepast." + +#~ msgctxt "limit_support_retractions description" +#~ msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +#~ msgstr "Sla intrekking over tijdens bewegingen in een rechte lijn van support naar support. Deze instelling verkort de printtijd, maar kan leiden tot overmatige draadvorming in de supportstructuur." + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "Maximale Z-snelheid" + +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "De maximale snelheid waarmee het platform wordt bewogen. Wanneer u deze optie instelt op 0, worden voor het printen de standaardwaarden voor de maximale Z-snelheid gebruikt." + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "De maximale afstand tussen de supportstructuren in de X- en Y-richting. Wanneer afzonderlijke structuren dichter bij elkaar staan dan deze waarde, worden deze samengevoegd tot één structuur." + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "Minimale Diameter" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "De minimale diameter in de X- en Y-richting van een kleiner gebied dat moet worden ondersteund door een speciale steunpijler." + +#~ msgctxt "prime_tower_circular label" +#~ msgid "Circular Prime Tower" +#~ msgstr "Ronde primepijler" + +#~ msgctxt "prime_tower_circular description" +#~ msgid "Make the prime tower as a circular shape." +#~ msgstr "Geef de primepijler een ronde vorm." + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "Doorvoercompensatie: de hoeveelheid materiaal die wordt doorgevoerd, wordt vermenigvuldigd met deze waarde." + +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "Maak de gespiraliseerde contouren vlak om de zichtbaarheid van de Z-naad te verminderen (de Z-naad mag in de print nauwelijks zichtbaar zijn, maar is nog wel zichtbaar in de laagweergave). Houd er rekening mee dat fijne oppervlaktedetails worden vervaagd door het effenen." + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "Experimentele functie: maak draagvlakken aan de onderkant kleiner dan bij de overhang." + #~ msgctxt "extruders_enabled_count label" #~ msgid "Number of Extruders that are enabled" #~ msgstr "Het aantal extruders dat ingeschakeld is" diff --git a/resources/i18n/pl_PL/cura.po b/resources/i18n/pl_PL/cura.po index 6de50fdc62..79ec7b48af 100644 --- a/resources/i18n/pl_PL/cura.po +++ b/resources/i18n/pl_PL/cura.po @@ -5,21 +5,21 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" -"PO-Revision-Date: 2019-03-14 14:44+0100\n" -"Last-Translator: Mariusz 'Virgin71' Matłosz \n" -"Language-Team: reprapy.pl\n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" +"PO-Revision-Date: 2019-09-24 17:00+0200\n" +"Last-Translator: Mariusz Matłosz \n" +"Language-Team: Mariusz Matłosz , reprapy.pl\n" "Language: pl_PL\n" "MIME-Version: 1.0\n" "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.1.1\n" +"X-Generator: Poedit 2.2.3\n" "X-Poedit-SourceCharset: UTF-8\n" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "Ustawienia drukarki" @@ -86,36 +86,45 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Profil został spłaszczony i aktywowany." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "Plik AMF" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "Drukowanie USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Drukuj przez USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Drukuj przez USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "Połączono przez USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "Trwa drukowanie przez USB, zamknięcie Cura spowoduje jego zatrzymanie. Jesteś pewien?" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /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/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "Nadal trwa drukowanie. Cura nie może rozpocząć kolejnego wydruku przez USB, dopóki poprzedni wydruk nie zostanie zakończony." + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +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" @@ -127,6 +136,11 @@ 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" @@ -161,7 +175,7 @@ msgid "Save to Removable Drive {0}" msgstr "Zapisz na dysk wymienny {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Nie ma żadnych formatów plików do zapisania!" @@ -198,10 +212,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/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "Błąd" @@ -230,9 +243,9 @@ 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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "Ostrzeżenie" @@ -259,347 +272,149 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Dysk wymienny" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "Drukuj przez sieć" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "Drukuj przez sieć" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "Połączono przez sieć." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "Połączono przez sieć. Proszę zatwierdzić żądanie dostępu na drukarce." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "Połączono przez sieć. Brak dostępu do sterowania drukarką." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "Wymagany dostęp do drukarki. Proszę zatwierdzić prośbę na drukarce" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "Status uwierzytelniania" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "Status Uwierzytelniania" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "Spróbuj ponownie" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "Prześlij ponownie żądanie dostępu" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "Dostęp do drukarki został zaakceptowany" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "Brak dostępu do tej drukarki. Nie można wysłać zadania drukowania." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "Poproś o dostęp" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "Wyślij żądanie dostępu do drukarki" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "Nie można uruchomić nowego zadania drukowania." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "Wystąpił problem z konfiguracją twojego Ultimaker'a, przez który nie można rozpocząć wydruku. Proszę rozwiąż te problemy przed kontynuowaniem." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "Niedopasowana konfiguracja" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "Czy na pewno chcesz drukować z wybraną konfiguracją?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Występuje niezgodność między konfiguracją lub kalibracją drukarki a Curą. Aby uzyskać najlepszy rezultat, zawsze tnij dla Print core'ów i materiałów włożonych do drukarki." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "Wysyłanie nowych zadań (tymczasowo) zostało zablokowane, dalej wysyłane jest poprzednie zadanie." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "Wysyłanie danych do drukarki" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "Wysyłanie danych" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Anuluj" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "Brak Printcore'a w slocie {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "Brak załadowanego materiału w slocie {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "Inny PrintCore (Cura: {cura_printcore_name}, Drukarka: {remote_printcore_name}) wybrany dla extrudera {extruder_id}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "Różne materiały (Cura: {0}, Drukarka: {1}) wybrane do dzyszy {2}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "Synchronizuj się z drukarką" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "Czy chcesz używać bieżącej konfiguracji drukarki w programie Cura?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "PrintCore'y i/lub materiały w drukarce różnią się od tych w obecnym projekcie. Dla najlepszego rezultatu, zawsze tnij dla wybranych PrinCore'ów i materiałów, które są umieszczone w drukarce." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "Połączone przez sieć" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "Zadanie drukowania zostało pomyślnie wysłane do drukarki." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "Dane Wysłane" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "Zobacz w Monitorze" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "{printer_name} skończyła drukowanie '{job_name}'." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "Zadanie '{job_name}' zostało zakończone." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "Drukowanie zakończone" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "Pusty" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "Nieznany" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "Drukuj przez Chmurę" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "Drukuj przez Chmurę" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "Połączony z Chmurą" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "Błąd Chmury" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "Nie można eksportować zadania druku." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "Nie można wgrać danych do drukarki." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "jutro" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "dziś" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "Wystąpił błąd połączenia z chmurą." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Wyślij i nadzoruj zadania druku z każdego miejsca, używając konta Ultimaker." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "Nie pytaj więcej dla tej drukarki." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "Rozpocznij" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Możesz teraz wysłać i nadzorować zadania druku z każdego miejsca, używając konta Ultimaker." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "Połączono!" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "Odnów połączenie" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Połącz przez sieć" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" -msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +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 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "Drukuj przez sieć" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "Połączone przez sieć" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "Poczekaj, aż bieżące zadanie zostanie wysłane." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "Błąd druku" + +#: /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 "Próbujesz połączyć się z {0}, ale nie jest to gospodarz grupy. Możesz odwiedzić stronę internetową, aby skonfigurować jako gospodarza." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "Nie jest gospodarzem grupy" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "Konfiguruj grupę" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "Wyślij i nadzoruj zadania druku z każdego miejsca, używając konta Ultimaker." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "Połacz z Ultimaker Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "Rozpocznij" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "Wysyłanie zadania druku" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "Przesyłanie zadania do drukarki." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "Zadanie drukowania zostało pomyślnie wysłane do drukarki." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "Dane Wysłane" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "Próbujesz połączyć się z drukarką, na której nie działa Ultimaker Connect. Zaktualizuj drukarkę do najnowszej wersji firmware." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "Zaktualizuj swoją drukarkę" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "Cura wykryła profile materiałów, które nie zostały jeszcze zainstalowane na gospodarzu grupy {0}." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "Wysyłanie materiałów do drukarki" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "Nie można wgrać danych do drukarki." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "Błąd sieci" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "jutro" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "dziś" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "Drukuj przez Chmurę" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "Drukuj przez Chmurę" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" +msgstr "Połączony z Chmurą" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Monitor" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "Nie można uzyskać dostępu do informacji o aktualizacji." @@ -626,12 +441,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Widok warstwy" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Cura nie wyświetla dokładnie warstw kiedy drukowanie przewodowe jest włączone" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "Widok symulacji" @@ -686,6 +501,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Obraz GIF" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "Otwórz skompresowaną siatkę trójkątów" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "Cyfrowa wymiana zasobów COLLADA" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "Biblioteka glTF" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "Załączony JSON glTF" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "Format trójkątów Stanforda" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "Skompresowana cyfrowa wymiana zasobów COLLADA" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -766,19 +611,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Plik 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "Dysza" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "Otwórz Plik Projektu" @@ -793,18 +638,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Plik G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Analizowanie G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "Szczegóły G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Przed wysłaniem pliku upewnij się, że G-code jest odpowiedni do konfiguracji drukarki. Przedstawienie G-kodu może nie być dokładne." @@ -907,16 +752,16 @@ msgstr "Logowanie nie powiodło się" #: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33 msgctxt "@info:not supported profile" msgid "Not supported" -msgstr "" +msgstr "Niewspierany" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 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:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -929,116 +774,109 @@ msgid "Invalid file URL:" msgstr "Nieprawidłowy adres URL pliku:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" -msgstr "Ustawienia został zmienione, aby pasowały do obecnej dostępności extruderów: [%s]" +msgctxt "@info:message Followed by a list of settings." +msgid "Settings have been changed to match the current availability of extruders:" +msgstr "Ustawienia zostały zmienione w celu dopasowania do bieżącej dostępności ekstruderów:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:926 msgctxt "@info:title" msgid "Settings updated" msgstr "Ustawienia zostały zaaktualizowane" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "Ekstruder(y) wyłączony(/e)" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to export profile to {0}: {1}" msgstr "Nie udało się wyeksportować profilu do {0}: {1}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to export profile to {0}: Writer plugin reported failure." msgstr "Nie można eksportować profilu do {0}: Wtyczka pisarza zgłosiła błąd." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Exported profile to {0}" msgstr "Wyeksportowano profil do {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "Eksport udany" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "Failed to import profile from {0}: {1}" msgstr "Nie powiódł się import profilu z {0}: {1}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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 "Nie można importować profilu z {0} przed dodaniem drukarki." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" msgstr "Brak niestandardowego profilu do importu w pliku {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "Failed to import profile from {0}:" msgstr "Nie powiódł się import profilu z {0}:" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." msgstr "Profil {0} zawiera błędne dane, nie można go importować." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "Drukarka zdefiniowana w profilu {0} ({1}) nie jest zgodna z bieżącą drukarką ({2}), nie można jej importować." - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to import profile from {0}:" -msgstr "Nie powiódł się import profilu z {0}:" +msgstr "Błąd importu profilu z {0}:" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Profil zaimportowany {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "Plik {0} nie zawiera żadnego poprawnego profilu." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "Profil {0} ma nieznany typ pliku lub jest uszkodzony." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "Niestandardowy profil" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Profilowi brakuje typu jakości." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1087,7 +925,7 @@ msgstr "Obwódka" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:84 msgctxt "@tooltip" msgid "Prime Tower" -msgstr "" +msgstr "Wieża czyszcząca" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:85 msgctxt "@tooltip" @@ -1116,7 +954,7 @@ msgctxt "@action:button" msgid "Next" msgstr "Następny" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1124,22 +962,36 @@ msgstr "Grupa #{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/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "Zamknij" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" msgstr "Dodaj" +#: /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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Anuluj" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1156,23 +1008,22 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Wszystkie Pliki (*)" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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 "Nieznany" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" -msgstr "" +msgstr "Poniższa drukarka nie może być podłączona, ponieważ jest częścią grupy" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" -msgstr "" +msgstr "Dostępne drukarki sieciowe" #: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689 msgctxt "@label" @@ -1185,12 +1036,12 @@ msgctxt "@label" msgid "Custom" msgstr "Niestandardowy" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "Wysokość obszaru roboczego została zmniejszona ze względu na wartość ustawienia Print Sequence (Sekwencja wydruku), aby zapobiec kolizji z wydrukowanymi modelami." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "Obszar Roboczy" @@ -1208,46 +1059,51 @@ msgstr "Podjęto próbę przywrócenia kopii zapasowej Cura na podstawie niepopr #: /home/ruben/Projects/Cura/cura/Backups/Backup.py:125 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that is higher than the current version." -msgstr "" +msgstr "Próbowano przywrócić kopię zapasową Cura, nowszą od aktualnej wersji." #: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationHelpers.py:79 msgctxt "@message" msgid "Could not read response." -msgstr "" +msgstr "Nie można odczytać odpowiedzi." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 msgctxt "@info" msgid "Unable to reach the Ultimaker account server." msgstr "Nie można uzyskać dostępu do serwera kont Ultimaker." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:66 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:202 +msgctxt "@action:button" +msgid "Retry" +msgstr "Spróbuj ponownie" + +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:70 msgctxt "@message" msgid "Please give the required permissions when authorizing this application." -msgstr "" +msgstr "Proszę nadać wymagane uprawnienia podczas autoryzacji tej aplikacji." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "Coś nieoczekiwanego się stało, podczas próby logowania, spróbuj ponownie." -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "Zwielokrotnienie i umieszczanie przedmiotów" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "Umieść Obiekty" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Nie można znaleźć lokalizacji w obrębie obszaru roboczego dla wszystkich obiektów" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "Rozmieszczenie Obiektów" @@ -1396,48 +1252,48 @@ msgstr "Logi" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" -msgstr "Opis użytkownika" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" +msgstr "Opis użytkownika (Uwaga: programiści mogą nie mówić w Twoim języku, w miarę możliwości używaj angielskiego)" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "Wyślij raport" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Ładowanie drukarek..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Ustawianie sceny ..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Ładowanie interfejsu ..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "Jednocześnie można załadować tylko jeden plik G-code. Pominięto importowanie {0}" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "Nie można otworzyć żadnego innego pliku, jeśli ładuje się G-code. Pominięto importowanie {0}" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Wybrany model był zbyta mały do załadowania." @@ -1445,103 +1301,108 @@ msgstr "Wybrany model był zbyta mały do załadowania." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58 msgctxt "@title:label" msgid "Printer Settings" -msgstr "" +msgstr "Ustawienia drukarki" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X (Szerokość)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Głębokość)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Wysokość)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "Kształt stołu roboczego" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" -msgstr "" +msgstr "Początek na środku" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" -msgstr "" +msgstr "Podgrzewany stół" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "Grzany obszar roboczy" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "Wersja G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" -msgstr "" +msgstr "Ustawienia głowicy" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "X max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "Y max" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" -msgstr "" +msgstr "Wysokość wózka" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "Liczba ekstruderów" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" -msgstr "" +msgstr "Początkowy G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" -msgstr "" +msgstr "Końcowy G-code" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:42 msgctxt "@title:tab" @@ -1551,7 +1412,7 @@ msgstr "Drukarka" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:63 msgctxt "@title:label" msgid "Nozzle Settings" -msgstr "" +msgstr "Ustawienia dyszy" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:75 msgctxt "@label" @@ -1568,25 +1429,25 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "Korekcja dyszy X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Korekcja dyszy Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "Numer Wentylatora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" -msgstr "" +msgstr "Początkowy G-code ekstrudera" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" -msgstr "" +msgstr "Końcowy G-code ekstrudera" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 msgctxt "@action:button" @@ -1594,7 +1455,7 @@ msgid "Install" msgstr "Instaluj" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "Zainstalowane" @@ -1609,16 +1470,16 @@ msgctxt "@label" msgid "ratings" msgstr "oceny" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "Wtyczki" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "Materiał" @@ -1628,49 +1489,49 @@ msgctxt "@label" msgid "Your rating" msgstr "Twoja ocena" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "Wersja" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "Ostatnia aktualizacja" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "Autor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "Pobrań" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "Zaloguj aby zainstalować lub aktualizować" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" -msgstr "" +msgstr "Kup materiał na szpulach" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "Aktualizuj" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "Aktualizowanie" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1731,17 +1592,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "Zakończ Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "Udział Społeczności" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "Wtyczki Społeczności" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "Materiały Podstawowe" @@ -1802,27 +1663,52 @@ msgctxt "@label" msgid "Featured" msgstr "Polecane" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "Zgodność" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +msgctxt "@label:table_header" +msgid "Machine" +msgstr "Drukarka" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:131 +msgctxt "@label:table_header" +msgid "Print Core" +msgstr "Rdzeń drukujący" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137 +msgctxt "@label:table_header" +msgid "Build Plate" +msgstr "Stół roboczy" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "Podpory" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "Jakość" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "Dane Techniczne" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "Dane Bezpieczeństwa" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "Wskazówki Drukowania" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "Strona Internetowa" @@ -1922,70 +1808,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Aktualizacja oprogramowania nie powiodła się z powodu utraconego oprogramowania." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "Zarządzaj drukarkami" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "Szkło" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." -msgstr "Te opcje nie są dostępne, ponieważ nadzorujesz drukarkę w chmurze." +msgid "Please update your printer's firmware to manage the queue remotely." +msgstr "Zaktualizuj oprogramowanie drukarki, aby zdalnie zarządzać kolejką." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "Kamera nie jest dostępna, ponieważ nadzorujesz drukarkę w chmurze." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "Wczytywanie..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "Niedostępne" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "Nieosiągalna" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "Zajęta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "Bez tytułu" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "Anonimowa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "Wymaga zmian konfiguracji" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "Szczegóły" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "Drukarka niedostępna" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "Pierwsza dostępna" @@ -1995,197 +1887,180 @@ msgctxt "@label" msgid "Queued" msgstr "W kolejce" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" -msgstr "Idź do Cura Connect" +msgid "Manage in browser" +msgstr "Zarządzaj w przeglądarce" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "W kolejce nie ma zadań drukowania. Potnij i wyślij zadanie, aby dodać." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "Zadania druku" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "Łączny czas druku" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "Oczekiwanie na" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "Poważ historię druku" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "Istniejące Połączenie" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "Ta drukarka/grupa jest już dodana do Cura. Proszę wybierz inną drukarkę/grupę." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Połącz się z drukarką sieciową" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" -msgstr "" -"Aby drukować bezpośrednio w drukarce w sieci, upewnij się, że drukarka jest podłączona do sieci przy użyciu kabla sieciowego lub sieci WIFI. Jeśli nie podłączasz Cury do drukarki, możesz nadal używać dysku USB do przesyłania plików g-code do drukarki.\n" -"\n" -"Wybierz drukarkę z poniższej listy:" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." +msgstr "Aby drukować bezpośrednio na drukarce przez sieć, upewnij się, że drukarka jest podłączona do sieci za pomocą kabla sieciowego lub do sieci WIFI. Jeśli nie podłączysz Cury do drukarki, możesz nadal używać napędu USB do przesyłania plików G-Code do drukarki." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "Wybierz swoją drukarkę z poniższej listy:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "Edycja" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "Usunąć" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "Odśwież" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Jeżeli twojej drukarki nie ma na liście, przeczytaj poradnik o problemach z drukowaniem przez sieć" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "Rodzaj" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:274 msgctxt "@label" msgid "Firmware version" msgstr "Wersja oprogramowania" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /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:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 msgctxt "@label" msgid "This printer is not set up to host a group of printers." msgstr "Ta drukarka nie jest skonfigurowana jako host dla grupy drukarek." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 msgctxt "@label" msgid "This printer is the host for a group of %1 printers." msgstr "Ta drukarka jest hostem grupy %1 drukarek." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "Drukarka pod tym adresem jeszcze nie odpowiedziała." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "Połącz" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" -msgstr "" +msgstr "Nieprawidłowy adres IP" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146 msgctxt "@text" msgid "Please enter a valid IP address." -msgstr "" +msgstr "Proszę podać poprawny adres IP." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "Adres drukarki" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." -msgstr "" +msgid "Enter the IP address of your printer on the network." +msgstr "Wprowadź adres IP drukarki." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "Anulowano" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "Zakończono" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "Przygotowyję..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "Przerywanie..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "Zatrzymywanie..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "Wstrzymana" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "Przywracanie..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "Konieczne są działania" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "Zakończone %1 z %2" @@ -2289,73 +2164,65 @@ msgctxt "@action:button" msgid "Override" msgstr "Nadpisz" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" msgstr[0] "Przypisana drukarka, %1, wymaga następującej zmiany konfiguracji:" msgstr[1] "Przypisana drukarka, %1, wymaga następujących zmian konfiguracji:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "Drukarka %1 jest przypisana, ale zadanie zawiera nieznaną konfigurację materiału." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "Zmień materiał %1 z %2 na %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "Załaduj %3 jako materiał %1 (Nie można nadpisać)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." msgstr "Zmień rdzeń drukujący %1 z %2 na %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "Zmień stół na %1 (Nie można nadpisać)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "Nadpisanie spowoduje użycie określonych ustawień w istniejącej konfiguracji drukarki. Może to spowodować niepowodzenie druku." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "Aluminum" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "Podłącz do drukarki" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" -"Upewnij się czy drukarka jest połączona:\n" -"- Sprawdź czy drukarka jest włączona.\n" -"- Sprawdź czy drukarka jest podłączona do sieci." +"Upewnij się, że drukarka ma połączenie:\n" +"- Sprawdź, czy drukarka jest włączona.\n" +"- Sprawdź, czy drukarka jest podłączona do sieci.\n" +"- Sprawdź, czy jesteś zalogowany, aby znaleźć drukarki podłączone do chmury." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 msgctxt "@info" msgid "Please connect your printer to the network." -msgstr "" +msgstr "Podłącz drukarkę do sieci." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:156 msgctxt "@label link to technical assistance" @@ -2477,17 +2344,17 @@ msgstr "Wiećej informacji o zbieraniu anonimowych danych" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:74 msgctxt "@text:window" msgid "Ultimaker Cura collects anonymous data in order to improve the print quality and user experience. Below is an example of all the data that is shared:" -msgstr "" +msgstr "Ultimaker Cura zbiera anonimowe dane w celu poprawy jakości druku i komfortu użytkowania. Poniżej znajduje się przykład wszystkich udostępnianych danych:" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:109 msgctxt "@text:window" msgid "I don't want to send anonymous data" -msgstr "" +msgstr "Nie chcę wysyłać anonimowych danych" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:118 msgctxt "@text:window" msgid "Allow sending anonymous data" -msgstr "" +msgstr "Pozwól na wysyłanie anonimowych danych" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2537,7 +2404,7 @@ msgstr "Głębokość (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 msgctxt "@info:tooltip" msgid "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model." -msgstr "" +msgstr "Dla litofanów ciemne piksele powinny odpowiadać grubszym miejscom, aby zablokować więcej światła. Dla zaznaczenia wysokości map, jaśniejsze piksele oznaczają wyższy teren, więc jaśniejsze piksele powinny odpowiadać wyższym położeniom w wygenerowanym modelu 3D." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 msgctxt "@item:inlistbox" @@ -2662,7 +2529,7 @@ msgid "Printer Group" msgstr "Grupa drukarek" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "Ustawienia profilu" @@ -2675,19 +2542,19 @@ msgstr "Jak powinien zostać rozwiązany problem z profilem?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 msgctxt "@action:label" msgid "Name" msgstr "Nazwa" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 msgctxt "@action:label" msgid "Not in profile" msgstr "Nie w profilu" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2859,18 +2726,24 @@ msgid "Previous" msgstr "Poprzedni" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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 "Eksportuj" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "Końcówka" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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 "Podstawowe" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:160 msgctxt "@label" msgid "Print experiment" msgstr "Próbny wydruk" @@ -2990,155 +2863,155 @@ 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 "Średnica nowego filamentu została ustawiona na %1mm, i nie jest kompatybilna z bieżącym ekstruderem. Czy chcesz kontynuować?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "Wyświetlana nazwa" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "Marka" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "Typ Materiału" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "Kolor" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "Właściwości" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "Gęstość" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "Średnica" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "Koszt Filamentu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "Waga filamentu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "Długość Filamentu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "Koszt na metr" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Ten materiał jest powiązany z %1 i dzieli się niekórymi swoimi właściwościami." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "Odłącz materiał" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "Opis" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "Informacje dotyczące przyczepności" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:19 msgctxt "@label" msgid "Print settings" msgstr "Ustawienia druku" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "Aktywuj" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "Stwórz" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "Duplikuj" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "Importuj" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "Drukarka" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "Potwierdź Usunięcie" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 msgctxt "@label (%1 is object name)" msgid "Are you sure you wish to remove %1? This cannot be undone!" msgstr "Czy na pewno chcesz usunąć %1? Nie można tego cofnąć!" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "Importuj Materiał" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not import material %1: %2" msgstr "Nie można zaimportować materiału %1: %2" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully imported material %1" msgstr "Udało się zaimportować materiał %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "Eksportuj Materiał" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 msgctxt "@info:status Don't translate the XML tags and !" msgid "Failed to export material to %1: %2" msgstr "Nie udało się wyeksportować materiału do %1: %2" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "Udało się wyeksportować materiał do %1" @@ -3179,388 +3052,411 @@ msgid "Unit" msgstr "Jednostka" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "Ogólny" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "Interfejs" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "Język:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "Waluta:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "Motyw:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "Musisz zrestartować aplikację, aby te zmiany zaczęły obowiązywać." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Tnij automatycznie podczas zmiany ustawień." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "Automatyczne Cięcie" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "Zachowanie okna edycji" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Zaznacz nieobsługiwane obszary modelu na czerwono. Bez wsparcia te obszary nie będą drukowane prawidłowo." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "Wyświetl zwis" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 msgctxt "@info:tooltip" msgid "Moves the camera so the model is in the center of the view when a model is selected" msgstr "Przenosi kamerę, aby model był w centrum widoku, gdy wybrano model" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Wyśrodkuj kamerę kiedy przedmiot jest zaznaczony" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "Czy domyślne zachowanie zoomu powinno zostać odwrócone?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Odwróć kierunek zoomu kamery." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "Czy przybliżanie powinno poruszać się w kierunku myszy?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +msgctxt "@info:tooltip" +msgid "Zooming towards the mouse is not supported in the orthographic perspective." +msgstr "Powiększanie w kierunku myszy nie jest obsługiwane w danej perspektywie." + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Przybliżaj w kierunku myszy" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "Czy modele na platformie powinny być przenoszone w taki sposób, aby nie przecinały się?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Upewnij się, że modele są oddzielone" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "Czy modele na platformie powinny być przesunięte w dół, aby dotknęły stołu roboczego?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Automatycznie upuść modele na stół roboczy" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "Pokaż wiadomości ostrzegawcze w czytniku g-code." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "Wiadomość ostrzegawcza w czytniku g-code" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "Czy warstwa powinna być wymuszona w trybie zgodności?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Wymuszenie widoku warstw w trybie zgodności (wymaga ponownego uruchomienia)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +msgctxt "@info:tooltip" +msgid "What type of camera rendering should be used?" +msgstr "Jakiego rodzaju kamery należy użyć do renderowania?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "Renderowanie z kamery: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "Perspektywiczny" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "Rzut ortograficzny" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "Otwieranie i zapisywanie plików" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "Czy modele powinny być skalowane do wielkości obszaru roboczego, jeśli są zbyt duże?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "Skaluj duże modele" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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 "Model może wydawać się bardzo mały, jeśli jego jednostka jest na przykład w metrach, a nie w milimetrach. Czy takie modele powinny być skalowane?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Skaluj bardzo małe modele" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "Czy modele powinny zostać zaznaczone po załadowaniu?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Zaznaczaj modele po załadowaniu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "Czy przedrostek oparty na nazwie drukarki powinien być automatycznie dodawany do nazwy zadania?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Dodaj przedrostek maszyny do nazwy zadania" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Czy podsumowanie powinno być wyświetlane podczas zapisu projektu?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Pokaż okno podsumowania podczas zapisywaniu projektu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Domyślne zachowanie podczas otwierania pliku projektu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Domyślne zachowanie podczas otwierania pliku projektu: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "Zawsze pytaj" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Zawsze otwieraj jako projekt" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "Zawsze importuj modele" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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 "Kiedy dokonasz zmian w profilu i przełączysz się na inny, zostanie wyświetlone okno z pytaniem, czy chcesz zachować twoje zmiany, czy nie. Możesz też wybrać domyślne zachowanie, żeby to okno już nigdy nie było pokazywane." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "Profile" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 msgctxt "@window:text" msgid "Default behavior for changed setting values when switching to a different profile: " msgstr "Domyślne zachowanie dla zmienionych ustawień podczas zmiany profilu na inny: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml:157 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Zawsze pytaj o to" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "Zawsze odrzucaj wprowadzone zmiany" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:discardOrKeep" msgid "Always transfer changed settings to new profile" msgstr "Zawsze przenoś wprowadzone zmiany do nowego profilu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "Prywatność" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "Czy Cura ma sprawdzać dostępność aktualizacji podczas uruchamiania programu?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Sprawdź, dostępność aktualizacji podczas uruchamiania" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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 "Czy anonimowe dane na temat wydruku mają być wysyłane do Ultimaker? Uwaga. Żadne modele, adresy IP, ani żadne inne dane osobiste nie będą wysyłane i/lub przechowywane." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Wyślij (anonimowe) informacje o drukowaniu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "Więcej informacji" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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 "Eksperymentalne" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:715 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:781 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Użyj funkcji wielu pól roboczych" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:786 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Użyj funkcji wielu pól roboczych (wymagany restart)" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "Drukarki" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "Zmień nazwę" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /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:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "Stwórz" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "Duplikuj" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "Stwórz profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 msgctxt "@info" msgid "Please provide a name for this profile." msgstr "Podaj nazwę tego profilu." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplikuj profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "Zmień nazwę profilu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "Importuj Profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "Eksportuj Profil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Drukarka: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420 msgctxt "@label" msgid "Default profiles" msgstr "Domyślne profile" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420 msgctxt "@label" msgid "Custom profiles" msgstr "Profile niestandardowe" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Aktualizuj profil z bieżącymi ustawieniami" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "Odrzuć bieżące zmiany" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "Ten profil używa ustawień domyślnych określonych przez drukarkę, dlatego nie ma żadnych ustawień z poniższej liście." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Aktualne ustawienia odpowiadają wybranemu profilowi." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "Ustawienia ogólne" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "Marketplace" @@ -3623,33 +3519,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "ustawienia wyszukiwania" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Skopiuj wartość do wszystkich ekstruderów" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Skopiuj wszystkie zmienione wartości do wszystkich ekstruderów" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Ukryj tę opcję" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Nie pokazuj tej opcji" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Pozostaw tę opcję widoczną" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Skonfiguruj widoczność ustawień ..." @@ -3665,32 +3561,32 @@ msgstr "" "\n" "Kliknij, aby te ustawienia były widoczne." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." -msgstr "" +msgstr "To ustawienie nie jest używane, ponieważ wszystkie ustawienia, na które wpływa, są nadpisane." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "Wpływać" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Pod wpływem" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "To ustawienie jest dzielone pomiędzy wszystkimi ekstruderami. Zmiana tutaj spowoduje zmianę dla wszystkich ekstruderów." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "Wartość jest pobierana z osobna dla każdego ekstrudera " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3701,7 +3597,7 @@ msgstr "" "\n" "Kliknij, aby przywrócić wartość z profilu." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3717,7 +3613,7 @@ msgctxt "@button" msgid "Recommended" msgstr "Polecane" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "Niestandardowe" @@ -3742,12 +3638,12 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Generuje podpory wspierające części modelu, które mają zwis. Bez tych podpór takie części mogłyby spaść podczas drukowania." -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "Przyczepność" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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 "Włącz drukowanie obrysu lub tratwy. Spowoduje to dodanie płaskiej powierzchni wokół lub pod Twoim obiektem, która jest łatwa do usunięcia po wydruku." @@ -3765,7 +3661,7 @@ msgstr "Zmodyfikowałeś ustawienia profilu. Jeżeli chcesz je zmienić, przejd #: /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 "" +msgstr "Ten profil jakości nie jest dostępny dla bieżącej konfiguracji materiałów i dysz. Zmień ją, aby włączyć ten profil jakości." #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449 msgctxt "@tooltip" @@ -3801,7 +3697,7 @@ 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." -msgstr "" +msgstr "Ustawienia druku niedostępne. Plik .gcode nie może być modyfikowany." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:52 msgctxt "@label" @@ -3833,59 +3729,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "Wyślij G-code" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "Wyślij niestandardową komendę G-code do podłączonej drukarki. Naciśnij 'enter', aby wysłać komendę." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "Ekstruder" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "Docelowa temperatura głowicy. Głowica będzie się rozgrzewać lub chłodzić do tej temperatury. Jeżeli jest równe 0, grzanie głowicy będzie wyłączone." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "Aktualna temperatura tej głowicy." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "Temperatura do wstępnego podgrzewania głowicy." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "Anuluj" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "Podgrzewanie wstępne" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "Podgrzej głowicę przed drukowaniem. Możesz w dalszym ciągu dostosowywać drukowanie podczas podgrzewania i nie będziesz musiał czekać na podgrzanie głowicy kiedy będziesz gotowy." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "Kolor materiału w tym ekstruderze." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "Materiał w głowicy drukującej." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "Dysza włożona do tego ekstrudera." @@ -3930,11 +3826,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "Ulubione" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -msgctxt "@label:category menu label" -msgid "Generic" -msgstr "Podstawowe" - #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3950,32 +3841,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Drukarka" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "&Materiał" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Ustaw jako aktywną głowicę" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Włącz Ekstruder" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Wyłącz Ekstruder" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:63 msgctxt "@title:menu" msgid "&Build plate" msgstr "&Pole robocze" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" @@ -3985,7 +3876,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "&Pozycja kamery" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "Widok z kamery" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "Perspektywiczny" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "Rzut ortograficzny" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "P&ole robocze" @@ -4005,17 +3911,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Ustaw Widoczność Ustawień..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "&Zapisz..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "&Eksportuj..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "Eksportuj Zaznaczenie..." @@ -4104,22 +4010,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "Otwórz &ostatnio używane" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "Aktywny wydruk" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "Nazwa pracy" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "Czas druku" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "Szacowany czas pozostały" @@ -4127,17 +4033,22 @@ msgstr "Szacowany czas pozostały" #: /home/ruben/Projects/Cura/resources/qml/ViewsSelector.qml:50 msgctxt "@label" msgid "View type" -msgstr "" +msgstr "Typ widoku" + +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "Lista obiektów" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" -msgstr "" +msgstr "Cześć %1" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:33 msgctxt "@button" msgid "Ultimaker account" -msgstr "konto Ultimaker" +msgstr "Konto Ultimaker" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:42 msgctxt "@button" @@ -4161,6 +4072,9 @@ msgid "" "- Store your Ultimaker Cura settings in the cloud for use anywhere\n" "- Get exclusive access to print profiles from leading brands" msgstr "" +"- Wysyłaj zadania druku do drukarek Ultimaker poza siecią lokalną\n" +"- Przechowuj ustawienia Ultimaker Cura w chmurze, aby używać w każdym miejscu\n" +"- Uzyskaj wyłączny dostęp do profili materiałów wiodących marek" #: /home/ruben/Projects/Cura/resources/qml/Account/GeneralOperations.qml:78 msgctxt "@button" @@ -4177,32 +4091,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "Szacunkowy koszt niedostępny" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "Podgląd" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Cięcie..." -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" -msgstr "" +msgstr "Nie można pociąć" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "Przetwarzanie" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "Potnij" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "Rozpocznij proces cięcia" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "Anuluj" @@ -4210,12 +4129,12 @@ msgstr "Anuluj" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:31 msgctxt "@label" msgid "Time estimation" -msgstr "" +msgstr "Szacunkowy czas" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:114 msgctxt "@label" msgid "Material estimation" -msgstr "" +msgstr "Szacunkowy materiał" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:164 msgctxt "@label m for meter" @@ -4237,233 +4156,238 @@ msgctxt "@label" msgid "Preset printers" msgstr "Zdefiniowane drukarki" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "Dodaj drukarkę" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "Zarządzaj drukarkami" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "Pokaż przewodnik rozwiązywania problemów online" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "Przełącz tryb pełnoekranowy" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "Wyłącz tryb pełnoekranowy" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&Cofnij" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Ponów" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Zamknij" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "Widok 3D" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "Widok z przodu" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "Widok z góry" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "Widok z lewej strony" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "Widok z prawej strony" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Konfiguruj Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Dodaj drukarkę..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Zarządzaj drukarkami..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Zarządzaj materiałami..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Aktualizuj profil z bieżącymi ustawieniami" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Odrzuć bieżące zmiany" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&Utwórz profil z bieżących ustawień..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Zarządzaj profilami..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Pokaż dokumentację internetową" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Zgłoś błąd" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" -msgstr "" +msgstr "Co nowego" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "O..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "Usuń wybrany model" msgstr[1] "Usuń wybrane modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Wyśrodkuj wybrany model" msgstr[1] "Wyśrodkuj wybrane modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Rozmnóż wybrany model" msgstr[1] "Rozmnóż wybrane modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Usuń model" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Wyśrodkuj model na platformie" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Grupuj modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Rozgrupuj modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Połącz modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Powiel model..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Wybierz wszystkie modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Wyczyść stół" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Przeładuj wszystkie modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Rozłóż Wszystkie Modele na Wszystkie Platformy Robocze" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Ułóż wszystkie modele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Wybór ułożenia" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Zresetuj wszystkie pozycje modelu" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Zresetuj wszystkie przekształcenia modelu" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Otwórz plik(i)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Nowy projekt..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Pokaż folder konfiguracji" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "&Marketplace" @@ -4478,52 +4402,52 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Ten pakiet zostanie zainstalowany po ponownym uruchomieniu." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "Ustawienia" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "Zamykanie Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 msgctxt "@label" msgid "Are you sure you want to exit Cura?" msgstr "Czy jesteś pewien, że chcesz zakończyć Cura?" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:19 msgctxt "@title:window" msgid "Open file(s)" msgstr "Otwórz plik(i)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "Instaluj pakiety" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "Otwórz plik(i)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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 "Znaleziono jeden lub więcej plików G-code w wybranych plikach. Możesz otwierać tylko jeden plik G-code jednocześnie. Jeśli chcesz otworzyć plik G-code, proszę wybierz tylko jeden." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "Dodaj drukarkę" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" -msgstr "" +msgstr "Co nowego" #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 msgctxt "@label %1 is filled in with the name of an extruder" @@ -4745,32 +4669,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Zapisz projekt" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:149 msgctxt "@action:label" msgid "Build plate" msgstr "Pole robocze" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "Ekstruder %1" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & materiał" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" -msgstr "" +msgstr "Materiał" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Nie pokazuj podsumowania projektu podczas ponownego zapisywania" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "Zapisz" @@ -4803,158 +4727,158 @@ msgstr "Importuj modele" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DropDownWidget.qml:93 msgctxt "@label" msgid "Empty" -msgstr "" +msgstr "Pusty" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:24 msgctxt "@label" msgid "Add a printer" -msgstr "" +msgstr "Dodaj drukarkę" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:39 msgctxt "@label" msgid "Add a networked printer" -msgstr "" +msgstr "Dodaj drukarkę sieciową" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:81 msgctxt "@label" msgid "Add a non-networked printer" -msgstr "" +msgstr "Dodaj drukarkę niesieciową" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:70 msgctxt "@label" msgid "Add printer by IP address" -msgstr "" +msgstr "Dodaj drukarkę przez IP" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:133 msgctxt "@text" msgid "Place enter your printer's IP address." -msgstr "" +msgstr "Wprowadź adres IP drukarki." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:158 msgctxt "@button" msgid "Add" -msgstr "" +msgstr "Dodaj" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:204 msgctxt "@label" msgid "Could not connect to device." -msgstr "" +msgstr "Nie można połączyć się z urządzeniem." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:208 msgctxt "@label" msgid "The printer at this address has not responded yet." -msgstr "" +msgstr "Drukarka pod tym adresem jeszcze nie odpowiedziała." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:240 msgctxt "@label" msgid "This printer cannot be added because it's an unknown printer or it's not the host of a group." -msgstr "" +msgstr "Ta drukarka nie może zostać dodana, ponieważ jest nieznana lub nie jest hostem grupy." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:329 msgctxt "@button" msgid "Back" -msgstr "" +msgstr "Wstecz" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:342 msgctxt "@button" msgid "Connect" -msgstr "" +msgstr "Połącz" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/FirstStartMachineActionsContent.qml:77 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:123 msgctxt "@button" msgid "Next" -msgstr "" +msgstr "Dalej" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:23 msgctxt "@label" msgid "User Agreement" -msgstr "" +msgstr "Umowa z użytkownikiem" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:56 msgctxt "@button" msgid "Agree" -msgstr "" +msgstr "Zgadzam się" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:70 msgctxt "@button" msgid "Decline and close" -msgstr "" +msgstr "Odrzuć i zamknij" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:24 msgctxt "@label" msgid "Help us to improve Ultimaker Cura" -msgstr "" +msgstr "Pomóż nam ulepszyć Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:57 msgctxt "@text" msgid "Ultimaker Cura collects anonymous data to improve print quality and user experience, including:" -msgstr "" +msgstr "Ultimaker Cura zbiera anonimowe dane w celu poprawy jakości druku i komfortu użytkownika, w tym:" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:71 msgctxt "@text" msgid "Machine types" -msgstr "" +msgstr "Typy maszyn" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:77 msgctxt "@text" msgid "Material usage" -msgstr "" +msgstr "Zużycie materiału" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:83 msgctxt "@text" msgid "Number of slices" -msgstr "" +msgstr "Ilość warstw" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:89 msgctxt "@text" msgid "Print settings" -msgstr "" +msgstr "Ustawienia druku" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:102 msgctxt "@text" msgid "Data collected by Ultimaker Cura will not contain any personal information." -msgstr "" +msgstr "Dane zebrane przez Ultimaker Cura nie będą zawierać żadnych prywatnych danych osobowych." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:103 msgctxt "@text" msgid "More information" -msgstr "" +msgstr "Więcej informacji" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WhatsNewContent.qml:24 msgctxt "@label" msgid "What's new in Ultimaker Cura" -msgstr "" +msgstr "Co nowego w Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:42 msgctxt "@label" msgid "There is no printer found over your network." -msgstr "" +msgstr "Nie znaleziono drukarki w Twojej sieci." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:179 msgctxt "@label" msgid "Refresh" -msgstr "" +msgstr "Odśwież" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:190 msgctxt "@label" msgid "Add printer by IP" -msgstr "" +msgstr "Dodaj drukarkę przez IP" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:223 msgctxt "@label" msgid "Troubleshooting" -msgstr "" +msgstr "Rozwiązywanie problemów" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" -msgstr "" +msgstr "Nazwa drukarki" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" -msgstr "" +msgstr "Podaj nazwę drukarki" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:36 msgctxt "@label" @@ -4964,37 +4888,37 @@ msgstr "Chmura Ultimaker" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:77 msgctxt "@text" msgid "The next generation 3D printing workflow" -msgstr "" +msgstr "Nowa generacja systemu drukowania 3D" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:94 msgctxt "@text" msgid "- Send print jobs to Ultimaker printers outside your local network" -msgstr "" +msgstr "- Wysyłaj zadania druku do drukarek Ultimaker poza siecią lokalną" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:97 msgctxt "@text" msgid "- Store your Ultimaker Cura settings in the cloud for use anywhere" -msgstr "" +msgstr "- Przechowuj ustawienia Ultimaker Cura w chmurze, aby używać w każdym miejscu" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:100 msgctxt "@text" msgid "- Get exclusive access to print profiles from leading brands" -msgstr "" +msgstr "- Uzyskaj wyłączny dostęp do profili materiałów wiodących marek" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:119 msgctxt "@button" msgid "Finish" -msgstr "" +msgstr "Koniec" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:128 msgctxt "@button" msgid "Create an account" -msgstr "" +msgstr "Stwórz konto" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:29 msgctxt "@label" msgid "Welcome to Ultimaker Cura" -msgstr "" +msgstr "Witaj w Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:47 msgctxt "@text" @@ -5002,26 +4926,13 @@ msgid "" "Please follow these steps to set up\n" "Ultimaker Cura. This will only take a few moments." msgstr "" +"Wykonaj poniższe kroki, aby skonfigurować\n" +"Ultimaker Cura. To zajmie tylko kilka chwil." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:58 msgctxt "@button" msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "Pokaż tylko aktualną platformę roboczą" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "Rozłóż na wszystkich platformach roboczych" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "Rozłóż na obecnej platformie roboczej" +msgstr "Rozpocznij" #: MachineSettingsAction/plugin.json msgctxt "description" @@ -5096,22 +5007,32 @@ msgstr "Tryb Boga" #: FirmwareUpdater/plugin.json msgctxt "description" msgid "Provides a machine actions for updating firmware." -msgstr "" +msgstr "Dostarcza działanie, pozwalające na aktualizację oprogramowania sprzętowego." #: FirmwareUpdater/plugin.json msgctxt "name" msgid "Firmware Updater" -msgstr "" +msgstr "Aktualizacja oprogramowania sprzętowego" #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattened quality changes profile." -msgstr "" +msgstr "Stwórz spłaszczony profil zmian jakości." #: ProfileFlattener/plugin.json msgctxt "name" msgid "Profile Flattener" -msgstr "" +msgstr "Spłaszcz profil" + +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "Zapewnia wsparcie dla czytania plików AMF." + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "Czytnik AMF" #: USBPrinting/plugin.json msgctxt "description" @@ -5123,16 +5044,6 @@ msgctxt "name" msgid "USB printing" msgstr "Drukowanie USB" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "Umożliwia zapisanie wyników cięcia jako plik X3G, aby wspierać drukarki obsługujące ten format (Malyan, Makerbot oraz inne oparte o oprogramowanie Sailfish)." - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "Zapisywacz X3G" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5171,27 +5082,17 @@ msgstr "Zapewnia wsparcie dla podłączania i zapisywania dysków zewnętrznych. #: RemovableDriveOutputDevice/plugin.json msgctxt "name" msgid "Removable Drive Output Device Plugin" -msgstr "Wtyczka Urządzenia Wyjścia Dysku Zewn." +msgstr "Wtyczka Urządzenia Wyjścia Dysku Zewnętrznego" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Zarządza ustawieniami połączenia sieciowego z drukarkami Ultimaker 3." +msgid "Manages network connections to Ultimaker networked printers." +msgstr "Zarządza połączeniami z sieciowymi drukarkami Ultimaker." #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "Połączenie Sieciowe UM3" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" -msgstr "" +msgid "Ultimaker Network Connection" +msgstr "Połączenie sieciowe Ultimaker" #: MonitorStage/plugin.json msgctxt "description" @@ -5256,12 +5157,12 @@ msgstr "Usuwacz Podpór" #: UFPReader/plugin.json msgctxt "description" msgid "Provides support for reading Ultimaker Format Packages." -msgstr "" +msgstr "Zapewnia obsługę odczytu pakietów formatu Ultimaker." #: UFPReader/plugin.json msgctxt "name" msgid "UFP Reader" -msgstr "" +msgstr "Czytnik UFP" #: SliceInfoPlugin/plugin.json msgctxt "description" @@ -5346,12 +5247,12 @@ msgstr "Ulepszenie Wersji 2.7 do 3.0" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.5 to Cura 4.0." -msgstr "" +msgstr "Uaktualnia konfiguracje z Cura 3.5 to Cura 4.0." #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "name" msgid "Version Upgrade 3.5 to 4.0" -msgstr "" +msgstr "Uaktualnij wersję 3.5 do 4.0" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" @@ -5366,12 +5267,12 @@ msgstr "Ulepszenie Wersji z 3.4 do 3.5" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 4.0 to Cura 4.1." -msgstr "" +msgstr "Uaktualnia konfiguracje z Cura 4.0 to Cura 4.1." #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "name" msgid "Version Upgrade 4.0 to 4.1" -msgstr "" +msgstr "Uaktualnij wersję 4.0 do 4.1" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" @@ -5383,6 +5284,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "Ulepszenie Wersji 3.0 do 3.1" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "Uaktualnia konfiguracje z Cura 4.1 to Cura 4.2." + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "Uaktualnij wersję 4.1 do 4.2" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5413,6 +5324,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "Ulepszenie Wersji z 2.2 do 2.4" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "Uaktualnia konfiguracje z Cura 4.2 to Cura 4.3." + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "Uaktualnij wersję 4.2 do 4.3" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5423,6 +5344,16 @@ msgctxt "name" msgid "Image Reader" msgstr "Czytnik Obrazu" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "Zapewnia wsparcie dla czytania plików modeli." + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "Czytnik siatki trójkątów" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5453,16 +5384,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "Czytnik 3MF" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5486,12 +5407,12 @@ msgstr "Czytnik G-code" #: CuraDrive/plugin.json msgctxt "description" msgid "Backup and restore your configuration." -msgstr "" +msgstr "Utwórz kopię zapasową i przywróć konfigurację." #: CuraDrive/plugin.json msgctxt "name" msgid "Cura Backups" -msgstr "" +msgstr "Kopie zapasowe Cura" #: CuraProfileWriter/plugin.json msgctxt "description" @@ -5526,12 +5447,12 @@ msgstr "3MF Writer" #: PreviewStage/plugin.json msgctxt "description" msgid "Provides a preview stage in Cura." -msgstr "" +msgstr "Dostarcza podgląd w Cura." #: PreviewStage/plugin.json msgctxt "name" msgid "Preview Stage" -msgstr "" +msgstr "Podgląd" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -5553,6 +5474,290 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Czytnik Profili Cura" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "Połączono przez sieć." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "Połączono przez sieć. Proszę zatwierdzić żądanie dostępu na drukarce." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "Połączono przez sieć. Brak dostępu do sterowania drukarką." + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "Wymagany dostęp do drukarki. Proszę zatwierdzić prośbę na drukarce" + +#~ msgctxt "@info:title" +#~ msgid "Authentication status" +#~ msgstr "Status uwierzytelniania" + +#~ msgctxt "@info:title" +#~ msgid "Authentication Status" +#~ msgstr "Status Uwierzytelniania" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "Prześlij ponownie żądanie dostępu" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "Dostęp do drukarki został zaakceptowany" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "Brak dostępu do tej drukarki. Nie można wysłać zadania drukowania." + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "Poproś o dostęp" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "Wyślij żądanie dostępu do drukarki" + +#~ msgctxt "@label" +#~ msgid "Unable to start a new print job." +#~ msgstr "Nie można uruchomić nowego zadania drukowania." + +#~ msgctxt "@label" +#~ msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." +#~ msgstr "Wystąpił problem z konfiguracją twojego Ultimaker'a, przez który nie można rozpocząć wydruku. Proszę rozwiąż te problemy przed kontynuowaniem." + +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "Niedopasowana konfiguracja" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "Czy na pewno chcesz drukować z wybraną konfiguracją?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Występuje niezgodność między konfiguracją lub kalibracją drukarki a Curą. Aby uzyskać najlepszy rezultat, zawsze tnij dla Print core'ów i materiałów włożonych do drukarki." + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "Wysyłanie nowych zadań (tymczasowo) zostało zablokowane, dalej wysyłane jest poprzednie zadanie." + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "Wysyłanie danych do drukarki" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "Wysyłanie danych" + +#~ msgctxt "@info:status" +#~ msgid "No Printcore loaded in slot {slot_number}" +#~ msgstr "Brak Printcore'a w slocie {slot_number}" + +#~ msgctxt "@info:status" +#~ msgid "No material loaded in slot {slot_number}" +#~ msgstr "Brak załadowanego materiału w slocie {slot_number}" + +#~ msgctxt "@label" +#~ msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" +#~ msgstr "Inny PrintCore (Cura: {cura_printcore_name}, Drukarka: {remote_printcore_name}) wybrany dla extrudera {extruder_id}" + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "Różne materiały (Cura: {0}, Drukarka: {1}) wybrane do dzyszy {2}" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "Synchronizuj się z drukarką" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "Czy chcesz używać bieżącej konfiguracji drukarki w programie Cura?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "PrintCore'y i/lub materiały w drukarce różnią się od tych w obecnym projekcie. Dla najlepszego rezultatu, zawsze tnij dla wybranych PrinCore'ów i materiałów, które są umieszczone w drukarce." + +#~ msgctxt "@action:button" +#~ msgid "View in Monitor" +#~ msgstr "Zobacz w Monitorze" + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "{printer_name} skończyła drukowanie '{job_name}'." + +#~ msgctxt "@info:status" +#~ msgid "The print job '{job_name}' was finished." +#~ msgstr "Zadanie '{job_name}' zostało zakończone." + +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "Drukowanie zakończone" + +#~ msgctxt "@label:material" +#~ msgid "Empty" +#~ msgstr "Pusty" + +#~ msgctxt "@label:material" +#~ msgid "Unknown" +#~ msgstr "Nieznany" + +#~ msgctxt "@info:title" +#~ msgid "Cloud error" +#~ msgstr "Błąd Chmury" + +#~ msgctxt "@info:status" +#~ msgid "Could not export print job." +#~ msgstr "Nie można eksportować zadania druku." + +#~ msgctxt "@info:description" +#~ msgid "There was an error connecting to the cloud." +#~ msgstr "Wystąpił błąd połączenia z chmurą." + +#~ msgctxt "@info:status" +#~ msgid "Uploading via Ultimaker Cloud" +#~ msgstr "Przesyłanie z Ultimaker Cloud" + +#~ msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." +#~ msgid "Connect to Ultimaker Cloud" +#~ msgstr "Połącz z Ultimaker Cloud" + +#~ msgctxt "@action" +#~ msgid "Don't ask me again for this printer." +#~ msgstr "Nie pytaj więcej dla tej drukarki." + +#~ msgctxt "@info:status" +#~ msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." +#~ msgstr "Możesz teraz wysłać i nadzorować zadania druku z każdego miejsca, używając konta Ultimaker." + +#~ msgctxt "@info:status" +#~ msgid "Connected!" +#~ msgstr "Połączono!" + +#~ msgctxt "@action" +#~ msgid "Review your connection" +#~ msgstr "Odnów połączenie" + +#~ msgctxt "@info:status Don't translate the XML tags !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "Drukarka zdefiniowana w profilu {0} ({1}) nie jest zgodna z bieżącą drukarką ({2}), nie można jej importować." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "Failed to import profile from {0}:" +#~ msgstr "Nie powiódł się import profilu z {0}:" + +#~ msgctxt "@window:title" +#~ msgid "Existing Connection" +#~ msgstr "Istniejące Połączenie" + +#~ msgctxt "@message:text" +#~ msgid "This printer/group is already added to Cura. Please select another printer/group." +#~ msgstr "Ta drukarka/grupa jest już dodana do Cura. Proszę wybierz inną drukarkę/grupę." + +#~ msgctxt "@label" +#~ msgid "Enter the IP address or hostname of your printer on the network." +#~ msgstr "Podaj adres IP lub nazwę hosta drukarki w sieci." + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "Podłącz do drukarki" + +#~ msgctxt "@title" +#~ msgid "Cura Settings Guide" +#~ msgstr "Przewodnik po ustawieniach Cura" + +#~ msgctxt "description" +#~ msgid "Manages network connections to Ultimaker 3 printers." +#~ msgstr "Zarządza ustawieniami połączenia sieciowego z drukarkami Ultimaker 3." + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "Połączenie Sieciowe UM3" + +#~ msgctxt "description" +#~ msgid "Provides extra information and explanations about settings in Cura, with images and animations." +#~ msgstr "Zawiera dodatkowe informacje i objaśnienia dotyczące ustawień w Cura, z obrazami i animacjami." + +#~ msgctxt "name" +#~ msgid "Settings Guide" +#~ msgstr "Przewodnik po ustawieniach" + +#~ msgctxt "@item:inmenu" +#~ msgid "Cura Settings Guide" +#~ msgstr "Przewodnik po ustawieniach Cura" + +#~ msgctxt "@info:generic" +#~ msgid "Settings have been changed to match the current availability of extruders: [%s]" +#~ msgstr "Ustawienia został zmienione, aby pasowały do obecnej dostępności extruderów: [%s]" + +#~ msgctxt "@title:groupbox" +#~ msgid "User description" +#~ msgstr "Opis użytkownika" + +#~ msgctxt "@info" +#~ msgid "These options are not available because you are monitoring a cloud printer." +#~ msgstr "Te opcje nie są dostępne, ponieważ nadzorujesz drukarkę w chmurze." + +#~ msgctxt "@label link to connect manager" +#~ msgid "Go to Cura Connect" +#~ msgstr "Idź do Cura Connect" + +#~ msgctxt "@info" +#~ msgid "All jobs are printed." +#~ msgstr "Wszystkie zadania są drukowane." + +#~ msgctxt "@label link to connect manager" +#~ msgid "View print history" +#~ msgstr "Poważ historię druku" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "Aby drukować bezpośrednio w drukarce w sieci, upewnij się, że drukarka jest podłączona do sieci przy użyciu kabla sieciowego lub sieci WIFI. Jeśli nie podłączasz Cury do drukarki, możesz nadal używać dysku USB do przesyłania plików g-code do drukarki.\n" +#~ "\n" +#~ "Wybierz drukarkę z poniższej listy:" + +#~ msgctxt "@info" +#~ msgid "" +#~ "Please make sure your printer has a connection:\n" +#~ "- Check if the printer is turned on.\n" +#~ "- Check if the printer is connected to the network." +#~ msgstr "" +#~ "Upewnij się czy drukarka jest połączona:\n" +#~ "- Sprawdź czy drukarka jest włączona.\n" +#~ "- Sprawdź czy drukarka jest podłączona do sieci." + +#~ msgctxt "@option:check" +#~ msgid "See only current build plate" +#~ msgstr "Pokaż tylko aktualną platformę roboczą" + +#~ msgctxt "@action:button" +#~ msgid "Arrange to all build plates" +#~ msgstr "Rozłóż na wszystkich platformach roboczych" + +#~ msgctxt "@action:button" +#~ msgid "Arrange current build plate" +#~ msgstr "Rozłóż na obecnej platformie roboczej" + +#~ msgctxt "description" +#~ msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." +#~ msgstr "Umożliwia zapisanie wyników cięcia jako plik X3G, aby wspierać drukarki obsługujące ten format (Malyan, Makerbot oraz inne oparte o oprogramowanie Sailfish)." + +#~ msgctxt "name" +#~ msgid "X3GWriter" +#~ msgstr "Zapisywacz X3G" + +#~ msgctxt "description" +#~ msgid "Reads SVG files as toolpaths, for debugging printer movements." +#~ msgstr "Czyta pliki SVG jako ścieżki, do debugowania ruchów drukarki." + +#~ msgctxt "name" +#~ msgid "SVG Toolpath Reader" +#~ msgstr "Czytnik ścieżek SVG" + #~ msgctxt "@item:inmenu" #~ msgid "Changelog" #~ msgstr "Lista zmian" diff --git a/resources/i18n/pl_PL/fdmextruder.def.json.po b/resources/i18n/pl_PL/fdmextruder.def.json.po index e121281cad..850a014a1a 100644 --- a/resources/i18n/pl_PL/fdmextruder.def.json.po +++ b/resources/i18n/pl_PL/fdmextruder.def.json.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" "PO-Revision-Date: 2019-03-13 14:00+0200\n" "Last-Translator: Mariusz 'Virgin71' Matłosz \n" "Language-Team: reprapy.pl\n" diff --git a/resources/i18n/pl_PL/fdmprinter.def.json.po b/resources/i18n/pl_PL/fdmprinter.def.json.po index 66c5ec568d..aefdf33ce2 100644 --- a/resources/i18n/pl_PL/fdmprinter.def.json.po +++ b/resources/i18n/pl_PL/fdmprinter.def.json.po @@ -5,17 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" -"PO-Revision-Date: 2019-03-14 14:44+0100\n" -"Last-Translator: Mariusz 'Virgin71' Matłosz \n" -"Language-Team: reprapy.pl\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" +"PO-Revision-Date: 2019-09-30 15:45+0200\n" +"Last-Translator: Mariusz Matłosz \n" +"Language-Team: Mariusz Matłosz , reprapy.pl\n" "Language: pl_PL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.1.1\n" +"X-Generator: Poedit 2.2.1\n" #: fdmprinter.def.json msgctxt "machine_settings label" @@ -45,7 +45,7 @@ msgstr "Pokaż Warianty Maszyny" #: fdmprinter.def.json msgctxt "machine_show_variants description" msgid "Whether to show the different variants of this machine, which are described in separate json files." -msgstr "Czy wyświetlać różna warianty drukarki, które są opisane w oddzielnych plikach JSON?" +msgstr "Określa czy wyświetlać różne warianty drukarki, które są opisane w oddzielnych plikach JSON." #: fdmprinter.def.json msgctxt "machine_start_gcode label" @@ -213,7 +213,17 @@ msgstr "Posiada Podgrzewany Stół" #: fdmprinter.def.json msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." -msgstr "Czy maszyna ma podgrzewany stół?" +msgstr "Określa czy maszyna posiada podgrzewany stół." + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "Posiada komorę stabilizacji temperatury" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "Określa czy drukarka posiada zamkniętą komorę stabilizującą temperaturę." #: fdmprinter.def.json msgctxt "machine_center_is_zero label" @@ -238,7 +248,7 @@ msgstr "Liczba zespołów esktruderów. Zespół ekstrudera to kombinacja podajn #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders That Are Enabled" -msgstr "" +msgstr "Liczba Ekstruderów, które są dostępne" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -248,7 +258,7 @@ msgstr "Liczba zespołów ekstruderów, które są dostępne; automatycznie usta #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer Nozzle Diameter" -msgstr "" +msgstr "Zew. średnica dyszy" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter description" @@ -258,7 +268,7 @@ msgstr "Zewnętrzna średnica końcówki dyszy." #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle Length" -msgstr "" +msgstr "Długość dyszy" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance description" @@ -268,7 +278,7 @@ msgstr "Różnica w wysokości pomiędzy końcówką dyszy a najniższą częśc #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle Angle" -msgstr "" +msgstr "Kąt dyszy" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle description" @@ -278,7 +288,7 @@ msgstr "Kąt pomiędzy poziomą powierzchnią a częścią stożkową bezpośred #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat Zone Length" -msgstr "" +msgstr "Długość strefy cieplnej" #: fdmprinter.def.json msgctxt "machine_heat_zone_length description" @@ -308,7 +318,7 @@ msgstr "Czy kontrolować temperaturę przez Cura? Wyłącz tę funkcję, aby kon #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat Up Speed" -msgstr "" +msgstr "Prędkość nagrzewania" #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed description" @@ -318,7 +328,7 @@ msgstr "Szybkość (° C/s.), z którą dysza ogrzewa się - średnia z normlane #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool Down Speed" -msgstr "" +msgstr "Prędkość chłodzenia" #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed description" @@ -337,8 +347,8 @@ msgstr "Minimalny czas, w jakim ekstruder musi być nieużywany, aby schłodzić #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" -msgstr "" +msgid "G-code Flavor" +msgstr "Smak G-code" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" @@ -403,7 +413,7 @@ msgstr "Używaj komend retrakcji (G10/G11) zamiast używać współrzędną E w #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed Areas" -msgstr "" +msgstr "Niedozwolone obszary" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" @@ -423,7 +433,7 @@ msgstr "Lista obszarów, w które dysze nie mogą wjeżdżać." #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine Head Polygon" -msgstr "" +msgstr "Obszar głowicy drukarki" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -433,7 +443,7 @@ msgstr "Sylwetka 2D głowicy drukującej (bez nasadki wentylatora)." #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine Head & Fan Polygon" -msgstr "" +msgstr "Obszar głowicy i wentylatora drukarki" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -443,7 +453,7 @@ msgstr "Sylwetka 2D głowicy drukującej (z nasadką wentylatora)." #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry Height" -msgstr "" +msgstr "Wysokość wózka" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -473,7 +483,7 @@ msgstr "Wewnętrzna średnica dyszy. Użyj tego ustawienia, jeśli używasz dysz #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset with Extruder" -msgstr "" +msgstr "Przesunięcie ekstrudera" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -1270,6 +1280,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "Najostrzejszy róg" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "Pozycja szwu osi Z" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "Najbliższa pozycja startu druku każdej warstwy." + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "Lewy tył" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "Tył" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "Prawy tył" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "Prawa" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "Prawy przód" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "Przód" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "Lewy przód" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "Lewa" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1297,8 +1357,8 @@ msgstr "Wybór Rogu Szwu" #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "Kontroluje, czy rogi na zewn. linii modelu wpływają na pozycję szwu. Brak oznacza, że rogi nie mają wpływu na pozycję szwu. Ukryj Szew powoduje, że szew będzie się bardziej pojawiał na wewn. rogach. Pokaż Szew powoduje, że szew będzie się bardziej pojawiał na zewn. rogach. Ukryj lub Pokaż Szew powoduje, że szew będzie się bardziej pojawiał na wewn. lub zewn. rogach." +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "Kontroluj, czy narożniki obrysu wpływają na położenie szwu. Brak oznacza, że rogi nie mają wpływu na tę pozycję. Ukryj szew zwiększa prawdopodobieństwo pojawienia się szwu w wewnętrznym rogu. Ujawnij szew zwiększa prawdopodobieństwo pojawienia się szwu w narożniku zewnętrznym. Ukryj lub odsłoń szew zwiększa prawdopodobieństwo, że szew pojawi się w rogu wewnętrznym lub zewnętrznym. Inteligentne ukrywanie odsłania zarówno narożniki wewnętrzne, jak i zewnętrzne, ale w miarę potrzeby wybiera wewnętrzne narożniki." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1320,6 +1380,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "Ukryj lub Pokaż Szew" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "Inteligentne ukrywanie" + #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" @@ -1332,13 +1397,13 @@ msgstr "Kiedy włączone, współrzędne szwu są względne do każdego środka #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "Zignoruj Małe Luki Z" +msgid "No Skin in Z Gaps" +msgstr "Brak wypełnienia w lukach osi Z" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "Jeśli model ma małe, pionowe szczeliny, to można wykorzystać dodatkowe 5% mocy obliczeniowej do wygenerowania górnej i dolnej skóry w wąskich przestrzeniach. W takim wypadku, wyłącz tę opcję." +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "Gdy model ma małe pionowe szczeliny składające się z kilku warstw, powinna pojawić się powierzchnia zewnętrzna wokół tych warstw w wąskiej przestrzeni. Włącz, aby nie generować powierzchni zewnętrznej, jeśli odstęp pionowy jest bardzo mały. Poprawia to czas drukowania i czas cięcia, ale technicznie pozostawia wypełnienie bez wykończenia." #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1357,8 +1422,8 @@ msgstr "Włącz Prasowanie" #: fdmprinter.def.json 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 "Przejedź nad górną powierzchnią dodatkowy raz, ale bez ekstrudowania materiału. Topi to plastyk na górze, co powoduje gładszą powierzchnię." +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 "Ponowne przejście po górnej powierzchni, tym razem wytłaczając bardzo mało materiału. Ma to na celu lepsze stopienie tworzywa na wierzchu, tworząc gładsze wykończenie. Ciśnienie w dyszy jest utrzymywane na wysokim poziomie, aby szczeliny na powierzchni były wypełnione materiałem." #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1450,6 +1515,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "Maksymalna nagła zmiana prędkości podczas przeprowadzania prasowania." +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "Procent Nakładania się Skóry" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Dostosuj zachodzenie pomiędzy ścianami, a (punktami końcowymi) linią obrysu, jako procent szerokości linii obrysu i najbardziej wewnętrznej ściany. Niewielkie zachodzenie na siebie pozwala ścianom połączyć się mocno z obrysem. Zauważ, że przy równej szerokości obrysu i szerokości ściany, każdy procent powyżej 50% może spowodować przekroczenie ściany przez obrys, ponieważ pozycja dyszy ekstrudera obrysu może sięgać poza środek ściany." + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "Nakładanie się Skóry" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Dostosuj zachodzenie pomiędzy ścianami, a (punktami końcowymi) linią obrysu. Niewielkie zachodzenie na siebie pozwala ścianom połączyć się mocno z obrysem. Zauważ, że przy równej szerokości obrysu i szerokości ściany, każdy procent powyżej 50% może spowodować przekroczenie ściany przez obrys, ponieważ pozycja dyszy ekstrudera obrysu może sięgać poza środek ściany." + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1615,6 +1700,16 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Wzór wypełnienia jest przesunięty o tę odległość wzdłuż osi Y." +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +msgstr "Losowy punkt startu wypełnienia" + +#: 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 "Losuje, która linia wypełnienia jest drukowana jako pierwsza. Dzięki temu nie ma zjawiska, kiedy jeden segment jest mocniejszy. Kosztem jest dodatkowy ruchu jałowy." + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1669,26 +1764,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "Ilość nałożenia pomiędzy wypełnieniem a ścianami. Nieznaczne nałożenie pozwala ściśle łączyć się z wypełnieniem." -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "Procent Nakładania się Skóry" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Dostosuj zachodzenie pomiędzy ścianami, a (punktami końcowymi) linią obrysu, jako procent szerokości linii obrysu i najbardziej wewnętrznej ściany. Niewielkie zachodzenie na siebie pozwala ścianom połączyć się mocno z obrysem. Zauważ, że przy równej szerokości obrysu i szerokości ściany, każdy procent powyżej 50% może spowodować przekroczenie ściany przez obrys, ponieważ pozycja dyszy ekstrudera obrysu może sięgać poza środek ściany." - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "Nakładanie się Skóry" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Dostosuj zachodzenie pomiędzy ścianami, a (punktami końcowymi) linią obrysu. Niewielkie zachodzenie na siebie pozwala ścianom połączyć się mocno z obrysem. Zauważ, że przy równej szerokości obrysu i szerokości ściany, każdy procent powyżej 50% może spowodować przekroczenie ściany przez obrys, ponieważ pozycja dyszy ekstrudera obrysu może sięgać poza środek ściany." - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1872,12 +1947,12 @@ msgstr "Domyślna temperatura używana do drukowania. Powinno to być \"podstawo #: fdmprinter.def.json msgctxt "build_volume_temperature label" msgid "Build Volume Temperature" -msgstr "" +msgstr "Temperatura obszaru roboczego" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." -msgstr "" +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." +msgstr "Temperatura otoczenia druku. Jeśli ustawione jest 0, temperatura komory nie będzie ustawiana." #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1989,6 +2064,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "Współczynnik skurczu w procentach." +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "Materiał krystaliczny" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "Czy ten rodzaj materiału odłamuje się łatwo po podgrzaniu (krystaliczny), czy też jest to tworzywo, które wytwarza długie splecione łańcuchy polimerowe (niekrystaliczne)?" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "Odległość retrakcji anty-wyciekom" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "Jak daleko materiał musi zostać wycofany, aby przestał wyciekać." + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "Szybkość retrakcji anty-wyciekom" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "Jak szybko materiał musi zostać wycofany podczas zmiany filamentu, aby przestał wyciekać." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "Odległość pęknięcia przy retrakcji" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "Jak bardzo filament może być rozciągnięty, zanim pęknie, podczas ogrzewania." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "Szybkość pękania przy retrakcji" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "Jak szybko filament musi zostać wycofany, aby pękł podczas cofania." + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "Odległość łamania retrakcji" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "Jak daleko wycofać filament, aby go złamać na czysto." + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "Szybkość łamania retrakcji" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "Jak szybko wycofać filament, aby go złamać na czysto." + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "Temperatura pękania" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "Temperatura, w której filament można złamać na czysto." + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -1999,6 +2154,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "Kompensacja przepływu: ilość ekstrudowanego materiału jest mnożona przez tę wartość." +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "Przepływ ścianek" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "Ustawienie przepływu na liniach ścianek." + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "Przepływu ścianek zewnętrznych" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "Ustawienie przepływu na liniach ścianek zewnętrznych." + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "Przepływu ścianek wewnętrznych" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "Ustawienie przepływu na liniach ścianek wewnętrznych." + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "Przepływ warstwy górnej i dolnej" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "Ustawienie przepływu na warstwie górnej i dolnej." + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "Przepływ ostatniej warstwy górnej" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "Ustawienie przepływu na ostatniej warstwie górnej." + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "Przepływ wypełnienia" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "Ustawienie przepływu wypełnienia." + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "Przepływ warstwy adhezyjnej" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "Ustawienie przepływu warstwy adhezyjnej." + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "Przepływ podpór" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "Ustawienie przepływu podpór." + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "Przepływ podłoża podpór" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "Ustawienie przepływu podłoża podpór." + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "Przepływ dachów podpór" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "Ustawienie przepływu podłoża ostatniej warstwy podpór." + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "Przepływ podstawy podpór" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "Ustawienie przepływu pierwszej warstwy podpór." + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "Przepływ Wieży Czyszczącej" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "Przepływ linii wieży podporowej." + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2116,8 +2391,8 @@ msgstr "Ogranicz Retrakcje Pomiędzy Podporami" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." -msgstr "Unikaj retrakcji podczas poruszania się od podpory do podpory w linii prostej. Załączenie tej funkcji spowoduje skrócenie czasu druku, lecz może prowadzić do nadmiernego nitkowania wewnątrz struktur podporowych." +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." +msgstr "Pomiń retrakcję, przechodząc od podpory do podpory w linii prostej. Włączenie tego ustawienia oszczędza czas drukowania, ale może prowadzić do nadmiernego ciągnięcia filamentu w strukturze nośnej." #: fdmprinter.def.json msgctxt "material_standby_temperature label" @@ -2169,6 +2444,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "Prędkość, z jaką filament jest cofany podczas retrakcji po zmianie dyszy." +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "Dodatkowa ekstruzja po zmianie dyszy" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "Ilość dodatkowego materiału do podania po zmianie dyszy." + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2360,14 +2645,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "Prędkość, z jaką jest drukowana obwódka i obrys. Zwykle jest to wykonywane przy szybkości początkowej warstwy, ale czasami możesz chcieć drukować obwódkę lub obrys z inną prędkością." #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "Maksymalna Prędk. Z" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "Prędkość skoku Z" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "Maksymalna prędkość przesuwu stołu. Ustawienie na zero powoduje, że druk używa domyślnych ustawień oprogramowania dla maksymalnej prędkości z." +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "Szybkość, z jaką wykonuje się pionowy ruch skoku Z. Jest to zwykle mniej niż prędkość drukowania, ponieważ trudniej się porusza stołem drukarki." #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2869,16 +3154,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "Odległość między dyszą a już wydrukowanym elementem, gdy są one omijane podczas ruchu jałowego." -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "Rozp. Warstwy w tym Samym Punkcie" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "Na każdej warstwie rozpocznij drukowanie obiektu blisko tego samego punktu, abyśmy nie rozpoczynali nowej warstwy w miejscu gdzie skończyła się poprzednia warstwa. Powoduje to lepsze nawisy i małe elementy, ale wydłuża czas druku." - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -2942,12 +3217,12 @@ msgstr "Po przełączeniu maszyny z jednego ekstrudera na drugi, stół jest opu #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height label" msgid "Z Hop After Extruder Switch Height" -msgstr "" +msgstr "Skok Z po zmianie wysokości ekstrudera" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height description" msgid "The height difference when performing a Z Hop after extruder switch." -msgstr "" +msgstr "Różnica wysokości podczas wykonywania skoku Z po zmianie ekstrudera." #: fdmprinter.def.json msgctxt "cooling label" @@ -3222,7 +3497,7 @@ msgstr "Krzyż" #: fdmprinter.def.json msgctxt "support_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "Gyroid" #: fdmprinter.def.json msgctxt "support_wall_count label" @@ -3285,14 +3560,14 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "Odległość między drukowanymi liniami struktury podpory w początkowej warstwie. To ustawienie jest obliczane na podstawie gęstości podpory." #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "Kierunek Linii Wypełnienia Podpory" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." -msgstr "Orientacja wzoru wypełnienia dla podpór. Wzór podpory jest obracany w płaszczyźnie poziomej." +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 "Lista kierunków linii całkowitych do użycia. Elementy z listy są używane sekwencyjnie w miarę postępu warstw, a po osiągnięciu końca listy zaczyna się od początku. Elementy listy są oddzielone przecinkami, a cała lista jest zawarta w nawiasach kwadratowych. Domyślnie lista jest pusta, co oznacza użycie domyślnego kąta 0 stopni." #: fdmprinter.def.json msgctxt "support_brim_enable label" @@ -3421,8 +3696,8 @@ msgstr "Odległość Łączenia Podpór" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." -msgstr "Maksymalna odległość między podporami w kierunkach X/Y. Gdy oddzielne struktury są bliżej siebie niż ta wartość, struktury łączą się w jedną." +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." +msgstr "Maksymalna odległość między konstrukcjami wspornymi w kierunkach X/Y. Kiedy oddzielne struktury są bliżej siebie niż ta wartość, struktury łączą się w jedną." #: fdmprinter.def.json msgctxt "support_offset label" @@ -3759,6 +4034,36 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "Wartość przesunięcia zastosowana do obszaru podłoża podpór." +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +msgstr "Kierunek linii podłoża podpór" + +#: 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 "Lista kierunków linii całkowitych do użycia. Elementy z listy są używane sekwencyjnie w miarę postępu warstw, a po osiągnięciu końca listy zaczyna się od początku. Elementy listy są oddzielone przecinkami, a cała lista jest zawarta w nawiasach kwadratowych. Domyślnie lista jest pusta, co oznacza użycie domyślnych kątów (na przemian między 45 a 135 stopni, jeśli interfejsy są dość grube lub 90 stopni)." + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +msgstr "Kierunek linii dachu podpór" + +#: 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 "Lista kierunków linii całkowitych do użycia. Elementy z listy są używane sekwencyjnie w miarę postępu warstw, a po osiągnięciu końca listy zaczyna się od początku od nowa. Elementy listy są oddzielone przecinkami, a cała lista jest zawarta w nawiasach kwadratowych. Domyślnie lista jest pusta, co oznacza użycie domyślnych kątów (na przemian między 45 a 135 stopni, jeśli interfejsy są dość grube lub 90 stopni)." + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +msgstr "Kierunek linii podstawy podpór" + +#: 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 "Lista kierunków linii całkowitych do użycia. Elementy z listy są używane sekwencyjnie w miarę postępu warstw, a po osiągnięciu końca listy zaczyna się od początku od nowa. Elementy listy są oddzielone przecinkami, a cała lista jest zawarta w nawiasach kwadratowych. Domyślnie lista jest pusta, co oznacza użycie domyślnych kątów (na przemian między 45 a 135 stopni, jeśli interfejsy są dość grube lub 90 stopni)." + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3800,14 +4105,14 @@ msgid "The diameter of a special tower." msgstr "Średnica wieży specjalnej." #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "Minimalna Średnica" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "Maksymalna średnica obsługiwana przez wieżę podporową" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." -msgstr "Minimalna średnica w kierunkach X/Y o małej powierzchni, który jest wspierana przez specjalną wieżę wspierającą." +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "Maksymalna średnica w kierunkach X/Y obszaru, który ma być podtrzymywana przez specjalistyczną wieżę podporową." #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" @@ -4303,16 +4608,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "Wydrukuj wieżę obok wydruku, która służy do zmiany materiału po każdym przełączeniu dyszy." -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "Okrągła Wieża Czyszcząca" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "Twórz wieżę czyszczącą o okrągłym kształcie." - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4353,16 +4648,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "Współrzędna Y położenia wieży czyszczącej." -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "Przepływ Wieży Czyszczącej" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "Kompensacja przepływu: ilość ekstrudowanego materiału jest mnożona przez tę wartość." - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4376,12 +4661,12 @@ msgstr "Po wydrukowaniu podstawowej wieży jedną dyszą, wytrzyj wytłoczony ma #: fdmprinter.def.json msgctxt "prime_tower_brim_enable label" msgid "Prime Tower Brim" -msgstr "" +msgstr "Obrys wieży czyszczącej" #: fdmprinter.def.json msgctxt "prime_tower_brim_enable description" msgid "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type." -msgstr "" +msgstr "Wieże czyszczące mogą potrzebować dodatkowej adhezji zapewnionej przez obrys, nawet jeśli model nie potrzebuje. Nie można używać z typem przyczepności „tratwa”." #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4665,8 +4950,8 @@ msgstr "Wygładź Spiralne Kontury" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." -msgstr "Wygładź spiralny kontur, aby zmniejszyć widoczność szwu Z (szew Z powinien być ledwo widoczny na wydruku, ale nadal będzie widoczny w widoku warstwy). Należy pamiętać, że wygładzanie będzie miało tendencję do rozmycia drobnych szczegółów powierzchni." +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgstr "Wygładź spiralne kontury, aby zmniejszyć widoczność szwu Z (szew Z powinien być ledwo widoczny na wydruku, ale nadal będzie widoczny w widoku warstwy). Pamiętaj, że wygładzanie będzie powodować rozmycie drobnych szczegółów powierzchni." #: fdmprinter.def.json msgctxt "relative_extrusion label" @@ -4901,12 +5186,12 @@ msgstr "Minimalny rozmiar segmentu linii ruchu jałowego po pocięciu. Jeżeli t #: fdmprinter.def.json msgctxt "meshfix_maximum_deviation label" msgid "Maximum Deviation" -msgstr "" +msgstr "Maksymalne odchylenie" #: 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." -msgstr "" +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 "Maksymalne odchylenie dozwolone przy zmniejszaniu rozdzielczości dla ustawienia maksymalnej rozdzielczości. Jeśli to zwiększysz, wydruk będzie mniej dokładny, ale g-code będzie mniejszy. Maksymalne odchylenie jest limitem dla maksymalnej rozdzielczości, więc wystąpi konflikt, maksymalne odchylenie zawsze będzie używane." #: fdmprinter.def.json msgctxt "support_skip_some_zags label" @@ -5165,8 +5450,8 @@ msgstr "Włącz Podpory Stożkowe" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "Opcja eksperymentalna: W dolnym obszarze podpory powinny być mniejsze niż na zwisie." +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "Zmniejsz obszary podparcia na podłożu pod zwisem." #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5510,7 +5795,7 @@ msgstr "Odległość między dyszą a liniami skierowanymi w dół. Większe prz #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled label" msgid "Use Adaptive Layers" -msgstr "" +msgstr "Użyj zmiennych warstw" #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled description" @@ -5520,7 +5805,7 @@ msgstr "Zmienne warstwy obliczają wysokości warstw w zależności od kształtu #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation label" msgid "Adaptive Layers Maximum Variation" -msgstr "" +msgstr "Maks. zmiana zmiennych warstw" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" @@ -5530,7 +5815,7 @@ msgstr "Maksymalna dozwolona różnica wysokości względem bazowej wysokości w #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" msgid "Adaptive Layers Variation Step Size" -msgstr "" +msgstr "Krok zmian zmiennych warstw" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step description" @@ -5540,7 +5825,7 @@ msgstr "Różnica w wysokości pomiędzy następną wysokością warstwy i poprz #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold label" msgid "Adaptive Layers Threshold" -msgstr "" +msgstr "Próg zmiany warstw" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" @@ -5760,152 +6045,192 @@ msgstr "Procent prędkości wentylatora używany podczas drukowania trzeciej war #: fdmprinter.def.json msgctxt "clean_between_layers label" msgid "Wipe Nozzle Between Layers" -msgstr "" +msgstr "Wytrzyj dyszę pomiędzy warstwami" #: fdmprinter.def.json msgctxt "clean_between_layers description" msgid "Whether to include nozzle wipe G-Code between layers. Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working." -msgstr "" +msgstr "Włącza w G-Code wycieranie dyszy między warstwami. Włączenie tego ustawienia może wpłynąć na zachowanie retrakcji przy zmianie warstwy. Użyj ustawień „Czyszczenie przy retrakcji”, aby kontrolować retrakcję na warstwach, na których będzie działał skrypt czyszczenia." #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe label" msgid "Material Volume Between Wipes" -msgstr "" +msgstr "Objętość materiału między czyszczeniem" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe description" msgid "Maximum material, that can be extruded before another nozzle wipe is initiated." -msgstr "" +msgstr "Maksymalna ilość materiału, który można wytłoczyć przed zainicjowaniem kolejnego czyszczenia dyszy." #: fdmprinter.def.json msgctxt "wipe_retraction_enable label" msgid "Wipe Retraction Enable" -msgstr "" +msgstr "Włącz Czyszczenie przy retrakcji" #: fdmprinter.def.json msgctxt "wipe_retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area." -msgstr "" +msgstr "Cofnij filament, gdy dysza porusza się nad obszarem, w którym nie ma drukować." #: fdmprinter.def.json msgctxt "wipe_retraction_amount label" msgid "Wipe Retraction Distance" -msgstr "" +msgstr "Długość czyszczenia przy retrakcji" #: fdmprinter.def.json msgctxt "wipe_retraction_amount description" msgid "Amount to retract the filament so it does not ooze during the wipe sequence." -msgstr "" +msgstr "Ilość filamentu do retrakcji, aby nie wyciekał podczas czyszczenia." #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount label" msgid "Wipe Retraction Extra Prime Amount" -msgstr "" +msgstr "Dodatkowa wartość czyszczenia dla Czyszczenia przy retrakcji" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount description" msgid "Some material can ooze away during a wipe travel moves, which can be compensated for here." -msgstr "" +msgstr "Niektóre materiały mogą wyciekać podczas ruchów czyszczenia, można to tutaj skompensować." #: fdmprinter.def.json msgctxt "wipe_retraction_speed label" msgid "Wipe Retraction Speed" -msgstr "" +msgstr "Prędkość Czyszczenia przy retrakcji" #: fdmprinter.def.json msgctxt "wipe_retraction_speed description" msgid "The speed at which the filament is retracted and primed during a wipe retraction move." -msgstr "" +msgstr "Prędkość, z jaką jest wykonywana i dopełniana retrakcja podczas ruchu czyszczenia przy retrakcji." #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed label" msgid "Wipe Retraction Retract Speed" -msgstr "" +msgstr "Prędkość retrakcji Czyszczenia przy retrakcji" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed description" msgid "The speed at which the filament is retracted during a wipe retraction move." -msgstr "" +msgstr "Prędkość, z jaką jest wykonywana retrakcja podczas ruchu czyszczenia przy retrakcji." #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "Prędkość retrakcji Czyszczenia" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed description" msgid "The speed at which the filament is primed during a wipe retraction move." -msgstr "" +msgstr "Prędkość, z jaką jest wykonywana dodatkowa retrakcja podczas ruchu czyszczenia przy retrakcji." #: fdmprinter.def.json msgctxt "wipe_pause label" msgid "Wipe Pause" -msgstr "" +msgstr "Wstrzymaj czyszczenie" #: fdmprinter.def.json msgctxt "wipe_pause description" msgid "Pause after the unretract." -msgstr "" +msgstr "Wstrzymaj czyszczenie, jeśli brak retrakcji." #: fdmprinter.def.json msgctxt "wipe_hop_enable label" msgid "Wipe Z Hop When Retracted" -msgstr "" +msgstr "Czyszczący skok Z jeśli jest retrakcja" #: fdmprinter.def.json msgctxt "wipe_hop_enable description" msgid "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." -msgstr "" +msgstr "Zawsze, gdy następuje retrakcja, stół roboczy jest opuszczany w celu utworzenia luzu między dyszą a drukiem. Zapobiega to uderzeniu dyszy podczas ruchu jałowego, co zmniejsza szanse uderzenia wydruku na stole." #: fdmprinter.def.json msgctxt "wipe_hop_amount label" msgid "Wipe Z Hop Height" -msgstr "" +msgstr "Wysokość skoku Z przy czyszczeniu" #: fdmprinter.def.json msgctxt "wipe_hop_amount description" msgid "The height difference when performing a Z Hop." -msgstr "" +msgstr "Różnica w wysokości podczas przeprowadzania Skoku Z." #: fdmprinter.def.json msgctxt "wipe_hop_speed label" msgid "Wipe Hop Speed" -msgstr "" +msgstr "Prędkość czyszczącego skoku Z" #: fdmprinter.def.json msgctxt "wipe_hop_speed description" msgid "Speed to move the z-axis during the hop." -msgstr "" +msgstr "Szybkość przesuwania osi Z podczas skoku." #: fdmprinter.def.json msgctxt "wipe_brush_pos_x label" msgid "Wipe Brush X Position" -msgstr "" +msgstr "X pozycji czyszczenia" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x description" msgid "X location where wipe script will start." -msgstr "" +msgstr "Pozycja X, w której skrypt zaczyna." #: fdmprinter.def.json msgctxt "wipe_repeat_count label" msgid "Wipe Repeat Count" -msgstr "" +msgstr "Ilość powtórzeń czyszczenia" #: fdmprinter.def.json msgctxt "wipe_repeat_count description" msgid "Number of times to move the nozzle across the brush." -msgstr "" +msgstr "Ilość powtórzeń przesunięcia dyszy po szczotce." #: fdmprinter.def.json msgctxt "wipe_move_distance label" msgid "Wipe Move Distance" -msgstr "" +msgstr "Odległość ruchu czyszczenia" #: fdmprinter.def.json msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." -msgstr "" +msgstr "Odległość, którą głowica musi pokonać w tę i z powrotem po szczotce." + +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "Maksymalny rozmiar małych otworów" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "Otwory i kontury części o średnicy mniejszej niż podana zostaną wydrukowane przy małej szybkości operacji." + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "Maksymalna długość małych elementów" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "Kontury obiektów, które są krótsze niż podana długość, zostaną wydrukowane przy użyciu funkcji małej prędkości." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +msgstr "Prędkość małych elementów" + +#: 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 "Małe obiekty zostaną wydrukowane z podanym procentem ich normalnej prędkości drukowania. Wolniejsze drukowanie może pomóc w zachowaniu dokładności." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor_0 label" +msgid "First Layer Speed" +msgstr "Prędkość pierwszej warstwy" + +#: 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 "Małe elementy na pierwszej warstwie zostaną wydrukowane z podanym procentem ich normalnej prędkości drukowania. Wolniejsze drukowanie może pomóc w zachowaniu dokładności i dokładności." #: fdmprinter.def.json msgctxt "command_line_settings label" @@ -5967,6 +6292,90 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Forma przesunięcia, która ma być zastosowana do modelu podczas ładowania z pliku." +#~ 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 "Przejedź nad górną powierzchnią dodatkowy raz, ale bez ekstrudowania materiału. Topi to plastyk na górze, co powoduje gładszą powierzchnię." + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "Rozp. Warstwy w tym Samym Punkcie" + +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "Na każdej warstwie rozpocznij drukowanie obiektu blisko tego samego punktu, abyśmy nie rozpoczynali nowej warstwy w miejscu gdzie skończyła się poprzednia warstwa. Powoduje to lepsze nawisy i małe elementy, ale wydłuża czas druku." + +#~ msgctxt "support_infill_angles description" +#~ msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +#~ msgstr "Orientacja wzoru wypełnienia dla podpór. Wzór podpory jest obracany w płaszczyźnie poziomej." + +#~ 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." +#~ msgstr "Maksymalne odchylenie dozwolone przy zmniejszaniu rozdzielczości dla ustawienia „Maksymalna rozdzielczość”. Jeśli to zwiększysz, wydruk będzie mniej dokładny, ale G-Code będzie mniejszy." + +#~ msgctxt "machine_gcode_flavor label" +#~ msgid "G-code Flavour" +#~ msgstr "Wersja G-code" + +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "Kontroluje, czy rogi na zewn. linii modelu wpływają na pozycję szwu. Brak oznacza, że rogi nie mają wpływu na pozycję szwu. Ukryj Szew powoduje, że szew będzie się bardziej pojawiał na wewn. rogach. Pokaż Szew powoduje, że szew będzie się bardziej pojawiał na zewn. rogach. Ukryj lub Pokaż Szew powoduje, że szew będzie się bardziej pojawiał na wewn. lub zewn. rogach." + +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "Zignoruj Małe Luki Z" + +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "Jeśli model ma małe, pionowe szczeliny, to można wykorzystać dodatkowe 5% mocy obliczeniowej do wygenerowania górnej i dolnej skóry w wąskich przestrzeniach. W takim wypadku, wyłącz tę opcję." + +#~ msgctxt "build_volume_temperature description" +#~ msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +#~ msgstr "Temperatura stosowana dla obszaru roboczego. Jeżeli jest ustawione 0, temperatura nie będzie ustawiona." + +#~ msgctxt "limit_support_retractions description" +#~ msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +#~ msgstr "Unikaj retrakcji podczas poruszania się od podpory do podpory w linii prostej. Załączenie tej funkcji spowoduje skrócenie czasu druku, lecz może prowadzić do nadmiernego nitkowania wewnątrz struktur podporowych." + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "Maksymalna Prędk. Z" + +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "Maksymalna prędkość przesuwu stołu. Ustawienie na zero powoduje, że druk używa domyślnych ustawień oprogramowania dla maksymalnej prędkości z." + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "Maksymalna odległość między podporami w kierunkach X/Y. Gdy oddzielne struktury są bliżej siebie niż ta wartość, struktury łączą się w jedną." + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "Minimalna Średnica" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "Minimalna średnica w kierunkach X/Y o małej powierzchni, który jest wspierana przez specjalną wieżę wspierającą." + +#~ msgctxt "prime_tower_circular label" +#~ msgid "Circular Prime Tower" +#~ msgstr "Okrągła Wieża Czyszcząca" + +#~ msgctxt "prime_tower_circular description" +#~ msgid "Make the prime tower as a circular shape." +#~ msgstr "Twórz wieżę czyszczącą o okrągłym kształcie." + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "Kompensacja przepływu: ilość ekstrudowanego materiału jest mnożona przez tę wartość." + +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "Wygładź spiralny kontur, aby zmniejszyć widoczność szwu Z (szew Z powinien być ledwo widoczny na wydruku, ale nadal będzie widoczny w widoku warstwy). Należy pamiętać, że wygładzanie będzie miało tendencję do rozmycia drobnych szczegółów powierzchni." + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "Opcja eksperymentalna: W dolnym obszarze podpory powinny być mniejsze niż na zwisie." + #~ msgctxt "extruders_enabled_count label" #~ msgid "Number of Extruders that are enabled" #~ msgstr "Liczba Ekstruderów, które są dostępne" diff --git a/resources/i18n/pt_BR/cura.po b/resources/i18n/pt_BR/cura.po index 35b99ff361..1a9ca5fc90 100644 --- a/resources/i18n/pt_BR/cura.po +++ b/resources/i18n/pt_BR/cura.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" -"PO-Revision-Date: 2019-03-18 11:26+0100\n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" +"PO-Revision-Date: 2019-09-17 06:50-0300\n" "Last-Translator: Cláudio Sampaio \n" "Language-Team: Cláudio Sampaio \n" "Language: pt_BR\n" @@ -16,9 +16,9 @@ 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.1.1\n" +"X-Generator: Poedit 2.2.3\n" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "Ajustes da Máquina" @@ -85,36 +85,45 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "O perfil foi achatado & ativado." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "Arquivo AMF" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "Impressão USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Imprimir pela USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Imprimir pela USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "Conectado via USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "Uma impressão USB está em progresso, fechar o Cura interromperá esta impressão. Tem certeza?" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 -msgctxt "X3G Writer File Description" -msgid "X3G File" -msgstr "Arquivo X3G" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "Uma impressão ainda está em progresso. O Cura não pode iniciar outra impressão via USB até que a impressão anterior tenha completado." + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "Print in Progress" +msgstr "Impressão em Progresso" #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16 msgctxt "X3g Writer Plugin Description" @@ -126,6 +135,11 @@ msgctxt "X3g Writer File Description" msgid "X3g File" msgstr "Arquivo X3g" +#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 +msgctxt "X3G Writer File Description" +msgid "X3G File" +msgstr "Arquivo X3G" + #: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17 #: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17 msgctxt "@item:inlistbox" @@ -160,7 +174,7 @@ msgid "Save to Removable Drive {0}" msgstr "Salvar em Unidade Removível {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Não há formatos de arquivo disponíveis com os quais escrever!" @@ -197,10 +211,9 @@ msgid "Could not save to removable drive {0}: {1}" msgstr "Não foi possível salvar em unidade removível {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "Erro" @@ -229,9 +242,9 @@ msgstr "Ejetar dispositivo removível {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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "Aviso" @@ -258,347 +271,149 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Unidade Removível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "Imprimir pela rede" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "Imprime pela rede" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "Conectado pela rede." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "Conectado pela rede. Por favor aprove a requisição de acesso na impressora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "Conectado pela rede. Sem acesso para controlar a impressora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "Acesso à impressora solicitado. Por favor aprove a requisição na impressora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "Status da autenticação" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "Status da Autenticação" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "Tentar novamente" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "Reenvia o pedido de acesso" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "Acesso à impressora confirmado" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "Sem acesso para imprimir por esta impressora. Não foi possível enviar o trabalho de impressão." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "Solicitar acesso" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "Envia pedido de acesso à impressora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "Não foi possível iniciar novo trabalho de impressão." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "Há um problema com a configuração de sua Ultimaker, o que torna impossível iniciar a impressão. Por favor resolva este problema antes de continuar." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "Configuração conflitante" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "Tem certeza que quer imprimir com a configuração selecionada?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Há divergências entre a configuração ou calibração da impressora e do Cura. Para melhores resultados, sempre fatie com os PrintCores e materiais que estão carregados em sua impressora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "Envio de novos trabalhos (temporariamente) bloqueado, ainda enviando o trabalho de impressão anterior." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "Enviando dados à impressora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "Enviando Dados" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Cancelar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "Printcore não carregado no slot {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "Nenhum material carregado no slot {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "PrintCore Diferente (Cura: {cura_printcore_name}, Impressora: {remote_printcore_name}) selecionado para o extrusor {extruder_id}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "Material diferente (Cura: {0}, Impressora: {1}) selecionado para o extrusor {2}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "Sincronizar com a impressora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "Deseja usar a configuração atual de sua impressora no Cura?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Os PrintCores e/ou materiais da sua impressora diferem dos que estão dentro de seu projeto atual. Para melhores resultados, sempre fatie para os PrintCores e materiais que estão na sua impressora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "Conectado pela rede" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "Trabalho de impressão enviado à impressora com sucesso." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "Dados Enviados" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "Ver no Monitor" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "{printer_name} acabou de imprimir '{job_name}'." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "O trabalho de impressão '{job_name}' terminou." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "Impressão Concluída" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "Vazio" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "Desconhecido" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "Imprimir por Nuvem" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "Imprimir por Nuvem" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "Conectado por Nuvem" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "Erro de nuvem" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "Não foi possível exportar o trabalho de impressão." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "Não foi possível transferir os dados para a impressora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "amanhã" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "hoje" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "Houve um erro ao conectar à nuvem." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Envia e monitora trabalhos de impressão de qualquer lugar usando sua conta Ultimaker." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "Não me pergunte novamente para esta impressora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "Começar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Você agora pode enviar e monitorar trabalhoas de impressão de qualquer lugar usando sua conta Ultimaker." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "Conectado!" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "Rever sua conexão" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Conectar pela rede" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" -msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +msgctxt "@action:button Preceded by 'Ready to'." +msgid "Print over network" +msgstr "Imprimir pela rede" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "Imprime pela rede" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "Conectado pela rede" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "Por favor espere até que o trabalho atual tenha sido enviado." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "Erro de impressão" + +#: /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 "Você está tentando conectar a {0} mas ele não é host de um grupo. Você pode visitar a página web para configurá-lo como host de grupo." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "Não é host de grupo" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "Configurar grupo" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "Envia e monitora trabalhos de impressão de qualquer lugar usando sua conta Ultimaker." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "Conectar à Nuvem Ultimaker" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "Começar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "Enviando Trabalho de Impressão" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "Transferindo trabalho de impressão para a impressora." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "Trabalho de impressão enviado à impressora com sucesso." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "Dados Enviados" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "Você está tentando conectar a uma impressora que não está rodando Ultimaker Connect. Por favor atualiza a impressora para o firmware mais recente." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "Atualize sua impressora" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "O Cura detectou perfis de material que não estão instalados ainda na impressora host do grupo {0}." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "Enviando material para a impressora" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "Não foi possível transferir os dados para a impressora." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "Erro de rede" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "amanhã" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "hoje" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "Imprimir por Nuvem" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "Imprimir por Nuvem" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" +msgstr "Conectado por Nuvem" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Monitor" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "Não foi possível acessar informação de atualização." @@ -625,12 +440,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Visão de Camadas" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "O Cura não mostra as camadas corretamente quando Impressão em Arame estiver habilitada" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "Visão Simulada" @@ -685,6 +500,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Imagem GIF" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "Malha Comprimida de Triângulos Aberta" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "Câmbio de Ativos Digitais COLLADA" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "Binário glTF" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "JSON Embutido glTF" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "Formato de Triângulos de Stanford" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "Câmbio de Ativos Digitais COLLADA Comprimido" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -765,19 +610,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Arquivo 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "Bico" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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 "O arquivo de projeto {0} contém um tipo de máquina desconhecido {1}. Não foi possível importar a máquina. Os modelos serão importados ao invés dela." -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "Abrir Arquivo de Projeto" @@ -792,21 +637,21 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Arquivo G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Interpretando G-Code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "Detalhes do G-Code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." -msgstr "Assegure-se que o g-code é adequado para sua impressora e configuração antes de enviar o arquivo. A representação de g-code pode não ser acurada." +msgstr "Certifique que o g-code é adequado para sua impressora e configuração antes de enviar o arquivo. A representação de g-code pode não ser acurada." #: /home/ruben/Projects/Cura/plugins/CuraDrive/src/DrivePluginExtension.py:64 msgctxt "@item:inmenu" @@ -906,16 +751,16 @@ msgstr "Login falhou" #: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33 msgctxt "@info:not supported profile" msgid "Not supported" -msgstr "" +msgstr "Não Suportado" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 msgctxt "@title:window" msgid "File Already Exists" msgstr "O Arquivo Já Existe" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:204 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -928,116 +773,109 @@ msgid "Invalid file URL:" msgstr "URL de arquivo inválida:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" -msgstr "Os ajustes foram mudados para atender à atual disponibilidade de extrusores: [%s]" +msgctxt "@info:message Followed by a list of settings." +msgid "Settings have been changed to match the current availability of extruders:" +msgstr "Os ajustes foram alterados para seguir a disponibilidade de extrusores atuais:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:926 msgctxt "@info:title" msgid "Settings updated" msgstr "Ajustes atualizados" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "Extrusor(es) Desabilitado(s)" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to export profile to {0}: {1}" msgstr "Falha ao exportar perfil para {0}: {1}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to export profile to {0}: Writer plugin reported failure." msgstr "Falha ao exportar perfil para {0}: complemento escritor relatou erro." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Exported profile to {0}" msgstr "Perfil exportado para {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "Exportação concluída" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "Failed to import profile from {0}: {1}" msgstr "Falha ao importar perfil de {0}: {1}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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 "Não foi possível importar perfil de {0} antes de uma impressora ser adicionada." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" msgstr "Não há perfil personalizado a importar no arquivo {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "Failed to import profile from {0}:" msgstr "Erro ao importar perfil de {0}:" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, 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} contém dados incorretos, não foi possível importá-lo." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "A máquina definida no perfil {0} ({1}) não equivale à sua máquina atual ({2}), não foi possível importá-lo." - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to import profile from {0}:" msgstr "Erro ao importar perfil de {0}:" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Perfil {0} importado com sucesso" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "Arquivo {0} não contém nenhum perfil válido." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "O Perfil {0} tem tipo de arquivo desconhecido ou está corrompido." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "Perfil personalizado" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Falta um tipo de qualidade ao Perfil." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1086,7 +924,7 @@ msgstr "Skirt (Saia)" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:84 msgctxt "@tooltip" msgid "Prime Tower" -msgstr "" +msgstr "Torre de Prime" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:85 msgctxt "@tooltip" @@ -1115,7 +953,7 @@ msgctxt "@action:button" msgid "Next" msgstr "Próximo" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1123,22 +961,36 @@ msgstr "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/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "Fechar" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" msgstr "Adicionar" +#: /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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Cancelar" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1155,23 +1007,22 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Todos Os Arquivos (*)" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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 "Desconhecido" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" -msgstr "" +msgstr "As impressoras abaixo não podem ser conectadas por serem parte de um grupo" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" -msgstr "" +msgstr "Impressoras de rede disponíveis" #: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689 msgctxt "@label" @@ -1184,12 +1035,12 @@ msgctxt "@label" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "A altura do volume de impressão foi reduzida para que o valor da \"Sequência de Impressão\" impeça o eixo de colidir com os modelos impressos." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "Volume de Impressão" @@ -1207,46 +1058,51 @@ msgstr "Tentativa de restauração de backup do Cura sem dados ou metadados apro #: /home/ruben/Projects/Cura/cura/Backups/Backup.py:125 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that is higher than the current version." -msgstr "" +msgstr "Tentativa de restauração de backup do Cura de versão maior que a atual." #: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationHelpers.py:79 msgctxt "@message" msgid "Could not read response." -msgstr "" +msgstr "Não foi possível ler a resposta." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 msgctxt "@info" msgid "Unable to reach the Ultimaker account server." msgstr "Não foi possível contactar o servidor de contas da Ultimaker." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:66 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:202 +msgctxt "@action:button" +msgid "Retry" +msgstr "Tentar novamente" + +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:70 msgctxt "@message" msgid "Please give the required permissions when authorizing this application." -msgstr "" +msgstr "Por favor dê as permissões requeridas ao autorizar esta aplicação." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "Algo inesperado aconteceu ao tentar login, por favor tente novamente." -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "Multiplicando e colocando objetos" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "Colocando Objetos" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Não foi possível achar um lugar dentro do volume de construção para todos os objetos" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "Colocando Objeto" @@ -1395,48 +1251,48 @@ msgstr "Registros" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" -msgstr "Descrição do usuário" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" +msgstr "Descrição do usuário (Nota: Os desenvolvedores podem não falar sua língua, por favor use inglês se possível)" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "Enviar relatório" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Carregando máquinas..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Configurando cena..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Carregando interface..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "Somente um arquivo G-Code pode ser carregado por vez. Pulando importação de {0}" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "Não é possível abrir nenhum outro arquivo se G-Code estiver sendo carregado. Pulando importação de {0}" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "O modelo selecionado é pequenos demais para carregar." @@ -1444,103 +1300,108 @@ msgstr "O modelo selecionado é pequenos demais para carregar." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58 msgctxt "@title:label" msgid "Printer Settings" -msgstr "" +msgstr "Ajustes de Impressora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X (largura)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Profundidade)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Altura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "Forma da plataforma de impressão" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" -msgstr "" +msgstr "Origem no centro" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" -msgstr "" +msgstr "Mesa aquecida" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "Volume de construção aquecido" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "Sabor de G-Code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" -msgstr "" +msgstr "Ajustes da Cabeça de Impressão" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X mín." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y mín." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "X máx." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "Y máx." -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" -msgstr "" +msgstr "Altura do Eixo" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "Número de Extrusores" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" -msgstr "" +msgstr "G-Code Inicial" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" -msgstr "" +msgstr "G-Code Final" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:42 msgctxt "@title:tab" @@ -1550,7 +1411,7 @@ msgstr "Impressora" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:63 msgctxt "@title:label" msgid "Nozzle Settings" -msgstr "" +msgstr "Ajustes do Bico" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:75 msgctxt "@label" @@ -1567,25 +1428,25 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "Deslocamento X do Bico" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Deslocamento Y do Bico" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "Número da Ventoinha de Resfriamento" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" -msgstr "" +msgstr "G-Code Inicial do Extrusor" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" -msgstr "" +msgstr "G-Code Final do Extrusor" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 msgctxt "@action:button" @@ -1593,7 +1454,7 @@ msgid "Install" msgstr "Instalar" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "Instalado" @@ -1608,16 +1469,16 @@ msgctxt "@label" msgid "ratings" msgstr "notas" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "Complementos" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "Materiais" @@ -1627,49 +1488,49 @@ msgctxt "@label" msgid "Your rating" msgstr "Sua nota" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "Versão" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "Última atualização" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "Autor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "Downloads" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "Entrar na conta é necessário para instalar ou atualizar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" -msgstr "" +msgstr "Comprar rolos de material" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "Atualizar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "Atualizando" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1730,17 +1591,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "Sair do Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "Contribuições da Comunidade" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "Complementos da Comunidade" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "Materiais Genéricos" @@ -1801,27 +1662,52 @@ msgctxt "@label" msgid "Featured" msgstr "Em destaque" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilidade" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +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 "Núcleo de Impressão" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137 +msgctxt "@label:table_header" +msgid "Build Plate" +msgstr "Plataforma de Impressão" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "Suporte" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "Qualidade" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "Documento de Dados Técnicos" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "Documento de Dados de Segurança" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "Diretrizes de Impressão" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "Sítio Web" @@ -1921,70 +1807,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "A atualização de firmware falhou devido a firmware não encontrado." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "Gerir Impressora" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "Vidro" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." -msgstr "Estas opçÕes não estão disponíveis porque você está monitorando uma impressora de nuvem." +msgid "Please update your printer's firmware to manage the queue remotely." +msgstr "Por favor atualize o firmware de sua impressora parar gerir a fila remotamente." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "A webcam não está disponível porque você está monitorando uma impressora de nuvem." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "Carregando..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "Indisponível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "Inacessivel" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "Ocioso" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "Sem Título" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "Anônimo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "Requer mudanças na configuração" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "Detalhes" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "Impressora indisponível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "Primeira disponível" @@ -1994,197 +1886,180 @@ msgctxt "@label" msgid "Queued" msgstr "Enfileirados" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" -msgstr "Ir ao Cura Connect" +msgid "Manage in browser" +msgstr "Gerir no navegador" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "Não há trabalhos de impressão na fila. Fatie e envie um trabalho para adicioná-lo." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "Trabalhos de impressão" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "Tempo total de impressão" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "Esperando por" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "Ver histórico de impressão" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "Conexão Existente" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "Esta impressora ou grupo já foi adicionada ao Cura. Por favor selecione outra impressora ou grupo." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Conectar a Impressora de Rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" -msgstr "" -"Para imprimir diretamente para sua impressora pela rede, por favor se certifique que a impressora esteja conectada na rede usando um cabo de rede ou conectando sua impressora na rede WIFI. Se você não conectar o Cura à sua impressora, você ainda pode usar uma unidade USB para transferir arquivos G-Code para sua impressora.\n" -"\n" -"Selecione sua impressora da lista abaixo:" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." +msgstr "Para imprimir diretamente na sua impressora pela rede, certifique-se que ela esteja conectada à rede usando um cabo de rede ou conectando sua impressora à sua WIFI. Se você não conectar Cura à sua impressora, você ainda pode usar um drive USB ou SDCard para transferir arquivos G-Code a ela." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "Selecione sua impressora da lista abaixo:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "Editar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "Remover" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "Atualizar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Se sua impressora não está listada, leia o guia de resolução de problemas de impressão em rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "Tipo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:274 msgctxt "@label" msgid "Firmware version" msgstr "Versão do firmware" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:290 msgctxt "@label" msgid "Address" msgstr "Endereço" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 msgctxt "@label" msgid "This printer is not set up to host a group of printers." msgstr "Esta impressora não está configurada para hospedar um grupo de impressoras." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 msgctxt "@label" msgid "This printer is the host for a group of %1 printers." msgstr "Esta impressora é a hospedeira de um grupo de %1 impressoras." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "A impressora neste endereço ainda não respondeu." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "Conectar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" -msgstr "" +msgstr "Endereço IP inválido" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146 msgctxt "@text" msgid "Please enter a valid IP address." -msgstr "" +msgstr "Por favor entre um endereço IP válido." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "Endereço da Impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." -msgstr "" +msgid "Enter the IP address of your printer on the network." +msgstr "Entre o endereço IP da sua impressora na rede." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "Ok" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "Abortado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "Finalizado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "Preparando..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "Abortando..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "Pausando..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "Pausado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "Continuando..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "Necessária uma ação" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "Termina %1 em %2" @@ -2288,73 +2163,65 @@ msgctxt "@action:button" msgid "Override" msgstr "Sobrepor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" msgstr[0] "A impressora associada, %1, requer a seguinte alteração de configuração:" msgstr[1] "A impressora associada, %1, requer as seguintes alterações de configuração:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "A impressora %1 está associada, mas o trabalho contém configuração de material desconhecida." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "Alterar material %1 de %2 para %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "Carregar %3 como material %1 (isto não pode ser sobreposto)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." msgstr "Alterar núcleo de impressão %1 de %2 para %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "Alterar mesa de impressão para %1 (Isto não pode ser sobreposto)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "Sobrepor irá usar os ajustes especificados com a configuração existente da impressora. Isto pode causar falha da impressão." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "Alumínio" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "Conecta a uma impressora" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" -"Por favor certifique-se que sua impressora está conectada:\n" -"- Verifique se a impressora está ligada.\n" -"- Verifique se a impressora está conectada à rede." +"Por favor certifique-se que sua impressora está conectada>\n" +"- Verifique se ela está ligada.\n" +"- Verifique se ela está conectada à rede.\n" +"- Verifique se você está logado para descobrir impressoras conectadas à nuvem." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 msgctxt "@info" msgid "Please connect your printer to the network." -msgstr "" +msgstr "Por favor conecte sua impressora à rede." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:156 msgctxt "@label link to technical assistance" @@ -2476,17 +2343,17 @@ msgstr "Mais informações em coleção anônima de dados" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:74 msgctxt "@text:window" msgid "Ultimaker Cura collects anonymous data in order to improve the print quality and user experience. Below is an example of all the data that is shared:" -msgstr "" +msgstr "O Ultimaker Cura coleta dados anônimos para poder aprimorar a qualidade de impressão e experiência do usuário. Abaixo segue um exemplo de todos os dados que são compartilhados:" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:109 msgctxt "@text:window" msgid "I don't want to send anonymous data" -msgstr "" +msgstr "Recusar enviar dados anônimos" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:118 msgctxt "@text:window" msgid "Allow sending anonymous data" -msgstr "" +msgstr "Permitir enviar dados anônimos" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2536,7 +2403,7 @@ msgstr "Profundidade (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 msgctxt "@info:tooltip" msgid "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model." -msgstr "" +msgstr "Para litofanos, pixels escuros devem corresponder a locais mais espessos para conseguir bloquear mais luz. Para mapas de altura, pixels mais claros significam terreno mais alto, portanto tais pixels devem corresponder a locais mais espessos no modelo 3d gerado." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 msgctxt "@item:inlistbox" @@ -2661,7 +2528,7 @@ msgid "Printer Group" msgstr "Grupo de Impressora" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "Ajustes de perfil" @@ -2674,19 +2541,19 @@ msgstr "Como o conflito no perfil deve ser resolvido?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 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:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 msgctxt "@action:label" msgid "Not in profile" msgstr "Ausente no perfil" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2858,18 +2725,24 @@ msgid "Previous" msgstr "Anterior" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "Dica" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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 "Imprimir experimento" @@ -2989,155 +2862,155 @@ 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 "O novo diâmetro de filamento está ajustado em %1 mm, que não é compatível com o extrusor atual. Você deseja continuar?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "Exibir Nome" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "Marca" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "Tipo de Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "Cor" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "Propriedades" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "Densidade" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "Diâmetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "Custo do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "Peso do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "Comprimento do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "Custo por Metro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Este material está vinculado a %1 e compartilha algumas de suas propriedades." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "Desvincular Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "Descrição" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "Informação sobre Aderência" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:19 msgctxt "@label" msgid "Print settings" msgstr "Ajustes de impressão" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "Ativar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "Criar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "Duplicar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "Importar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "Impressora" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "Confirmar Remoção" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 msgctxt "@label (%1 is object name)" msgid "Are you sure you wish to remove %1? This cannot be undone!" msgstr "Tem certeza que deseja remover %1? Isto não poderá ser desfeito!" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "Importar Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not import material %1: %2" msgstr "Não foi possível importar material %1: %2" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully imported material %1" msgstr "Material %1 importado com sucesso" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "Exportar Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 msgctxt "@info:status Don't translate the XML tags and !" msgid "Failed to export material to %1: %2" msgstr "Falha em exportar material para %1: %2" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "Material exportado para %1 com sucesso" @@ -3178,388 +3051,411 @@ msgid "Unit" msgstr "Unidade" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "Geral" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "Interface" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "Idioma:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "Moeda:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "Tema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "Você precisará reiniciar a aplicação para que essas mudanças tenham efeito." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Fatiar automaticamente quando mudar ajustes." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "Fatiar automaticamente" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "Comportamento da área de visualização" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Ressaltar áreas sem suporte do modelo em vermelho. Sem suporte, estas áreas não serão impressas corretamente." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "Exibir seções pendentes" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 msgctxt "@info:tooltip" msgid "Moves the camera so the model is in the center of the view when a model is selected" msgstr "Move a câmera de modo que o modelo fique no centro da visão quando for selecionado" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Centralizar câmera quanto o item é selecionado" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "O comportamento default de ampliação deve ser invertido?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Inverter a direção da ampliação de câmera." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "A ampliação (zoom) deve se mover na direção do mouse?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +msgctxt "@info:tooltip" +msgid "Zooming towards the mouse is not supported in the orthographic perspective." +msgstr "Ampliar com o mouse não é suportado na perspectiva ortográfica." + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Ampliar na direção do mouse" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "Os modelos devem ser movidos na plataforma de modo que não se sobreponham?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Assegurar que os modelos sejam mantidos separados" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "Os modelos devem ser movidos pra baixo pra se assentar na plataforma de impressão?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Automaticamente fazer os modelos caírem na mesa de impressão" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "Exibir mensagem de alerta no leitor de G-Code." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "Mensagem de alera no leitor de G-Code" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "A Visão de Camada deve ser forçada a ficar em modo de compatibilidade?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Forçar modo de compatibilidade da visão de camadas (requer reinício)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +msgctxt "@info:tooltip" +msgid "What type of camera rendering should be used?" +msgstr "Que tipo de renderização de câmera deve ser usada?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "Renderização de câmera:" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "Perspectiva" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "Ortográfica" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "Abrindo e salvando arquivos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "Os modelos devem ser redimensionados dentro do volume de impressão se forem muito grandes?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "Redimensionar modelos grandes" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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 "Um modelo pode ser carregado diminuto se sua unidade for por exemplo em metros ao invés de milímetros. Devem esses modelos ser redimensionados?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Redimensionar modelos minúsculos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "Os modelos devem ser selecionados após serem carregados?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Selecionar modelos ao carregar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "Um prefixo baseado no nome da impressora deve ser adicionado ao nome do trabalho de impressão automaticamente?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Adicionar prefixo de máquina ao nome do trabalho" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Um resumo deve ser exibido ao salvar um arquivo de projeto?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Exibir diálogo de resumo ao salvar projeto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Comportamento default ao abrir um arquivo de projeto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Comportamento default ao abrir um arquivo de projeto: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "Sempre me perguntar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Sempre abrir como projeto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "Sempre importar modelos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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 "Quando você faz alterações em um perfil e troca para um diferent, um diálogo aparecerá perguntando se você quer manter ou aplicar suas modificações, ou você pode forçar um comportamento default e não ter o diálogo." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "Perfis" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 msgctxt "@window:text" msgid "Default behavior for changed setting values when switching to a different profile: " msgstr "Comportamento default para valores de configuração alterados ao mudar para um perfil diferente: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml:157 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Sempre perguntar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "Sempre descartar alterações da configuração" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:discardOrKeep" msgid "Always transfer changed settings to new profile" msgstr "Sempre transferir as alterações para o novo perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "Privacidade" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "O Cura deve verificar novas atualizações quando o programa for iniciado?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Verificar atualizações na inicialização" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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 "Dados anônimos sobre sua impressão podem ser enviados para a Ultimaker? Nota: nenhuma informação pessoalmente identificável, modelos ou endereços IP são enviados ou armazenados." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Enviar informação (anônima) de impressão" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "Mais informações" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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:715 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:781 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Usar funcionalidade de plataforma múltipla de impressão" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:786 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Usar funcionalidade de plataforma múltipla de impressão (reinício requerido)" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "Impressoras" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "Renomear" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419 msgctxt "@title:tab" msgid "Profiles" msgstr "Perfis" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "Criar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "Duplicar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "Criar Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 msgctxt "@info" msgid "Please provide a name for this profile." msgstr "Por favor dê um nome a este perfil." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplicar Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "Renomear Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "Importar Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "Exportar Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Impressora: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420 msgctxt "@label" msgid "Default profiles" msgstr "Perfis default" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420 msgctxt "@label" msgid "Custom profiles" msgstr "Perfis personalizados" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Atualizar perfil com ajustes/sobreposições atuais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "Descartar ajustes atuais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 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 usa os defaults especificados pela impressora, portanto não tem ajustes/sobreposições na lista abaixo." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Seus ajustes atuais coincidem com o perfil selecionado." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "Ajustes globais" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "Mercado" @@ -3622,33 +3518,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "procurar nos ajustes" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Copiar valor para todos os extrusores" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Copiar todos os valores alterados para todos os extrusores" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Ocultar 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 "Don't show this setting" msgstr "Não exibir este ajuste" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Manter este ajuste visível" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configurar a visibilidade dos ajustes..." @@ -3660,36 +3556,36 @@ msgid "" "\n" "Click to make these settings visible." msgstr "" -"Alguns ajustes ocultados usam valores diferentes de seu valor calculado normal.\n" +"Alguns ajustes ocultos usam valores diferentes de seu valor calculado normal.\n" "\n" "Clique para tornar estes ajustes visíveis." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." -msgstr "" +msgstr "Este ajuste não é usado porque todos os ajustes que ele influencia estão sobrepostos." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "Afeta" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Afetado Por" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "Este ajuste é sempre compartilhado entre todos os extrusores. Modificá-lo aqui mudará o valor para todos." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "O valor é resolvido de valores específicos de cada extrusor " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3700,7 +3596,7 @@ msgstr "" "\n" "Clique para restaurar o valor do perfil." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3716,7 +3612,7 @@ msgctxt "@button" msgid "Recommended" msgstr "Recomendado" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "Personalizado" @@ -3741,12 +3637,12 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Gera estrutura que suportarão partes do modelo que têm seções pendentes. Sem estas estruturas, tais partes desabariam durante a impressão." -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "Aderência" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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 imprimir um brim (bainha) ou raft (jangada). Adicionará uma área chata em volta ou sob o objeto que é fácil de remover após a impressão ter finalizado." @@ -3764,7 +3660,7 @@ msgstr "Você modificou alguns ajustes de perfil. Se você quiser alterá-los, u #: /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 "" +msgstr "Este perfil de qualidade não está disponível para seu material e configuração de bico atuais. Por favor, altere-os para habilitar este perfil de qualidade." #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449 msgctxt "@tooltip" @@ -3800,7 +3696,7 @@ 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." -msgstr "" +msgstr "Configuração de Impressão desabilitada. O arquivo de G-Code não pode ser modificado." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:52 msgctxt "@label" @@ -3832,59 +3728,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "Enviar G-Code" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "Enviar comando G-Code personalizado para a impressora conectada. Pressione 'enter' para enviar o comando." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "A temperatura-alvo do hotend. O hotend vai aquecer ou esfriar na direção desta temperatura. Se for zero, o aquecimento de hotend é desligado." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "A temperatura atual deste hotend." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "A temperatura com a qual pré-aquecer o hotend." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "Cancelar" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "Pré-aquecer" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "Aquece o hotend com antecedência antes de imprimir. Você pode continuar ajustando sua impressão enquanto está aquecendo e não terá que esperar que o hotend termine o aquecimento quando estiver pronto para imprimir." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "A cor do material neste extrusor." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "O material neste extrusor." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "O bico inserido neste extrusor." @@ -3929,11 +3825,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "Favoritos" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -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" @@ -3949,32 +3840,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Im&pressora" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "&Material" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Definir Como Extrusor Ativo" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Habilitar Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Desabilitar Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:63 msgctxt "@title:menu" msgid "&Build plate" msgstr "Plataforma de Impressão (&B)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "&Perfil" @@ -3984,7 +3875,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "Posição da &câmera" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "Visão de câmera" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "Perspectiva" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "Ortográfico" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "Plataforma de Impressão (&B)" @@ -4004,17 +3910,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Gerenciar Visibilidade dos Ajustes..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "&Salvar..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "&Exportar..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "Exportar Seleção..." @@ -4086,7 +3992,7 @@ msgstr "Material" #: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml:375 msgctxt "@label" msgid "Use glue for better adhesion with this material combination." -msgstr "" +msgstr "Use cola para melhor aderência com essa combinação de materiais." #: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml:128 msgctxt "@label" @@ -4103,22 +4009,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "Abrir &Recente" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "Impressão ativa" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "Nome do Trabalho" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "Tempo de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "Tempo restante estimado" @@ -4126,12 +4032,17 @@ msgstr "Tempo restante estimado" #: /home/ruben/Projects/Cura/resources/qml/ViewsSelector.qml:50 msgctxt "@label" msgid "View type" -msgstr "" +msgstr "Tipo de Visão" + +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "Lista de objetos" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" -msgstr "" +msgstr "Oi, %1" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:33 msgctxt "@button" @@ -4160,6 +4071,9 @@ msgid "" "- Store your Ultimaker Cura settings in the cloud for use anywhere\n" "- Get exclusive access to print profiles from leading brands" msgstr "" +"- Envia trabalho de impressão às impressoras Ultimaker fora da sua rede local\n" +"- Armazena seus ajustes do Ultimaker Cura na nuvem para uso de qualquer lugar\n" +"- Consegue acesso exclusivo a perfis de impressão das melhores marcas" #: /home/ruben/Projects/Cura/resources/qml/Account/GeneralOperations.qml:78 msgctxt "@button" @@ -4176,32 +4090,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "Sem estimativa de custo disponível" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "Pré-visualização" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Fatiando..." -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" -msgstr "" +msgstr "Não foi possível fatiar" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "Processando" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "Fatiar" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "Inicia o processo de fatiamento" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "Cancelar" @@ -4209,12 +4128,12 @@ msgstr "Cancelar" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:31 msgctxt "@label" msgid "Time estimation" -msgstr "" +msgstr "Estimativa de tempo" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:114 msgctxt "@label" msgid "Material estimation" -msgstr "" +msgstr "Estimativa de material" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:164 msgctxt "@label m for meter" @@ -4236,233 +4155,238 @@ msgctxt "@label" msgid "Preset printers" msgstr "Impressoras pré-ajustadas" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "Adicionar impressora" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "Gerenciar impressoras" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "Mostra Guia de Resolução de Problemas Online" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "Alternar Tela Cheia" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "Sair da Tela Cheia" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "Desfazer (&U)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Refazer" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "Sair (&Q)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "Visão &3D" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "Visão Frontal" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "Visão Superior" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "Visão do Lado Esquerdo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "Visão do Lado Direito" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Configurar Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Adicionar Impressora..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Adm&inistrar Impressoras..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Administrar Materiais..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "At&ualizar perfil com valores e sobreposições atuais" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Descartar ajustes atuais" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&Criar perfil a partir de ajustes/sobreposições atuais..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Administrar perfis..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Exibir &Documentação Online" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Relatar um &Bug" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" -msgstr "" +msgstr "Novidades" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "Sobre..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "Remover Modelo Selecionado" msgstr[1] "Remover Modelos Selecionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Centralizar Modelo Selecionado" msgstr[1] "Centralizar Modelos Selecionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Multiplicar Modelo Selecionado" msgstr[1] "Multiplicar Modelos Selecionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Remover Modelo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Ce&ntralizar Modelo na Mesa" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "A&grupar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Desagrupar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Co&mbinar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Multiplicar Modelo..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Selecionar Todos Os Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Esvaziar a Mesa de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Recarregar Todos Os Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Posicionar Todos os Modelos em Todas as Plataformas de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Posicionar Todos os Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Posicionar Seleção" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Reestabelecer as Posições de Todos Os Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Remover as Transformações de Todos Os Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "Abrir Arquiv&o(s)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Novo Projeto..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Exibir Pasta de Configuração" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "&Mercado" @@ -4477,52 +4401,52 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Este pacote será instalado após o reinício." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "Ajustes" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "Fechando o Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 msgctxt "@label" msgid "Are you sure you want to exit Cura?" msgstr "Você tem certeza que deseja sair do Cura?" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:19 msgctxt "@title:window" msgid "Open file(s)" msgstr "Abrir arquivo(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "Instalar Pacote" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "Abrir Arquivo(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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 "Encontramos um ou mais arquivos de G-Code entre os arquivos que você selecionou. Você só pode abrir um arquivo de G-Code por vez. Se você quiser abrir um arquivo de G-Code, por favor selecione somente um." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "Adicionar Impressora" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" -msgstr "" +msgstr "Novidades" #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 msgctxt "@label %1 is filled in with the name of an extruder" @@ -4744,32 +4668,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Salvar Projeto" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:149 msgctxt "@action:label" msgid "Build plate" msgstr "Plataforma de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extrusor %1" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & material" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" -msgstr "" +msgstr "Material" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Não exibir resumo do projeto ao salvar novamente" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "Salvar" @@ -4802,158 +4726,158 @@ msgstr "Importar modelos" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DropDownWidget.qml:93 msgctxt "@label" msgid "Empty" -msgstr "" +msgstr "Vazio" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:24 msgctxt "@label" msgid "Add a printer" -msgstr "" +msgstr "Adicionar uma impressora" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:39 msgctxt "@label" msgid "Add a networked printer" -msgstr "" +msgstr "Adicionar uma impressora de rede" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:81 msgctxt "@label" msgid "Add a non-networked printer" -msgstr "" +msgstr "Adicionar uma impressora local" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:70 msgctxt "@label" msgid "Add printer by IP address" -msgstr "" +msgstr "Adicionar impressora por endereço IP" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:133 msgctxt "@text" msgid "Place enter your printer's IP address." -msgstr "" +msgstr "Por favor entre o endereço IP da sua impressora." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:158 msgctxt "@button" msgid "Add" -msgstr "" +msgstr "Adicionar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:204 msgctxt "@label" msgid "Could not connect to device." -msgstr "" +msgstr "Não foi possível conectar ao dispositivo." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:208 msgctxt "@label" msgid "The printer at this address has not responded yet." -msgstr "" +msgstr "A impressora neste endereço ainda não respondeu." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:240 msgctxt "@label" msgid "This printer cannot be added because it's an unknown printer or it's not the host of a group." -msgstr "" +msgstr "Esta impressora não pode ser adicionada porque é uma impressora desconhecida ou porque não é o host do grupo." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:329 msgctxt "@button" msgid "Back" -msgstr "" +msgstr "Voltar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:342 msgctxt "@button" msgid "Connect" -msgstr "" +msgstr "Conectar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/FirstStartMachineActionsContent.qml:77 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:123 msgctxt "@button" msgid "Next" -msgstr "" +msgstr "Próximo" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:23 msgctxt "@label" msgid "User Agreement" -msgstr "" +msgstr "Contrato de Usuário" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:56 msgctxt "@button" msgid "Agree" -msgstr "" +msgstr "Concordo" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:70 msgctxt "@button" msgid "Decline and close" -msgstr "" +msgstr "Rejeitar e fechar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:24 msgctxt "@label" msgid "Help us to improve Ultimaker Cura" -msgstr "" +msgstr "Nos ajude a melhor o Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:57 msgctxt "@text" msgid "Ultimaker Cura collects anonymous data to improve print quality and user experience, including:" -msgstr "" +msgstr "O Ultimaker Cura coleta dados anônimos para melhor a qualidade de impressão e experiência do usuário, incluindo:" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:71 msgctxt "@text" msgid "Machine types" -msgstr "" +msgstr "Tipos de máquina" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:77 msgctxt "@text" msgid "Material usage" -msgstr "" +msgstr "Uso do material" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:83 msgctxt "@text" msgid "Number of slices" -msgstr "" +msgstr "Número de fatias" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:89 msgctxt "@text" msgid "Print settings" -msgstr "" +msgstr "Ajustes de impressão" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:102 msgctxt "@text" msgid "Data collected by Ultimaker Cura will not contain any personal information." -msgstr "" +msgstr "Dados coletados pelo Ultimaker Cura não conterão nenhuma informação pessoal." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:103 msgctxt "@text" msgid "More information" -msgstr "" +msgstr "Mais informações" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WhatsNewContent.qml:24 msgctxt "@label" msgid "What's new in Ultimaker Cura" -msgstr "" +msgstr "O que há de novo no Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:42 msgctxt "@label" msgid "There is no printer found over your network." -msgstr "" +msgstr "Não foi encontrada nenhuma impressora em sua rede." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:179 msgctxt "@label" msgid "Refresh" -msgstr "" +msgstr "Atualizar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:190 msgctxt "@label" msgid "Add printer by IP" -msgstr "" +msgstr "Adicionar impressora por IP" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:223 msgctxt "@label" msgid "Troubleshooting" -msgstr "" +msgstr "Resolução de problemas" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" -msgstr "" +msgstr "Nome da impressora" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" -msgstr "" +msgstr "Por favor dê um nome à sua impressora" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:36 msgctxt "@label" @@ -4963,37 +4887,37 @@ msgstr "Ultimaker Cloud" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:77 msgctxt "@text" msgid "The next generation 3D printing workflow" -msgstr "" +msgstr "O fluxo de trabalho da nova geração de impressão 3D" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:94 msgctxt "@text" msgid "- Send print jobs to Ultimaker printers outside your local network" -msgstr "" +msgstr "- Enviar trabalhos de impressão a impressoras Ultimaker fora da sua rede local" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:97 msgctxt "@text" msgid "- Store your Ultimaker Cura settings in the cloud for use anywhere" -msgstr "" +msgstr "- Armazenar seus ajustes do Ultimaker Cura na nuvem para uso em qualquer local" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:100 msgctxt "@text" msgid "- Get exclusive access to print profiles from leading brands" -msgstr "" +msgstr "- Conseguir acesso exclusivo a perfis de impressão das melhores marcas" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:119 msgctxt "@button" msgid "Finish" -msgstr "" +msgstr "Finalizar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:128 msgctxt "@button" msgid "Create an account" -msgstr "" +msgstr "Criar uma conta" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:29 msgctxt "@label" msgid "Welcome to Ultimaker Cura" -msgstr "" +msgstr "Bem-vindo ao Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:47 msgctxt "@text" @@ -5001,26 +4925,13 @@ msgid "" "Please follow these steps to set up\n" "Ultimaker Cura. This will only take a few moments." msgstr "" +"Por favor sigue esses passos para configurar\n" +"o Ultimaker Cura. Isto tomará apenas alguns momentos." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:58 msgctxt "@button" msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "Ver somente a plataforma de impressão atual" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "Posicionar em todas as plataformas de impressão" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "Reposicionar a plataforma de impressão atual" +msgstr "Começar" #: MachineSettingsAction/plugin.json msgctxt "description" @@ -5095,22 +5006,32 @@ msgstr "Modo Deus" #: FirmwareUpdater/plugin.json msgctxt "description" msgid "Provides a machine actions for updating firmware." -msgstr "" +msgstr "Provê ações de máquina para atualização do firmware." #: FirmwareUpdater/plugin.json msgctxt "name" msgid "Firmware Updater" -msgstr "" +msgstr "Atualizador de Firmware" #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattened quality changes profile." -msgstr "" +msgstr "Cria um perfil de mudanças de qualidade achatado." #: ProfileFlattener/plugin.json msgctxt "name" msgid "Profile Flattener" -msgstr "" +msgstr "Achatador de Perfil" + +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "Provê suporta à leitura de arquivos AMF." + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "Leitor AMF" #: USBPrinting/plugin.json msgctxt "description" @@ -5122,16 +5043,6 @@ msgctxt "name" msgid "USB printing" msgstr "Impressão USB" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "Permite salvar a fatia resultante como um arquivo X3G, para suportar impressoras que leem este formato (Malyan, Makerbot e outras impressoras baseadas em Sailfish)." - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "Gerador de X3G" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5174,23 +5085,13 @@ msgstr "Complemento de Dispositivo de Escrita Removível" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Gerencia conexões de rede a impressoras Ultimaker 3." +msgid "Manages network connections to Ultimaker networked printers." +msgstr "Administra conexões de rede a impressora Ultimaker conectadas." #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "Conexão de Rede UM3" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" -msgstr "" +msgid "Ultimaker Network Connection" +msgstr "Conexão de Rede Ultimaker" #: MonitorStage/plugin.json msgctxt "description" @@ -5255,12 +5156,12 @@ msgstr "Apagador de Suporte" #: UFPReader/plugin.json msgctxt "description" msgid "Provides support for reading Ultimaker Format Packages." -msgstr "" +msgstr "Provê suporte a leitura de Pacotes de Formato Ultimaker (UFP)." #: UFPReader/plugin.json msgctxt "name" msgid "UFP Reader" -msgstr "" +msgstr "Leitor UFP" #: SliceInfoPlugin/plugin.json msgctxt "description" @@ -5345,12 +5246,12 @@ msgstr "Atualização de Versão de 2.7 para 3.0" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.5 to Cura 4.0." -msgstr "" +msgstr "Atualiza configuração do Cura 3.5 para o Cura 4.0." #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "name" msgid "Version Upgrade 3.5 to 4.0" -msgstr "" +msgstr "Atualização de Versão de 3.5 para 4.0" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" @@ -5365,12 +5266,12 @@ msgstr "Atualização de Versão de 3.4 para 3.5" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 4.0 to Cura 4.1." -msgstr "" +msgstr "Atualiza configurações do Cura 4.0 para o Cura 4.1." #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "name" msgid "Version Upgrade 4.0 to 4.1" -msgstr "" +msgstr "Atualização de Versão 4.0 para 4.1" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" @@ -5382,6 +5283,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "Atualização de Versão 3.0 para 3.1" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "Atualiza configurações do Cura 4.1 para o Cura 4.2." + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "Atualização de Versão 4.1 para 4.2" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5412,6 +5323,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "Atualização de Versão de 2.2 para 2.4" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "Atualiza configurações do Cura 4.2 para o Cura 4.3." + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "Atualização de Versão de 4.2 para 4.3" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5422,6 +5343,16 @@ msgctxt "name" msgid "Image Reader" msgstr "Leitor de Imagens" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "Provê suporta a ler arquivos de modelo." + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "Leitor Trimesh" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5452,16 +5383,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "Leitor de 3MF" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5485,12 +5406,12 @@ msgstr "Leitor de G-Code" #: CuraDrive/plugin.json msgctxt "description" msgid "Backup and restore your configuration." -msgstr "" +msgstr "Permite backup e restauração da configuração." #: CuraDrive/plugin.json msgctxt "name" msgid "Cura Backups" -msgstr "" +msgstr "Backups Cura" #: CuraProfileWriter/plugin.json msgctxt "description" @@ -5525,12 +5446,12 @@ msgstr "Gerador de 3MF" #: PreviewStage/plugin.json msgctxt "description" msgid "Provides a preview stage in Cura." -msgstr "" +msgstr "Provê uma etapa de pré-visualização ao Cura." #: PreviewStage/plugin.json msgctxt "name" msgid "Preview Stage" -msgstr "" +msgstr "Estágio de Pré-visualização" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -5552,6 +5473,297 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Leitor de Perfis do Cura" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "Conectado pela rede." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "Conectado pela rede. Por favor aprove a requisição de acesso na impressora." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "Conectado pela rede. Sem acesso para controlar a impressora." + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "Acesso à impressora solicitado. Por favor aprove a requisição na impressora" + +#~ msgctxt "@info:title" +#~ msgid "Authentication status" +#~ msgstr "Status da autenticação" + +#~ msgctxt "@info:title" +#~ msgid "Authentication Status" +#~ msgstr "Status da Autenticação" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "Reenvia o pedido de acesso" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "Acesso à impressora confirmado" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "Sem acesso para imprimir por esta impressora. Não foi possível enviar o trabalho de impressão." + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "Solicitar acesso" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "Envia pedido de acesso à impressora" + +#~ msgctxt "@label" +#~ msgid "Unable to start a new print job." +#~ msgstr "Não foi possível iniciar novo trabalho de impressão." + +#~ msgctxt "@label" +#~ msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." +#~ msgstr "Há um problema com a configuração de sua Ultimaker, o que torna impossível iniciar a impressão. Por favor resolva este problema antes de continuar." + +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "Configuração conflitante" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "Tem certeza que quer imprimir com a configuração selecionada?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Há divergências entre a configuração ou calibração da impressora e do Cura. Para melhores resultados, sempre fatie com os PrintCores e materiais que estão carregados em sua impressora." + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "Envio de novos trabalhos (temporariamente) bloqueado, ainda enviando o trabalho de impressão anterior." + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "Enviando dados à impressora" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "Enviando Dados" + +#~ msgctxt "@info:status" +#~ msgid "No Printcore loaded in slot {slot_number}" +#~ msgstr "Printcore não carregado no slot {slot_number}" + +#~ msgctxt "@info:status" +#~ msgid "No material loaded in slot {slot_number}" +#~ msgstr "Nenhum material carregado no slot {slot_number}" + +#~ msgctxt "@label" +#~ msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" +#~ msgstr "PrintCore Diferente (Cura: {cura_printcore_name}, Impressora: {remote_printcore_name}) selecionado para o extrusor {extruder_id}" + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "Material diferente (Cura: {0}, Impressora: {1}) selecionado para o extrusor {2}" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "Sincronizar com a impressora" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "Deseja usar a configuração atual de sua impressora no Cura?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Os PrintCores e/ou materiais da sua impressora diferem dos que estão dentro de seu projeto atual. Para melhores resultados, sempre fatie para os PrintCores e materiais que estão na sua impressora." + +#~ msgctxt "@action:button" +#~ msgid "View in Monitor" +#~ msgstr "Ver no Monitor" + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "{printer_name} acabou de imprimir '{job_name}'." + +#~ msgctxt "@info:status" +#~ msgid "The print job '{job_name}' was finished." +#~ msgstr "O trabalho de impressão '{job_name}' terminou." + +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "Impressão Concluída" + +#~ msgctxt "@label:material" +#~ msgid "Empty" +#~ msgstr "Vazio" + +#~ msgctxt "@label:material" +#~ msgid "Unknown" +#~ msgstr "Desconhecido" + +#~ msgctxt "@info:title" +#~ msgid "Cloud error" +#~ msgstr "Erro de nuvem" + +#~ msgctxt "@info:status" +#~ msgid "Could not export print job." +#~ msgstr "Não foi possível exportar o trabalho de impressão." + +#~ msgctxt "@info:description" +#~ msgid "There was an error connecting to the cloud." +#~ msgstr "Houve um erro ao conectar à nuvem." + +#~ msgctxt "@info:status" +#~ msgid "Uploading via Ultimaker Cloud" +#~ msgstr "Transferindo via Ultimaker Cloud" + +#~ msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." +#~ msgid "Connect to Ultimaker Cloud" +#~ msgstr "Conectar à Ultimaker Cloud" + +#~ msgctxt "@action" +#~ msgid "Don't ask me again for this printer." +#~ msgstr "Não me pergunte novamente para esta impressora." + +#~ msgctxt "@info:status" +#~ msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." +#~ msgstr "Você agora pode enviar e monitorar trabalhoas de impressão de qualquer lugar usando sua conta Ultimaker." + +#~ msgctxt "@info:status" +#~ msgid "Connected!" +#~ msgstr "Conectado!" + +#~ msgctxt "@action" +#~ msgid "Review your connection" +#~ msgstr "Rever sua conexão" + +#~ msgctxt "@info:status Don't translate the XML tags !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "A máquina definida no perfil {0} ({1}) não equivale à sua máquina atual ({2}), não foi possível importá-lo." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "Failed to import profile from {0}:" +#~ msgstr "Erro ao importar perfil de {0}:" + +#~ msgctxt "@window:title" +#~ msgid "Existing Connection" +#~ msgstr "Conexão Existente" + +#~ msgctxt "@message:text" +#~ msgid "This printer/group is already added to Cura. Please select another printer/group." +#~ msgstr "Esta impressora ou grupo já foi adicionada ao Cura. Por favor selecione outra impressora ou grupo." + +#~ msgctxt "@label" +#~ msgid "Enter the IP address or hostname of your printer on the network." +#~ msgstr "Entre o endereço IP ou nome de sua impressora na rede." + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "Conecta a uma impressora" + +#~ msgctxt "@title" +#~ msgid "Cura Settings Guide" +#~ msgstr "Guia de Ajustes do Cura" + +#~ msgctxt "@info:tooltip" +#~ msgid "Zooming towards the mouse is not supported in the orthogonal perspective." +#~ msgstr "Ampliar na direção do mouse não é suportado na perspectiva ortogonal." + +#~ msgid "Orthogonal" +#~ msgstr "Ortogonal" + +#~ msgctxt "description" +#~ msgid "Manages network connections to Ultimaker 3 printers." +#~ msgstr "Gerencia conexões de rede a impressoras Ultimaker 3." + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "Conexão de Rede UM3" + +#~ msgctxt "description" +#~ msgid "Provides extra information and explanations about settings in Cura, with images and animations." +#~ msgstr "Provê informação extra e explicações sobre ajustes do Cura com imagens e animações." + +#~ msgctxt "name" +#~ msgid "Settings Guide" +#~ msgstr "Guia de Ajustes" + +#~ msgctxt "@item:inmenu" +#~ msgid "Cura Settings Guide" +#~ msgstr "Guia de Ajustes do Cura" + +#~ msgctxt "@info:generic" +#~ msgid "Settings have been changed to match the current availability of extruders: [%s]" +#~ msgstr "Os ajustes foram mudados para atender à atual disponibilidade de extrusores: [%s]" + +#~ msgctxt "@title:groupbox" +#~ msgid "User description" +#~ msgstr "Descrição do usuário" + +#~ msgctxt "@info" +#~ msgid "These options are not available because you are monitoring a cloud printer." +#~ msgstr "Estas opçÕes não estão disponíveis porque você está monitorando uma impressora de nuvem." + +#~ msgctxt "@label link to connect manager" +#~ msgid "Go to Cura Connect" +#~ msgstr "Ir ao Cura Connect" + +#~ msgctxt "@info" +#~ msgid "All jobs are printed." +#~ msgstr "Todos os trabalhos foram impressos." + +#~ msgctxt "@label link to connect manager" +#~ msgid "View print history" +#~ msgstr "Ver histórico de impressão" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "Para imprimir diretamente para sua impressora pela rede, por favor se certifique que a impressora esteja conectada na rede usando um cabo de rede ou conectando sua impressora na rede WIFI. Se você não conectar o Cura à sua impressora, você ainda pode usar uma unidade USB para transferir arquivos G-Code para sua impressora.\n" +#~ "\n" +#~ "Selecione sua impressora da lista abaixo:" + +#~ msgctxt "@info" +#~ msgid "" +#~ "Please make sure your printer has a connection:\n" +#~ "- Check if the printer is turned on.\n" +#~ "- Check if the printer is connected to the network." +#~ msgstr "" +#~ "Por favor certifique-se que sua impressora está conectada:\n" +#~ "- Verifique se a impressora está ligada.\n" +#~ "- Verifique se a impressora está conectada à rede." + +#~ msgctxt "@option:check" +#~ msgid "See only current build plate" +#~ msgstr "Ver somente a plataforma de impressão atual" + +#~ msgctxt "@action:button" +#~ msgid "Arrange to all build plates" +#~ msgstr "Posicionar em todas as plataformas de impressão" + +#~ msgctxt "@action:button" +#~ msgid "Arrange current build plate" +#~ msgstr "Reposicionar a plataforma de impressão atual" + +#~ msgctxt "description" +#~ msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." +#~ msgstr "Permite salvar a fatia resultante como um arquivo X3G, para suportar impressoras que leem este formato (Malyan, Makerbot e outras impressoras baseadas em Sailfish)." + +#~ msgctxt "name" +#~ msgid "X3GWriter" +#~ msgstr "Gerador de X3G" + +#~ msgctxt "description" +#~ msgid "Reads SVG files as toolpaths, for debugging printer movements." +#~ msgstr "Lê arquivos SVG como caminhos do extrusor, para depurar movimentos da impressora." + +#~ msgctxt "name" +#~ msgid "SVG Toolpath Reader" +#~ msgstr "Leitor de Toolpath SVG" + #~ msgctxt "@item:inmenu" #~ msgid "Changelog" #~ msgstr "Registro de Alterações" diff --git a/resources/i18n/pt_BR/fdmextruder.def.json.po b/resources/i18n/pt_BR/fdmextruder.def.json.po index fed6da63f1..b5a9dd2070 100644 --- a/resources/i18n/pt_BR/fdmextruder.def.json.po +++ b/resources/i18n/pt_BR/fdmextruder.def.json.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" "PO-Revision-Date: 2019-03-18 11:27+0100\n" "Last-Translator: Cláudio Sampaio \n" "Language-Team: Cláudio Sampaio \n" diff --git a/resources/i18n/pt_BR/fdmprinter.def.json.po b/resources/i18n/pt_BR/fdmprinter.def.json.po index 501c1baeb0..8faf6be4a9 100644 --- a/resources/i18n/pt_BR/fdmprinter.def.json.po +++ b/resources/i18n/pt_BR/fdmprinter.def.json.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" -"PO-Revision-Date: 2019-03-18 11:27+0100\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" +"PO-Revision-Date: 2019-09-22 21:19-0300\n" "Last-Translator: Cláudio Sampaio \n" "Language-Team: Cláudio Sampaio \n" "Language: pt_BR\n" @@ -16,7 +16,7 @@ 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.1.1\n" +"X-Generator: Poedit 2.2.3\n" #: fdmprinter.def.json msgctxt "machine_settings label" @@ -216,6 +216,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "Indica se a plataforma de impressão pode ser aquecida." +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "Tem Estabilização de Temperatura do Volume de Impressão" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "Indica se a máquina consegue estabilizar a temperatura do volume de construção." + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -239,7 +249,7 @@ msgstr "Número de extrusores. Um extrusor é a combinação de um alimentador/t #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders That Are Enabled" -msgstr "" +msgstr "Número de Extrusores Habilitados" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -249,7 +259,7 @@ msgstr "O número de carros extrusores que estão habilitados; automaticamente a #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer Nozzle Diameter" -msgstr "" +msgstr "Diâmetro Externo do Bico" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter description" @@ -259,7 +269,7 @@ msgstr "Diâmetro exterior do bico (a ponta do hotend)." #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle Length" -msgstr "" +msgstr "Comprimento do Bico" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance description" @@ -269,7 +279,7 @@ msgstr "Diferença de altura entre a ponta do bico e a parte mais baixa da cabe #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle Angle" -msgstr "" +msgstr "Ângulo do Bico" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle description" @@ -279,7 +289,7 @@ msgstr "Ângulo entre o plano horizontal e a parte cônica logo acima da ponta d #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat Zone Length" -msgstr "" +msgstr "Comprimento da Zona de Aquecimento" #: fdmprinter.def.json msgctxt "machine_heat_zone_length description" @@ -309,7 +319,7 @@ msgstr "Se a temperatura deve ser controlada pelo Cura. Desligue para controlar #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat Up Speed" -msgstr "" +msgstr "Velocidade de Aquecimento" #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed description" @@ -319,7 +329,7 @@ msgstr "Velocidade (°C/s) pela qual o bico aquece tirada pela média na janela #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool Down Speed" -msgstr "" +msgstr "Velocidade de Resfriamento" #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed description" @@ -338,8 +348,8 @@ msgstr "Tempo mínimo em que um extrusor precisará estar inativo antes que o bi #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" -msgstr "" +msgid "G-code Flavor" +msgstr "Sabor de G-Code" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" @@ -404,7 +414,7 @@ msgstr "Usar ou não comandos de retração de firmware (G10/G11) ao invés de u #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed Areas" -msgstr "" +msgstr "Áreas Proibidas" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" @@ -424,7 +434,7 @@ msgstr "Uma lista de polígonos com áreas em que o bico é proibido de entrar." #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine Head Polygon" -msgstr "" +msgstr "Polígono Da Cabeça da Máquina" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -434,7 +444,7 @@ msgstr "Uma silhueta 2D da cabeça de impressão (sem os suportes de ventoinhas) #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine Head & Fan Polygon" -msgstr "" +msgstr "Polígono da Cabeça com Ventoinha" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -444,7 +454,7 @@ msgstr "Silhueta da cabeça de impressão com os suportes de ventoinhas inclusos #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry Height" -msgstr "" +msgstr "Altura do Eixo" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -474,7 +484,7 @@ msgstr "O diâmetro interior do bico (o orifício). Altere este ajuste quanto es #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset with Extruder" -msgstr "" +msgstr "Deslocamento com o Extrusor" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -1271,6 +1281,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "Canto Mais Agudo" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "Posição da Costura Z" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "A posição perto da qual se inicia a impressão de cada parte em uma camada." + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "Atrás à Esquerda" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "Atrás" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "Atrás à Direita" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "Direita" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "Frente à Direita" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "Frente" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "Frente à Esquerda" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "Esquerda" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1298,8 +1358,8 @@ msgstr "Preferência do Canto da Costura" #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "Controla se cantos no contorno do modelo influenciam a posição da costura. Nenhum significa que cantos não têm influência na posição da costura. Esconder Costura torna mais provável que ela ocorra em um canto interior. Expor Costura torna mais provável que ela ocorra em um canto exterior. Esconder ou Expor Costura torna mais provável que ocorra em um canto, externo ou externo." +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "Controla se os cantos do contorno do modelo influenciam a posição da costura. Nenhum significa que os cantos não terão influência na posição da costura. Ocultar Costura torna mais provável que a costura ocorra em um canto interior. Expôr Costura torna mais provável que a costura ocorra em um canto exterior. Ocultar ou Expôr Costura torna mais provável que a costura ocorra em um canto interior ou exterior. Ocultação Inteligente permite tanto cantos interiores quanto exteriores, mas escolhe os interiores mais frequentemente se apropriado." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1309,17 +1369,22 @@ msgstr "Nenhum" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_inner" msgid "Hide Seam" -msgstr "Esconder Costura" +msgstr "Ocultar Costura" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_outer" msgid "Expose Seam" -msgstr "Expor Costura" +msgstr "Expôr Costura" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" -msgstr "Esconder ou Expor Costura" +msgstr "Ocultar ou Expor Costura" + +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "Ocultação Inteligente" #: fdmprinter.def.json msgctxt "z_seam_relative label" @@ -1333,13 +1398,13 @@ msgstr "Quando habilitado, as coordenadas da costura Z são relativas ao centro #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "Ignorar Pequenas Lacunas em Z" +msgid "No Skin in Z Gaps" +msgstr "Sem Contorno nas Lacunas Z" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "Quando o modelo tem pequenas lacunas verticais, aproximadamente 5% de tempo de computação adicional pode ser gasto ao gerar camada externa superior e inferior nestes espaços estreitos. Em tal caso, desabilite este ajuste." +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "Quando o modelo tem pequenas lacunas verticais de apenas umas poucas camadas, normalmente há contorno em volta dessas camadas no espaço estreito. Habilite este ajuste para não gerar o contorno se a lacuna vertical for bem pequena. Isso melhora o tempo de impressão e fatiamento, mas tecnicamente deixa preenchimento exposto ao ar." #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1358,8 +1423,8 @@ msgstr "Habilitar Passar a Ferro" #: fdmprinter.def.json 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 "Passar sobre a superfície superior depois de impressa, mas sem extrudar material. A idéia é derreter o plástico do topo ainda mais, criando uma superfície mais lisa." +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 "Passa sobre a superfície superior uma vez a mais, mas extrudando muito pouco material. Isto serve para derreter mais o plástico em cima, criando uma superfície lisa. A pressão na câmara do bico é mantida alta tal que as rugas na superfície são preenchidas com material." #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1451,6 +1516,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "A máxima mudança de velocidade instantânea em uma direção com que o recurso de passar a ferro é feito." +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "Porcentagem de Sobreposição do Contorno" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Ajusta a quantidade de sobreposição entre as paredes e (os extremos de) linhas centrais do contorno, como uma porcentagem das larguras de filete de contorno e a parede mais interna. Uma sobreposição leve permite que as paredes se conectem firmemente ao contorno. Note que, dadas uma largura de contorno e filete de parede iguais, qualquer porcentagem acima de 50% pode fazer com que algum contorno ultrapasse a parede, pois a este ponto a posição do bico do extrusor de contorno pode já ter passado do meio da parede." + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "Sobreposição do Contorno" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Ajusta a quantidade de sobreposição entre as paredes e (os extermos de) linhas centrais do contorno. Uma sobreposição pequena permite que as paredes se conectem firmemente ao contorno. Note que, dados uma largura de contorno e filete de parede iguais, qualquer valor maior que metade da largura da parede pode fazer com que o contorno ultrapasse a parede, pois a este ponto a posição do bico do extrusor de contorno pode já ter passado do meio da parede." + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1616,6 +1701,16 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "O padrão de preenchimento é movido por esta distância no eixo Y." +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +msgstr "Aleatorizar o Começo do Preenchimento" + +#: 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 "Aleatoriza qual linha do preenchimento é impressa primeiro. Isto evita que um segmento seja mais forte que os outros, mas ao custo de um percurso adicional." + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1670,26 +1765,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "A quantidade de sobreposição entre o preenchimento e as paredes. Uma leve sobreposição permite que as paredes se conectem firmemente ao preenchimento." -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "Porcentagem de Sobreposição do Contorno" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Ajusta a quantidade de sobreposição entre as paredes e (os extremos de) linhas centrais do contorno, como uma porcentagem das larguras de filete de contorno e a parede mais interna. Uma sobreposição leve permite que as paredes se conectem firmemente ao contorno. Note que, dadas uma largura de contorno e filete de parede iguais, qualquer porcentagem acima de 50% pode fazer com que algum contorno ultrapasse a parede, pois a este ponto a posição do bico do extrusor de contorno pode já ter passado do meio da parede." - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "Sobreposição do Contorno" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Ajusta a quantidade de sobreposição entre as paredes e (os extermos de) linhas centrais do contorno. Uma sobreposição pequena permite que as paredes se conectem firmemente ao contorno. Note que, dados uma largura de contorno e filete de parede iguais, qualquer valor maior que metade da largura da parede pode fazer com que o contorno ultrapasse a parede, pois a este ponto a posição do bico do extrusor de contorno pode já ter passado do meio da parede." - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1873,12 +1948,12 @@ msgstr "A temperatura default usada para a impressão. Esta deve ser a temperatu #: fdmprinter.def.json msgctxt "build_volume_temperature label" msgid "Build Volume Temperature" -msgstr "" +msgstr "Temperatura do Volume de Impressão" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." -msgstr "" +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." +msgstr "A temperatura do ambiente em que imprimir. Se este valor for 0, a temperatura de volume de impressão não será ajustada." #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1990,6 +2065,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "Raio de contração do material em porcentagem." +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "Material Cristalino" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "Este material é do tipo que se destaca completamente quando aquecido (cristalino), ou é o tipo que produz cadeias de polímero entrelaçadas (não-cristalino)?" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "Posição Retraída Anti-escorrimento" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "De quanto o material precisa ser retraído antes que pare de escorrer." + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "Velocidade de Retração Anti-escorrimento" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "Qual a velocidade do material para que seja retraído durante a troca de filamento sem escorrimento." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "Posição Retraída de Preparação de Quebra" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "Quanto o filamento pode ser esticado antes que quebre, quando aquecido." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "Velocidade de Retração de Preparação de Quebra" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "Qual a velocidade do material para que seja retraído antes de quebrar em uma retração." + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "Posição Retraída de Quebra" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "De quanto o filamento deve ser retraído para se destacar completamente." + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "Velocidade de Retração de Quebra" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "A velocidade com a qual retrair o filamento para que se destaque completamente." + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "Temperatura de Quebra" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "A temperatura em que o filamento é destacado completamente." + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -2000,6 +2155,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "Compensação de fluxo: a quantidade de material extrudado é multiplicado por este valor." +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "Fluxo de Parede" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "Compensação de fluxo em filetes das paredes." + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "Fluxo da Parede Externa" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "Compensação de fluxo no filete de parede mais externo." + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "Fluxo da(s) Parede(s) Interna(s)" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "Compensação de fluxo em todos os filetes de parede excetuando o mais externo." + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "Fluxo de Topo/Base" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "Compensação de fluxo em filetes do topo e base." + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "Fluxo do Contorno da Superfície Superior" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "Compensação de Fluxo em filetes das áreas no topo da impressão." + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "Fluxo de Preenchimento" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "Compensação de fluxo em filetes de preenchimento." + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "Fluxo de Skirt/Brim" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "Compensação de Fluxo em filetes de Skirt e Brim." + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "Fluxo de Suporte" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "Compensação de fluxo em filetes de estruturas de suporte." + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "Fluxo de Interface de Suporte" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "Compensação de fluxo em filetes do teto ou base do suporte." + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "Fluxo do Teto de Suporte" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "Compensação de fluxo em filetes do teto de suporte." + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "Fluxo da Base de Suporte" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "Compensação de fluxo nos filetes da base do suporte." + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "Fluxo da Torre de Purga" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "Compensação de fluxo em filetes de torre de purga." + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2117,8 +2392,8 @@ msgstr "Limitar Retrações de Suporte" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." -msgstr "Omitir retrações quando mudar de suporte a suporte em linha reta. Habilitar este ajuste economiza tempo de impressão, mas pode levar a fiapos entremeados à estrutura de suporte." +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." +msgstr "Omitir a retração ao mover de suporte a suporte em linha reta. Habilitar este ajuste economiza tempo de impressão, mas pode levar a fiapos excessivos na estrutura de suporte." #: fdmprinter.def.json msgctxt "material_standby_temperature label" @@ -2170,6 +2445,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "A velocidade em que o filamento é empurrado para a frente depois de uma retração de troca de bico." +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "Quantidade de Avanço Extra da Troca de Bico" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "Material extra a avançar depois da troca de bico." + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2361,14 +2646,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "Velocidade em que o Brim (Bainha) e Skirt (Saia) são impressos. Normalmente isto é feito na velocidade de camada inicial, mas você pode querer imprimi-los em velocidade diferente." #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "Velocidade Máxima em Z" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "Velocidade do Salto Z" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "A velocidade máxima com que o eixo Z é movido. Colocar isto em zero faz com que a impressão use os defaults de firmware para a velocidade máxima de Z." +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "A velocidade em que o movimento Z vertical é feito para os saltos Z. Tipicamente mais baixa que a velocidade de impressão já que mover a mesa de impressão ou eixos da máquina é mais difícil." #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2870,16 +3155,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "A distância entre o bico e as partes já impressas quando evitadas durante o percurso." -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "Iniciar Camadas com a Mesma Parte" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "Em cada camada iniciar imprimindo o objeto próximo ao mesmo ponto, de modo que não comecemos uma nova camada quando imprimir a peça com que a camada anterior terminou. Isso permite seções pendentes e partes pequenas melhores, mas aumenta o tempo de impressão." - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -2943,12 +3218,12 @@ msgstr "Quando a máquina troca de um extrusor para o outro, sobe-se um pouco em #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height label" msgid "Z Hop After Extruder Switch Height" -msgstr "" +msgstr "Salto Z Após Troca de Altura do Extrusor" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height description" msgid "The height difference when performing a Z Hop after extruder switch." -msgstr "" +msgstr "A diferença de altura ao executar um Salto Z após trocar extrusores." #: fdmprinter.def.json msgctxt "cooling label" @@ -3223,7 +3498,7 @@ msgstr "Cruzado" #: fdmprinter.def.json msgctxt "support_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "Giróide" #: fdmprinter.def.json msgctxt "support_wall_count label" @@ -3286,14 +3561,14 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "Distância entre os filetes da camada inicial da camada de suporte. Este ajuste é calculado pela densidade de suporte." #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "Direção de Filete do Preenchimento de Suporte" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." -msgstr "Orientação do padrão de preenchimento para suportes. O padrão de preenchimento do suporte é rotacionado no plano horizontal." +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 "Uma lista de direções inteiras de filete. Elementos da lista são usados sequencialmente à medida que as camadas progridem e quando o fim da lista é alcançado, ela recomeça do início. Os itens da lista são separados por vírgulas e a lista inteira é contida em colchetes. O default é uma lista vazia, o que significa usar o ângulo default de 0 graus." #: fdmprinter.def.json msgctxt "support_brim_enable label" @@ -3422,8 +3697,8 @@ msgstr "Distância de União do Suporte" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." -msgstr "Distância máxima entre as estruturas de suporte nas direções X/Y. Quando estrutura separadas estão mais perto que este valor, as estruturas são combinadas em uma única." +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." +msgstr "A distância máxima entre as estruturas de suporte nas direções X/Y. Quando estruturas separadas estão mais próximas que este valor, elas são fundidas em uma só." #: fdmprinter.def.json msgctxt "support_offset label" @@ -3760,6 +4035,36 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "Quantidade de deslocamento aplicado às bases do suporte." +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +msgstr "Direções do Filete de Interface de Suporte" + +#: 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 "Uma lista de direções inteiras de filete. Elementos da lista são usados sequencialmente à medida que as camadas progridem e quando o fim da lista é alcançado, ela recomeça do início. Os itens da lista são separados por vírgulas e a lista inteira é contida em colchetes. O default é uma lista vazia, o que significa usar os ângulos default (alternando entre 45 e 135 graus se as interfaces forem grossas, ou 90 se não)." + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +msgstr "Direções de Filete do Teto do Suporte" + +#: 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 "Uma lista de direções inteiras de filete. Elementos da lista são usados sequencialmente à medida que as camadas progridem e quando o fim da lista é alcançado, ela recomeça do início. Os itens da lista são separados por vírgulas e a lista inteira é contida em colchetes. O default é uma lista vazia, o que significa usar os ângulos default (alternando entre 45 e 135 graus se as interfaces forem grossas, ou 90 se não)." + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +msgstr "Direções de Filete da Base do Suporte" + +#: 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 "Uma lista de direções inteiras de filete. Elementos da lista são usados sequencialmente à medida que as camadas progridem e quando o fim da lista é alcançado, ela recomeça do início. Os itens da lista são separados por vírgulas e a lista inteira é contida em colchetes. O default é uma lista vazia, o que significa usar os ângulos default (alternando entre 45 e 135 graus se as interfaces forem grossas, ou 90 se não)." + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3801,14 +4106,14 @@ msgid "The diameter of a special tower." msgstr "O diâmetro da torre especial." #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "Diâmetro mínimo" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "Diâmetro Máximo Suportado por Torres" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." -msgstr "Diâmeto mínimo nas direções X/Y de uma área pequena que deverá ser suportada por uma torre de suporte especial." +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "Diâmetro máximo nas direções X e Y da pequena área que será suportada por uma torre especializada de suporte." #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" @@ -3878,7 +4183,7 @@ msgstr "Tipo de Aderência da Mesa de Impressão" #: fdmprinter.def.json msgctxt "adhesion_type description" msgid "Different options that help to improve both priming your extrusion and adhesion to the build plate. Brim adds a single layer flat area around the base of your model to prevent warping. Raft adds a thick grid with a roof below the model. Skirt is a line printed around the model, but not connected to the model." -msgstr "Diferentes opções que ajudam a melhorar a extrusão e a aderência à plataforma de construção. Brim (bainha) adiciona uma camada única e chata em volta da base de seu modelo para impedir warping. Raft (balsa) adiciona uma grade densa com 'teto' abaixo do modelo. Skirt (saia) é uma linha impressa em volta do modelo, mas não conectada ao modelo, para apenas iniciar o processo de extrusão." +msgstr "Diferentes opções que ajudam a melhorar a extrusão e a aderência à plataforma de impressão. Brim (bainha) adiciona uma camada única e chata em volta da base de seu modelo para impedir warping. Raft (balsa) adiciona uma grade densa com 'teto' abaixo do modelo. Skirt (saia) é uma linha impressa em volta do modelo, mas não conectada ao modelo, para apenas iniciar o processo de extrusão." #: fdmprinter.def.json msgctxt "adhesion_type option skirt" @@ -4304,16 +4609,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "Imprimir uma torre próxima à impressão que serve para purgar o material a cada troca de bico." -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "Torre de Prime Circular" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "Faz a torre de prime na forma circular." - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4354,16 +4649,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "A coordenada Y da posição da torre de purga." -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "Fluxo da Torre de Purga" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "Compensação de Fluxo: a quantidade de material extrudado é multiplicado por este valor." - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4377,12 +4662,12 @@ msgstr "Depois de imprimir a torre de purga com um bico, limpar o material escor #: fdmprinter.def.json msgctxt "prime_tower_brim_enable label" msgid "Prime Tower Brim" -msgstr "" +msgstr "Brim da Torre de Purga" #: fdmprinter.def.json msgctxt "prime_tower_brim_enable description" msgid "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type." -msgstr "" +msgstr "Torres de Prime podem precisar de aderência extra dada por um brim mesmo se o modelo não precisar. No momento não pode ser usado com o tipo de aderência 'Raft'." #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4666,8 +4951,8 @@ msgstr "Suavizar Contornos Espiralizados" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." -msgstr "Suaviza os contornos espiralizados para reduzir a visibilidade da costura em Z (esta costura será quase invisível na impressão mas ainda pode ser vista na visão de camadas). Note que suavizar tenderá a remover detalhes finos de superfície." +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgstr "Suavizar os contornos espiralizados para reduzir a visibilidade da costura Z (a costura Z deve ser quase invisível na impressão mas ainda será visível na visão de camadas). Note que a suavização tenderá a embaçar detalhes finos de superfície." #: fdmprinter.def.json msgctxt "relative_extrusion label" @@ -4902,12 +5187,12 @@ msgstr "O tamanho mínimo de um segmento de linha de percurso após o fatiamento #: fdmprinter.def.json msgctxt "meshfix_maximum_deviation label" msgid "Maximum Deviation" -msgstr "" +msgstr "Desvio Máximo" #: 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." -msgstr "" +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 "O desvio máximo permitido ao reduzir a resolução para o ajuste de Máxima Resolução. Se você aumentar isto, a impressão será menos precisa, mas o G-Code será menor. O Desvio Máximo é um limite para Resolução Máxima, portanto se os dois conflitarem o Desvio Máximo sempre será o valor dominante." #: fdmprinter.def.json msgctxt "support_skip_some_zags label" @@ -5166,8 +5451,8 @@ msgstr "Habilitar Suporte Cônico" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "Recurso experimental: Faz as áreas de suporte menores na base que na seção pendente." +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "Faz as áreas de suporte menores na base que na seção pendente." #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5511,7 +5796,7 @@ msgstr "Distância entre o bico e os filetes descendentes horizontais. Espaços #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled label" msgid "Use Adaptive Layers" -msgstr "" +msgstr "Usar Camadas Adaptativas" #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled description" @@ -5521,7 +5806,7 @@ msgstr "Camadas adaptativas fazem a computação das alturas de camada depender #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation label" msgid "Adaptive Layers Maximum Variation" -msgstr "" +msgstr "Máximo Variação das Camadas Adaptativas" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" @@ -5531,7 +5816,7 @@ msgstr "A variação de altura máxima permitida para a camada de base." #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" msgid "Adaptive Layers Variation Step Size" -msgstr "" +msgstr "Tamanho de Passo da Variação das Camadas Adaptativas" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step description" @@ -5541,7 +5826,7 @@ msgstr "A diferença em tamanho da próxima camada comparada à anterior." #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold label" msgid "Adaptive Layers Threshold" -msgstr "" +msgstr "Limite das Camadas Adaptativas" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" @@ -5761,152 +6046,192 @@ msgstr "Porcentagem da velocidade da ventoinha a usar quando se imprimir a terce #: fdmprinter.def.json msgctxt "clean_between_layers label" msgid "Wipe Nozzle Between Layers" -msgstr "" +msgstr "Limpar o Bico Entre Camadas" #: fdmprinter.def.json msgctxt "clean_between_layers description" msgid "Whether to include nozzle wipe G-Code between layers. Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working." -msgstr "" +msgstr "Incluir ou não o G-Code para movimento de limpeza de bico (wipe) entre camadas. Habilitar este ajuste pode influenciar o comportamento de retração na mudança de camadas. Por favor use os ajustes de Retração de Limpeza para controlar retração nas camadas onde o script de limpeza funcionará." #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe label" msgid "Material Volume Between Wipes" -msgstr "" +msgstr "Volume de Material Entre Limpezas" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe description" msgid "Maximum material, that can be extruded before another nozzle wipe is initiated." -msgstr "" +msgstr "Material máximo que pode ser extrudado antes que outra limpeza do bico seja iniciada." #: fdmprinter.def.json msgctxt "wipe_retraction_enable label" msgid "Wipe Retraction Enable" -msgstr "" +msgstr "Habilitar Retração de Limpeza" #: fdmprinter.def.json msgctxt "wipe_retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area." -msgstr "" +msgstr "Retrair o filamento quando o bico se mover sobre uma área não impressa." #: fdmprinter.def.json msgctxt "wipe_retraction_amount label" msgid "Wipe Retraction Distance" -msgstr "" +msgstr "Distância de Retração da Limpeza" #: fdmprinter.def.json msgctxt "wipe_retraction_amount description" msgid "Amount to retract the filament so it does not ooze during the wipe sequence." -msgstr "" +msgstr "Quantidade a retrair do filamento tal que ele não escorra durante a sequência de limpeza." #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount label" msgid "Wipe Retraction Extra Prime Amount" -msgstr "" +msgstr "Quantidade Extra de Purga da Retração de Limpeza" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount description" msgid "Some material can ooze away during a wipe travel moves, which can be compensated for here." -msgstr "" +msgstr "Um pouco de material pode escorrer durante os movimentos do percurso de limpeza e isso pode ser compensado neste ajuste." #: fdmprinter.def.json msgctxt "wipe_retraction_speed label" msgid "Wipe Retraction Speed" -msgstr "" +msgstr "Velocidade da Retração de Limpeza" #: fdmprinter.def.json msgctxt "wipe_retraction_speed description" msgid "The speed at which the filament is retracted and primed during a wipe retraction move." -msgstr "" +msgstr "A velocidade com que o filamento é retraído e purgado durante um movimento de limpeza de retração." #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed label" msgid "Wipe Retraction Retract Speed" -msgstr "" +msgstr "Velocidade da Retração da Retração de Limpeza" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed description" msgid "The speed at which the filament is retracted during a wipe retraction move." -msgstr "" +msgstr "A velocidade com que o filamento é retraído durante um movimento de retração de limpeza." #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "Velocidade de Purga da Retração" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed description" msgid "The speed at which the filament is primed during a wipe retraction move." -msgstr "" +msgstr "A velocidade com que o filamento é purgado durante um movimento de retração de limpeza." #: fdmprinter.def.json msgctxt "wipe_pause label" msgid "Wipe Pause" -msgstr "" +msgstr "Pausa de Limpeza" #: fdmprinter.def.json msgctxt "wipe_pause description" msgid "Pause after the unretract." -msgstr "" +msgstr "Pausa após desfazimento da retração." #: fdmprinter.def.json msgctxt "wipe_hop_enable label" msgid "Wipe Z Hop When Retracted" -msgstr "" +msgstr "Salto Z da Limpeza Quando Retraída" #: fdmprinter.def.json msgctxt "wipe_hop_enable description" msgid "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." -msgstr "" +msgstr "Sempre que uma retração é feita, a posição Z do extrusor é aumentada para aumentar a distância entre o bico e a impressão. Isso evita que o bico bata na impressão durante movimentos de percurso, reduzindo a chance de descolar a impressão da plataforma." #: fdmprinter.def.json msgctxt "wipe_hop_amount label" msgid "Wipe Z Hop Height" -msgstr "" +msgstr "Altura do Salto Z da Limpeza" #: fdmprinter.def.json msgctxt "wipe_hop_amount description" msgid "The height difference when performing a Z Hop." -msgstr "" +msgstr "A diferença de altura ao executar um Salto Z." #: fdmprinter.def.json msgctxt "wipe_hop_speed label" msgid "Wipe Hop Speed" -msgstr "" +msgstr "Velocidade do Salto de Limpeza" #: fdmprinter.def.json msgctxt "wipe_hop_speed description" msgid "Speed to move the z-axis during the hop." -msgstr "" +msgstr "Velocidade com que mover o eixo Z durante o salto." #: fdmprinter.def.json msgctxt "wipe_brush_pos_x label" msgid "Wipe Brush X Position" -msgstr "" +msgstr "Posição X da Varredura de Limpeza" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x description" msgid "X location where wipe script will start." -msgstr "" +msgstr "Localização X onde o script de limpeza iniciará." #: fdmprinter.def.json msgctxt "wipe_repeat_count label" msgid "Wipe Repeat Count" -msgstr "" +msgstr "Contagem de Repetições de Limpeza" #: fdmprinter.def.json msgctxt "wipe_repeat_count description" msgid "Number of times to move the nozzle across the brush." -msgstr "" +msgstr "Número de vezes com que mover o bico através da varredura." #: fdmprinter.def.json msgctxt "wipe_move_distance label" msgid "Wipe Move Distance" -msgstr "" +msgstr "Distância de Movimentação da Limpeza" #: fdmprinter.def.json msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." -msgstr "" +msgstr "A distância com que mover a cabeça pra frente e pra trás durante a varredura." + +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "Tamanho Máximo de Furos Pequenos" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "Furos e contornos de partes com diâmetro menor que este serão impressos usando a Velocidade de Aspecto Pequeno." + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "Comprimento Máximo do Aspecto Pequeno" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "Contornos de aspectos menores que este comprimento serão impressos usando a Velocidade de Aspecto Pequeno." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +msgstr "Velocidade de Aspecto Pequeno" + +#: 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 "Pequenos aspectos serão impressos com esta porcentagem de sua velocidade normal de impressão. Impressão mais lenta pode ajudar com aderência e precisão." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor_0 label" +msgid "First Layer Speed" +msgstr "Velocidade da Primeira Camada" + +#: 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 "Aspectos pequenos na primeira camada serão impressos nesta porcentagem de sua velocidade normal de impressão. Impressão mais lenta pode ajudar com aderência e precisão." #: fdmprinter.def.json msgctxt "command_line_settings label" @@ -5968,6 +6293,90 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Matriz de transformação a ser aplicada ao modelo após o carregamento do arquivo." +#~ 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 "Passar sobre a superfície superior depois de impressa, mas sem extrudar material. A idéia é derreter o plástico do topo ainda mais, criando uma superfície mais lisa." + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "Iniciar Camadas com a Mesma Parte" + +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "Em cada camada iniciar imprimindo o objeto próximo ao mesmo ponto, de modo que não comecemos uma nova camada quando imprimir a peça com que a camada anterior terminou. Isso permite seções pendentes e partes pequenas melhores, mas aumenta o tempo de impressão." + +#~ msgctxt "support_infill_angles description" +#~ msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +#~ msgstr "Orientação do padrão de preenchimento para suportes. O padrão de preenchimento do suporte é rotacionado no plano horizontal." + +#~ 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." +#~ msgstr "O valor máximo de desvio permitido ao reduzir a resolução para o ajuste de Resolução Máxima. Se você aumenta este número, a impressão terá menos acuidade, mas o G-Code será menor." + +#~ msgctxt "machine_gcode_flavor label" +#~ msgid "G-code Flavour" +#~ msgstr "Sabor de G-Code" + +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "Controla se cantos no contorno do modelo influenciam a posição da costura. Nenhum significa que cantos não têm influência na posição da costura. Esconder Costura torna mais provável que ela ocorra em um canto interior. Expor Costura torna mais provável que ela ocorra em um canto exterior. Esconder ou Expor Costura torna mais provável que ocorra em um canto, externo ou externo." + +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "Ignorar Pequenas Lacunas em Z" + +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "Quando o modelo tem pequenas lacunas verticais, aproximadamente 5% de tempo de computação adicional pode ser gasto ao gerar camada externa superior e inferior nestes espaços estreitos. Em tal caso, desabilite este ajuste." + +#~ msgctxt "build_volume_temperature description" +#~ msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +#~ msgstr "A temperatura usada para o volume de construção. Se o valor for zero, a temperatura de volume de impressão não será ajustada." + +#~ msgctxt "limit_support_retractions description" +#~ msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +#~ msgstr "Omitir retrações quando mudar de suporte a suporte em linha reta. Habilitar este ajuste economiza tempo de impressão, mas pode levar a fiapos entremeados à estrutura de suporte." + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "Velocidade Máxima em Z" + +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "A velocidade máxima com que o eixo Z é movido. Colocar isto em zero faz com que a impressão use os defaults de firmware para a velocidade máxima de Z." + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "Distância máxima entre as estruturas de suporte nas direções X/Y. Quando estrutura separadas estão mais perto que este valor, as estruturas são combinadas em uma única." + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "Diâmetro mínimo" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "Diâmeto mínimo nas direções X/Y de uma área pequena que deverá ser suportada por uma torre de suporte especial." + +#~ msgctxt "prime_tower_circular label" +#~ msgid "Circular Prime Tower" +#~ msgstr "Torre de Purga Circular" + +#~ msgctxt "prime_tower_circular description" +#~ msgid "Make the prime tower as a circular shape." +#~ msgstr "Faz a torre de purga na forma circular." + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "Compensação de Fluxo: a quantidade de material extrudado é multiplicado por este valor." + +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "Suaviza os contornos espiralizados para reduzir a visibilidade da costura em Z (esta costura será quase invisível na impressão mas ainda pode ser vista na visão de camadas). Note que suavizar tenderá a remover detalhes finos de superfície." + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "Recurso experimental: Faz as áreas de suporte menores na base que na seção pendente." + #~ msgctxt "extruders_enabled_count label" #~ msgid "Number of Extruders that are enabled" #~ msgstr "Número de Extrusores habilitados" diff --git a/resources/i18n/pt_PT/cura.po b/resources/i18n/pt_PT/cura.po index c74c0fc65a..13f2b75135 100644 --- a/resources/i18n/pt_PT/cura.po +++ b/resources/i18n/pt_PT/cura.po @@ -5,12 +5,12 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" -"PO-Revision-Date: 2019-03-14 14:15+0100\n" -"Last-Translator: Portuguese \n" -"Language-Team: Paulo Miranda , Portuguese \n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" +"PO-Revision-Date: 2019-07-29 15:51+0100\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Portuguese , Paulo Miranda , Portuguese \n" "Language: pt_PT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.0.7\n" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "Definições da Máquina" @@ -89,36 +89,45 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "O perfil foi nivelado & ativado." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "Ficheiro AMF" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "Impressão USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Imprimir por USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Imprimir por USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "Ligado via USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "Existe uma impressão por USB em curso; fechar o Cura irá interromper esta impressão. Tem a certeza?" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 -msgctxt "X3G Writer File Description" -msgid "X3G File" -msgstr "Ficheiro X3G" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "Existe uma impressão em curso. O Cura não consegue iniciar outra impressão via USB até a impressão anterior ser concluída." + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "Print in Progress" +msgstr "Impressão em curso" #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16 msgctxt "X3g Writer Plugin Description" @@ -130,6 +139,11 @@ msgctxt "X3g Writer File Description" msgid "X3g File" msgstr "Ficheiro X3g" +#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 +msgctxt "X3G Writer File Description" +msgid "X3G File" +msgstr "Ficheiro X3G" + #: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17 #: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17 msgctxt "@item:inlistbox" @@ -166,7 +180,7 @@ msgstr "Guardar no Disco Externo {0}" # rever! # contexto #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Não existem quaisquer formatos disponíveis para gravar o ficheiro!" @@ -203,10 +217,9 @@ msgid "Could not save to removable drive {0}: {1}" msgstr "Não foi possível guardar no Disco Externo {0}: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "Erro" @@ -238,9 +251,9 @@ msgstr "Ejetar Disco Externo {0}" # Atenção? #: /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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "Aviso" @@ -267,356 +280,149 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Disco Externo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "Imprimir através da rede" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "Imprimir através da rede" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "Ligado através da rede." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "Ligado através da rede. Por favor aprove o pedido de acesso, na impressora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "Ligado através da rede. Sem autorização para controlar a impressora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "Acesso à impressora solicitado. Por favor aprove o pedido de acesso, na impressora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "Estado da autenticação" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "Estado da autenticação" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "Tentar de Novo" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "Reenviar a solicitação de acesso" - -# rever! -# aceite? -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "Acesso à impressora confirmado" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "Sem autorização para imprimir com esta impressora. Não foi possível enviar o trabalho de impressão." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "Solicitar Acesso" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "Enviar pedido de acesso para a impressora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "Não é possível iniciar um novo trabalho de impressão." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "Existe um problema com a configuração da sua Ultimaker, o qual impede o inicio da impressão. Por favor resolva este problema antes de continuar." - -# rever! -# ver contexto! pode querer dizer -# Configuração incompatível -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "Divergência de Configuração" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "Tem a certeza de que deseja imprimir com a configuração selecionada?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Existe uma divergência entre a configuração ou calibração da impressora e o Cura. Para se obter os melhores resultados, o seccionamento (no Cura) deve ser sempre feito para os núcleos de impressão e para os materiais que estão introduzidos na impressora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "O envio de novos trabalhos está (temporariamente) bloqueado; o trabalho de impressão anterior ainda está a ser enviado." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "A enviar dados para a impressora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "A Enviar Dados" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Cancelar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "Nenhum PrintCore instalado na ranhura {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "Nenhum material carregado na ranhura {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "PrintCore diferente (Cura: {cura_printcore_name}, Impressora: {remote_printcore_name}) selecionado para o extrusor {extruder_id}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "Material diferente (Cura: {0}, Impressora: {1}) selecionado para o extrusor {2}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "Sincronizar com a impressora" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "Deseja utilizar a configuração atual da impressora no Cura?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Os núcleos de impressão e/ou materiais na sua impressora são diferentes dos definidos no seu projeto atual. Para se obter os melhores resultados, o seccionamento (no Cura) deve ser sempre feito para os núcleos de impressão e para os materiais que estão introduzidos na impressora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "Ligado através da rede" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "O trabalho de impressão foi enviado com sucesso para a impressora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "Dados Enviados" - -# rever! -# contexto -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "Ver no Monitor" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "A impressora {printer_name} terminou a impressão de \"{job_name}\"." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "O trabalho de impressão '{job_name}' terminou." - -# rever! -# Concluída? -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "Impressão terminada" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "Vazio" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "Desconhecido" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "Imprimir através da cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "Imprimir através da cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "Ligada através da cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "Erro da cloud" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "Não foi possível exportar o trabalho de impressão." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "Não foi possível carregar os dados para a impressora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "amanhã" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "hoje" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "Ocorreu um erro na ligação à cloud." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Envie e monitorize trabalhos de impressão a partir de qualquer lugar através da sua conta Ultimaker." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "Não perguntar novamente sobre esta impressora." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "Iniciar" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Agora pode enviar e monitorizar trabalhos de impressão a partir de qualquer lugar através da sua conta Ultimaker." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "Ligada!" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "Reveja a sua ligação" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Ligar Através da Rede" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" -msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +msgctxt "@action:button Preceded by 'Ready to'." +msgid "Print over network" +msgstr "Imprimir através da rede" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "Imprimir através da rede" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "Ligado através da rede" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "Aguarde até o trabalho atual ter sido enviado." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "Erro de impressão" + +#: /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 "Está a tentar ligar a {0}, mas esta não é Host de um grupo. Pode visitar a página Web para a configurar como Host do grupo." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "Não é Host do grupo" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "Configurar grupo" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "Envie e monitorize trabalhos de impressão a partir de qualquer lugar através da sua conta Ultimaker." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "Ligar à cloud da Ultimaker" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "Iniciar" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "A enviar trabalho de impressão" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "Carregar um trabalho de impressão na impressora." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "O trabalho de impressão foi enviado com sucesso para a impressora." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "Dados Enviados" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "Está a tentar ligar a uma impressora que não tem o Ultimaker Connect. Atualize a impressora para o firmware mais recente." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "Atualizar a impressora" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "O Cura detetou perfis de material que ainda não estavam instalados na impressora que aloja o grupo {0}." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "Enviar materiais para a impressora" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "Não foi possível carregar os dados para a impressora." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "Erro de rede" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "amanhã" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "hoje" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "Imprimir através da cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "Imprimir através da cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" +msgstr "Ligada através da cloud" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Monitorizar" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "Não foi possível aceder às informações de atualização." @@ -643,12 +449,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Vista Camadas" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Quando a opção \"Wire Printing\" está ativa, o Cura não permite visualizar as camadas de uma forma precisa" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "Visualização por Camadas" @@ -703,6 +509,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "Imagem GIF" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "Open Compressed Triangle Mesh" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "COLLADA Digital Asset Exchange" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "glTF Binary" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "glTF Embedded JSON" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "Stanford Triangle Format" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "Compressed COLLADA Digital Asset Exchange" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -739,7 +575,7 @@ msgstr "Não é possível seccionar porque a torre de preparação ou a(s) posi #, python-format msgctxt "@info:status" msgid "Unable to slice because there are objects associated with disabled Extruder %s." -msgstr "Não é possível seccionar porque existem objetos associados à extrusora %s desativada." +msgstr "Não é possível seccionar porque existem objetos associados ao extrusor %s desativado." #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:412 msgctxt "@info:status" @@ -783,19 +619,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Ficheiro 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "Nozzle" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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 "O ficheiro de projeto {0} contém um tipo de máquina desconhecido {1}. Não é possível importar a máquina. Em vez disso, serão importados os modelos." -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "Abrir ficheiro de projeto" @@ -810,18 +646,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Ficheiro G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "A analisar G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "Detalhes do G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Certifique-se de que este g-code é apropriado para a sua impressora e respetiva configuração, antes de enviar o ficheiro para a impressora. A representação do g-code poderá não ser exata." @@ -924,16 +760,16 @@ msgstr "Falha no início de sessão" #: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33 msgctxt "@info:not supported profile" msgid "Not supported" -msgstr "" +msgstr "Não suportado" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 msgctxt "@title:window" msgid "File Already Exists" msgstr "O Ficheiro Já Existe" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:204 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -946,116 +782,109 @@ msgid "Invalid file URL:" msgstr "URL de ficheiro inválido:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" -msgstr "As definições foram alteradas de forma a corresponder aos extrusores disponíveis de momento: [%s]" +msgctxt "@info:message Followed by a list of settings." +msgid "Settings have been changed to match the current availability of extruders:" +msgstr "As definições foram alteradas de forma a corresponder aos extrusores disponíveis de momento:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:926 msgctxt "@info:title" msgid "Settings updated" msgstr "Definições atualizadas" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "Extrusor(es) desativado(s)" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to export profile to {0}: {1}" msgstr "Falha ao exportar perfil para {0}: {1}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to export profile to {0}: Writer plugin reported failure." msgstr "Falha ao exportar perfil para {0}: O plug-in de gravação comunicou uma falha." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Exported profile to {0}" msgstr "Perfil exportado para {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "Exportação bem-sucedida" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "Failed to import profile from {0}: {1}" msgstr "Falha ao importar perfil de {0}: {1}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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 "Não é possível importar o perfil de {0} antes de ser adicionada uma impressora." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" msgstr "Nenhum perfil personalizado para importar no ficheiro {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "Failed to import profile from {0}:" msgstr "Falha ao importar perfil de {0}:" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." msgstr "O perfil {0} contém dados incorretos, não foi possível importá-lo." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "A máquina definida no perfil {0} ({1}) não corresponde à sua máquina atual ({2}), não foi possível importá-la." - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to import profile from {0}:" msgstr "Falha ao importar perfil de {0}:" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Perfil {0} importado com êxito" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "O ficheiro {0} não contém qualquer perfil válido." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "O perfil {0} é de um formato de ficheiro desconhecido ou está corrompido." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "Perfil personalizado" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "O perfil não inclui qualquer tipo de qualidade." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1104,7 +933,7 @@ msgstr "Contorno" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:84 msgctxt "@tooltip" msgid "Prime Tower" -msgstr "" +msgstr "Torre de preparação" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:85 msgctxt "@tooltip" @@ -1133,7 +962,7 @@ msgctxt "@action:button" msgid "Next" msgstr "Seguinte" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1141,22 +970,36 @@ msgstr "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/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "Fechar" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" msgstr "Adicionar" +#: /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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Cancelar" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1175,23 +1018,22 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Todos os Ficheiros (*)" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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 "Desconhecido" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" -msgstr "" +msgstr "Não é possível ligar a(s) impressora(s) abaixo porque faz(em) parte de um grupo" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" -msgstr "" +msgstr "Impressoras em rede disponíveis" #: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689 msgctxt "@label" @@ -1204,12 +1046,12 @@ msgctxt "@label" msgid "Custom" msgstr "Personalizado" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "A altura do volume de construção foi reduzida devido ao valor da definição \"Sequência de impressão\" para impedir que o pórtico colida com os modelos impressos." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "Volume de construção" @@ -1227,46 +1069,51 @@ msgstr "Tentou restaurar um Cura backup sem existirem dados ou metadados correct #: /home/ruben/Projects/Cura/cura/Backups/Backup.py:125 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that is higher than the current version." -msgstr "" +msgstr "Tentativa de reposição de uma cópia de segurança do Cura que é superior à versão atual." #: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationHelpers.py:79 msgctxt "@message" msgid "Could not read response." -msgstr "" +msgstr "Não foi possível ler a resposta." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 msgctxt "@info" msgid "Unable to reach the Ultimaker account server." msgstr "Não é possível aceder ao servidor da conta Ultimaker." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:66 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:202 +msgctxt "@action:button" +msgid "Retry" +msgstr "Tentar de Novo" + +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:70 msgctxt "@message" msgid "Please give the required permissions when authorizing this application." -msgstr "" +msgstr "Forneça as permissões necessárias ao autorizar esta aplicação." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "Ocorreu algo inesperado ao tentar iniciar sessão, tente novamente." -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "Multiplicar e posicionar objetos" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "A posicionar objetos" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Não é possível posicionar todos os objetos dentro do volume de construção" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "A Posicionar Objeto" @@ -1325,7 +1172,7 @@ msgstr "Mostrar relatório de falhas detalhado" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:105 msgctxt "@action:button" msgid "Show configuration folder" -msgstr "Abrir pasta de configuração" +msgstr "Mostrar pasta de configuração" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:116 msgctxt "@action:button" @@ -1420,48 +1267,48 @@ msgstr "Relatórios" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" -msgstr "Descrição do utilizador" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" +msgstr "Descrição do utilizador (Nota: os programadores podem não falar a sua língua, pelo que, se possível, deve utilizar o inglês)" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "Enviar relatório" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "A carregar máquinas..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "A configurar cenário..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "A carregar interface..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "Apenas pode ser carregado um ficheiro G-code de cada vez. Importação {0} ignorada" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "Não é possível abrir outro ficheiro enquanto o G-code estiver a carregar. Importação {0} ignorada" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "O modelo selecionado era demasiado pequeno para carregar." @@ -1469,103 +1316,108 @@ msgstr "O modelo selecionado era demasiado pequeno para carregar." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58 msgctxt "@title:label" msgid "Printer Settings" -msgstr "" +msgstr "Definições da impressora" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X (Largura)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Profundidade)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Altura)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "Forma da base de construção" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" -msgstr "" +msgstr "Origem no centro" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" -msgstr "" +msgstr "Base aquecida" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "Volume de construção aquecido" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "Variante do G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" -msgstr "" +msgstr "Definições da cabeça de impressão" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X mín" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y mín" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "X máx" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "Y máx" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" -msgstr "" +msgstr "Altura do pórtico" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "Número de Extrusores" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" -msgstr "" +msgstr "G-code inicial" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" -msgstr "" +msgstr "G-code final" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:42 msgctxt "@title:tab" @@ -1575,7 +1427,7 @@ msgstr "Impressora" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:63 msgctxt "@title:label" msgid "Nozzle Settings" -msgstr "" +msgstr "Definições do nozzle" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:75 msgctxt "@label" @@ -1592,25 +1444,25 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "Desvio X do Nozzle" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Desvio Y do Nozzle" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "Número de ventoinha de arrefecimento" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" -msgstr "" +msgstr "G-code inicial do extrusor" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" -msgstr "" +msgstr "G-code final do extrusor" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 msgctxt "@action:button" @@ -1618,7 +1470,7 @@ msgid "Install" msgstr "Instalar" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "Instalado" @@ -1633,16 +1485,16 @@ msgctxt "@label" msgid "ratings" msgstr "classificações" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "Plug-ins" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "Materiais" @@ -1652,49 +1504,49 @@ msgctxt "@label" msgid "Your rating" msgstr "A sua classificação" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "Versão" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "Actualizado em" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "Autor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "Transferências" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "É necessário Log in para instalar ou atualizar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" -msgstr "" +msgstr "Comprar bobinas de material" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "Atualizar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "A Actualizar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1755,17 +1607,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "Sair do Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "Contribuições comunitárias" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "Plug-ins comunitários" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "Materiais genéricos" @@ -1826,27 +1678,52 @@ msgctxt "@label" msgid "Featured" msgstr "Em Destaque" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "Compatibilidade" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +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" +msgstr "Base de construção" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "Suportes" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "Qualidade" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "Ficha técnica" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "Ficha de segurança" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "Instruções de impressão" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "Site" @@ -1947,70 +1824,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "A atualização de firmware falhou devido à ausência de firmware." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "Gerir impressora" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "Vidro" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." -msgstr "Estas opções não estão disponíveis pois está a monitorizar uma impressora na cloud." +msgid "Please update your printer's firmware to manage the queue remotely." +msgstr "Atualize o firmware da impressora para gerir a fila remotamente." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "Esta webcam não está disponível pois está a monitorizar uma impressora na cloud." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "A carregar..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "Indisponível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "Inacessível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "Inativa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "Sem título" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "Anónimo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "Requer alterações na configuração" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "Detalhes" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "Impressora indisponível" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "Primeira disponível" @@ -2020,199 +1903,182 @@ msgctxt "@label" msgid "Queued" msgstr "Em fila" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" -msgstr "Ir para o Cura Connect" +msgid "Manage in browser" +msgstr "Gerir no browser" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "Não existem trabalhos de impressão na fila. Para adicionar um trabalho, seccione e envie." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "Trabalhos em Impressão" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "Tempo de impressão total" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "A aguardar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "Ver histórico de impressão" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "Ligação Existente" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "Esta impressora/grupo já foi adicionada ao Cura. Por favor selecione outra impressora/grupo." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Ligar a uma Impressora em Rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" -msgstr "" -"Para imprimir diretamente para a sua impressora através da rede, certifique-se de que a sua impressora está ligada à rede por meio de um cabo de rede ou através de ligação à rede Wi-Fi. Se não ligar o Cura por rede à impressora, poderá ainda assim utilizar uma unidade USB para transferir ficheiros g-code para a impressora.\n" -"\n" -"Selecione a sua impressora na lista em baixo:" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." +msgstr "Para imprimir diretamente para a sua impressora através da rede, certifique-se de que a impressora está ligada à rede através de um cabo de rede ou através de ligação à rede Wi-Fi. Se não ligar o Cura por rede à impressora, poderá ainda assim utilizar uma unidade USB para transferir ficheiros g-code para a impressora." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "Selecione a impressora a partir da lista abaixo:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "Editar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "Remover" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "Atualizar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Se a sua impressora não estiver na lista, por favor, consulte o guia de resolução de problemas de impressão em rede" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "Tipo" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:274 msgctxt "@label" msgid "Firmware version" msgstr "Versão de Firmware" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:290 msgctxt "@label" msgid "Address" msgstr "Endereço" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 msgctxt "@label" msgid "This printer is not set up to host a group of printers." msgstr "Esta impressora não está configurada para alojar um grupo de impressoras." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 msgctxt "@label" msgid "This printer is the host for a group of %1 printers." msgstr "Esta impressora aloja um grupo de %1 impressoras." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "A impressora neste endereço ainda não respondeu." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "Ligar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" -msgstr "" +msgstr "Endereço IP inválido" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146 msgctxt "@text" msgid "Please enter a valid IP address." -msgstr "" +msgstr "Introduza um endereço IP válido." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "Endereço da Impressora" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." -msgstr "" +msgid "Enter the IP address of your printer on the network." +msgstr "Introduza o endereço IP da sua impressora na rede." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "Cancelado" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "Impressão terminada" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "A preparar..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "A cancelar..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "A colocar em pausa..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "Em Pausa" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "A recomeçar..." # rever! # ver contexto! -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "Ação necessária" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "Termina %1 a %2" @@ -2316,73 +2182,65 @@ msgctxt "@action:button" msgid "Override" msgstr "Ignorar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" msgstr[0] "A impressora atribuída %1 requer a seguinte alteração na configuração:" msgstr[1] "A impressora atribuída %1 requer as seguintes alterações na configuração:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "A impressora %1 está atribuída, mas o trabalho tem uma configuração de material desconhecida." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "Alterar o material %1 de %2 para %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "Carregar %3 como material %1 (isto não pode ser substituído)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." -msgstr "Substituir o núcleo de impressão %1 de %2 para %3." +msgstr "Substituir o print core %1 de %2 para %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." -msgstr "Alterar placa de construção para %1 (isto não pode ser substituído)." +msgstr "Alterar base de construção para %1 (isto não pode ser substituído)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "Ignorar utilizará as definições especificadas com a configuração da impressora existente. Tal pode resultar numa falha de impressão." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "Alumínio" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "Ligar a uma impressora" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" "Certifique-se de que é possível estabelecer ligação com a impressora:\n" "- Verifique se a impressora está ligada.\n" -"- Verifique se a impressora está ligada à rede." +"- Verifique se a impressora está ligada à rede.\n" +"- Verifique se tem sessão iniciada para encontrar impressoras ligadas através da cloud." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 msgctxt "@info" msgid "Please connect your printer to the network." -msgstr "" +msgstr "Ligue a impressora à sua rede." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:156 msgctxt "@label link to technical assistance" @@ -2502,22 +2360,22 @@ msgstr "Alterar scripts de pós-processamento ativos" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:17 msgctxt "@title:window" msgid "More information on anonymous data collection" -msgstr "Mais informação sobre a recolha anónima de dados" +msgstr "Mais informações sobre a recolha anónima de dados" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:74 msgctxt "@text:window" msgid "Ultimaker Cura collects anonymous data in order to improve the print quality and user experience. Below is an example of all the data that is shared:" -msgstr "" +msgstr "O Ultimaker Cura recolhe dados anónimos para melhorar a qualidade da impressão e a experiência do utilizador. Segue-se um exemplo de todos os dados partilhados:" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:109 msgctxt "@text:window" msgid "I don't want to send anonymous data" -msgstr "" +msgstr "Não pretendo enviar dados anónimos" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:118 msgctxt "@text:window" msgid "Allow sending anonymous data" -msgstr "" +msgstr "Permitir o envio de dados anónimos" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2568,7 +2426,7 @@ msgstr "Profundidade (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 msgctxt "@info:tooltip" msgid "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model." -msgstr "" +msgstr "Para litofanias, os pixels escuros devem corresponder a localizações mais espessas para bloquear mais a passagem da luz. Para mapas de altura, os pixels mais claros significam um terreno mais alto, por isso, os pixels mais claros devem corresponder a localizações mais espessas no modelo 3D gerado." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 msgctxt "@item:inlistbox" @@ -2693,7 +2551,7 @@ msgid "Printer Group" msgstr "Grupo da Impressora" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "Definições do perfil" @@ -2706,13 +2564,13 @@ msgstr "Como deve ser resolvido o conflito no perfil?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 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:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 msgctxt "@action:label" msgid "Not in profile" msgstr "Inexistente no perfil" @@ -2720,7 +2578,7 @@ msgstr "Inexistente no perfil" # rever! # contexto?! #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2892,18 +2750,24 @@ msgid "Previous" msgstr "Anterior" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "Sugestão" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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 "Experimento de impressão" @@ -3023,155 +2887,155 @@ 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 "O novo diâmetro do filamento está definido como %1 mm, o que não é compatível com o extrusor actual. Pretende prosseguir?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "Nome" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "Marca" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "Tipo de Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "Cor" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "Propriedades" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "Densidade" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "Diâmetro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "Custo do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "Peso do Filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "Comprimento do filamento" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "Custo por Metro" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Este material está associado a %1 e partilha algumas das suas propriedades." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "Desassociar Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "Descrição" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "Informações de Aderência" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:19 msgctxt "@label" msgid "Print settings" msgstr "Definições de impressão" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "Ativar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "Criar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "Duplicar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "Importar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "Impressora" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "Confirmar Remoção" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 msgctxt "@label (%1 is object name)" msgid "Are you sure you wish to remove %1? This cannot be undone!" msgstr "Tem a certeza de que deseja remover o perfil %1? Não é possível desfazer esta ação!" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "Importar material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not import material %1: %2" msgstr "Não foi possível importar o material %1: %2" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully imported material %1" msgstr "Material %1 importado com êxito" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "Exportar Material" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 msgctxt "@info:status Don't translate the XML tags and !" msgid "Failed to export material to %1: %2" msgstr "Falha ao exportar material para %1: %2" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "Material exportado com êxito para %1" @@ -3212,392 +3076,415 @@ msgid "Unit" msgstr "Unidade" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "Geral" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "Interface" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "Idioma:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "Moeda:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "Tema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "É necessário reiniciar a aplicação para que estas alterações sejam aplicadas." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Seccionar automaticamente ao alterar as definições." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "Seccionar automaticamente" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "Comportamento da janela" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Realçar, a vermelho, as áreas do modelo sem apoio. Sem suporte, estas áreas podem não ser impressas correctamente." # rever! # consolas? -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "Mostrar Saliências (Overhangs)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 msgctxt "@info:tooltip" msgid "Moves the camera so the model is in the center of the view when a model is selected" msgstr "Move a câmara de forma que o modelo fique no centro da visualização quando é selecionado um modelo" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Centrar câmara ao selecionar item" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "O comportamento de zoom predefinido do Cura deve ser invertido?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Inverta a direção do zoom da câmera." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "O zoom deve deslocar-se na direção do rato?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +msgctxt "@info:tooltip" +msgid "Zooming towards the mouse is not supported in the orthographic perspective." +msgstr "Fazer zoom em direção ao rato não é suportado na perspetiva ortográfica." + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Fazer Zoom na direção do rato" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "Os modelos, na plataforma, devem ser movidos para que não se intersectem?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Garantir que os modelos não se interceptam" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "Pousar os modelos na base de construção?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Pousar automaticamente os modelos na base de construção" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "Mostrar mensagem de aviso no leitor de g-code." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "Mensagem de aviso no leitor de g-code" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "A vista por camada deve ser forçada a utilizar o modo de compatibilidade?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Forçar o modo de compatibilidade na visualização por camada (é necessário reiniciar)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +msgctxt "@info:tooltip" +msgid "What type of camera rendering should be used?" +msgstr "Que tipo de composição de câmara deve ser utilizado?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "Composição de câmara: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "Perspetiva" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "Ortográfica" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "Abrir e guardar ficheiros" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "Os modelos devem ser redimensionados até ao volume de construção se forem demasiado grandes?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "Redimensionar modelos demasiado grandes" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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 "Um modelo pode parecer extremamente pequeno se, por exemplo, este tiver sido criado em metros e não em milímetros. Estes modelos devem ser redimensionados?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Redimensionar modelos extremamente pequenos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "Selecionar os modelos depois de abertos?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Selecionar os modelos depois de abertos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "Deve um prefixo com base no nome da impressora ser adicionado ao nome do trabalho de impressão automaticamente?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Adicionar prefixo da máquina ao nome do trabalho" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Deve ser apresentado um resumo ao guardar um ficheiro de projeto?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Mostrar caixa de diálogo de resumo ao guardar projeto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Comportamento predefinido ao abrir um ficheiro de projeto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Comportamento predefinido ao abrir um ficheiro de projeto: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "Perguntar sempre isto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Abrir sempre como projeto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "Importar sempre modelos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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 "Quando tiver realizado alterações a um perfil e mudado para outro, será apresentada uma caixa de diálogo a perguntar se pretende manter as alterações. Caso contrário, pode escolher um comportamento predefinido, sendo que a caixa de diálogo nunca mais é apresentada." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "Perfis" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 msgctxt "@window:text" msgid "Default behavior for changed setting values when switching to a different profile: " msgstr "Comportamento predefinido para valores de definição alterados ao mudar para um perfil diferente: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml:157 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Perguntar sempre isto" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "Descartar sempre definições alteradas" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:discardOrKeep" msgid "Always transfer changed settings to new profile" msgstr "Transferir sempre definições alteradas para o novo perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "Privacidade" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "O Cura deve procurar atualizações quando o programa é iniciado?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Procurar atualizações ao iniciar" # rever! # legal wording -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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 "Podem alguns dados anónimos sobre a impressão ser enviados para a Ultimaker? Não são enviadas, nem armazenadas, quaisquer informações pessoais, incluindo modelos, endereços IP ou outro tipo de identificação pessoal." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Enviar dados (anónimos) sobre a impressão" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" -msgstr "Mais informação" +msgstr "Mais informações" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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:715 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:781 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Usar a funcionalidade de múltiplas bases de construção" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:786 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Usar a funcionalidade de múltiplas bases de construção (é necessário reiniciar)" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "Impressoras" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "Mudar Nome" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419 msgctxt "@title:tab" msgid "Profiles" msgstr "Perfis" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "Criar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "Duplicar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "Criar Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 msgctxt "@info" msgid "Please provide a name for this profile." msgstr "Forneça um nome para este perfil." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Duplicar Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "Mudar Nome do Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "Importar Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "Exportar Perfil" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Impressora: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420 msgctxt "@label" msgid "Default profiles" msgstr "Perfis predefinidos" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420 msgctxt "@label" msgid "Custom profiles" msgstr "Perfis personalizados" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Atualizar perfil com as definições/substituições atuais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "Descartar alterações atuais" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 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 as predefinições especificadas pela impressora, pelo que não tem quaisquer definições/substituições na lista seguinte." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "As suas definições atuais correspondem ao perfil selecionado." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "Definições Globais" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "Mercado" @@ -3660,33 +3547,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "procurar definições" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Copiar valor para todos os extrusores" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Copiar todos os valores alterados para todos os extrusores" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Esconder esta definição" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Não mostrar esta definição" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Manter esta definição visível" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Configurar visibilidade das definições..." @@ -3706,27 +3593,27 @@ msgstr "" "\n" "Clique para tornar estas definições visíveis." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." -msgstr "" +msgstr "Esta definição não é utilizada porque todas as definições influenciadas foram substituídas." # rever! # Afeta? # Influencia? # Altera? # Modifica? -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "Modifica" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Modificado Por" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "Esta definição é sempre partilhada entre todos os extrusores. Ao alterá-la aqui, o valor será alterado em todos os extrusores." @@ -3735,12 +3622,12 @@ msgstr "Esta definição é sempre partilhada entre todos os extrusores. Ao alte # contexto?! # resolvido? # por-extrusor -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "O valor é calculado com base nos valores por-extrusor " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3751,7 +3638,7 @@ msgstr "" "\n" "Clique para restaurar o valor do perfil." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3767,7 +3654,7 @@ msgctxt "@button" msgid "Recommended" msgstr "Recomendado" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "Personalizado" @@ -3795,20 +3682,20 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Criar estruturas para suportar partes do modelo, suspensas ou com saliências. Sem estas estruturas, essas partes do modelo podem desmoronar durante a impressão." -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "Aderência à Base de Construção" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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 "Permite a impressão de uma Aba (Brim) ou Raft. Isto irá adicionar, respectivamente, uma área plana em torno ou sob a base do seu objeto, que são fáceis de retirar posteriormente." +msgstr "Permite a impressão de uma aba ou raft. Isto irá adicionar, respetivamente, uma área plana em torno ou sob a base do seu objeto, que são fáceis de retirar posteriormente." #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:175 msgctxt "@label" msgid "Layer Height" -msgstr "Espessura da Camada" +msgstr "Espessura das Camadas" #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:206 msgctxt "@tooltip" @@ -3818,7 +3705,7 @@ msgstr "Algumas definições do perfil foram modificadas. Se pretender alterá-l #: /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 "" +msgstr "Este perfil de qualidade não se encontra disponível para a sua configuração atual de material e de nozzle. Altere-a para ativar este perfil de qualidade." #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449 msgctxt "@tooltip" @@ -3854,7 +3741,7 @@ 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." -msgstr "" +msgstr "Configuração de impressão desativada. O ficheiro G-code não pode ser modificado." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:52 msgctxt "@label" @@ -3892,59 +3779,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "Enviar G-code" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "Enviar um comando G-code personalizado para a impressora ligada. Prima \"Enter\" para enviar o comando." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "A temperatura-alvo do extrusor. O extrusor irá aquecer ou arrefecer até esta temperatura. Se esta opção for definida como 0, o aquecimento do extrusor será desligado." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "A temperatura atual deste extrusor." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "A temperatura-alvo de preaquecimento do extrusor." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "Cancelar" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "Preaquecer" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "Aquecer o extrusor com antecedência antes de imprimir. Pode continuar a ajustar as definições de impressão durante o aquecimento e não precisará de esperar que o extrusor aqueça quando começar a impressão." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "A cor do material neste extrusor." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "O material neste extrusor." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "O nozzle inserido neste extrusor." @@ -3989,11 +3876,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "Favoritos" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -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" @@ -4009,32 +3891,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Impressora" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "&Material" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Definir como Extrusor Ativo" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Ativar Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Desativar Extrusor" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:63 msgctxt "@title:menu" msgid "&Build plate" msgstr "&Base de construção" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "&Perfil" @@ -4044,10 +3926,25 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "&Posição da câmara" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "Vista da câmara" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "Perspetiva" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "Ortográfica" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" -msgstr "&Base de impressão" +msgstr "&Base de construção" #: /home/ruben/Projects/Cura/resources/qml/Menus/SettingVisibilityPresetsMenu.qml:13 msgctxt "@action:inmenu" @@ -4064,17 +3961,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Gerir Visibilidade das Definições..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "&Guardar..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "&Exportar..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "Exportar seleção..." @@ -4163,22 +4060,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "Abrir &Recente" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "Impressão ativa" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "Nome do trabalho" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "Tempo de Impressão" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "Tempo restante estimado" @@ -4186,12 +4083,17 @@ msgstr "Tempo restante estimado" #: /home/ruben/Projects/Cura/resources/qml/ViewsSelector.qml:50 msgctxt "@label" msgid "View type" -msgstr "" +msgstr "Ver tipo" + +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "Lista de objetos" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" -msgstr "" +msgstr "Olá, %1" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:33 msgctxt "@button" @@ -4220,6 +4122,9 @@ msgid "" "- Store your Ultimaker Cura settings in the cloud for use anywhere\n" "- Get exclusive access to print profiles from leading brands" msgstr "" +"- Envie trabalhos de impressão para impressoras Ultimaker fora da sua rede local\n" +"- Guarde as definições do seu Ultimaker Cura na cloud para utilizar em qualquer lugar\n" +"- Obtenha acesso exclusivo a perfis de impressão de marcas de referência" #: /home/ruben/Projects/Cura/resources/qml/Account/GeneralOperations.qml:78 msgctxt "@button" @@ -4236,32 +4141,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "Nenhuma estimativa de custos disponível" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "Pré-visualizar" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "A Seccionar..." -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" -msgstr "" +msgstr "Não é possível seccionar" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "A processar" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "Segmentação" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "Iniciar o processo de segmentação" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "Cancelar" @@ -4269,12 +4179,12 @@ msgstr "Cancelar" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:31 msgctxt "@label" msgid "Time estimation" -msgstr "" +msgstr "Estimativa de tempo" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:114 msgctxt "@label" msgid "Material estimation" -msgstr "" +msgstr "Estimativa de material" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:164 msgctxt "@label m for meter" @@ -4296,235 +4206,240 @@ msgctxt "@label" msgid "Preset printers" msgstr "Impressoras predefinidas" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "Adicionar Impressora" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "Gerir impressoras" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "Mostrar Guia de resolução de problemas online" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "Alternar para ecrã inteiro" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "Sair do Ecrã Inteiro" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&Desfazer" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Refazer" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Sair" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "Vista 3D" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "Vista Frente" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "Vista Cima" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "Vista Lado Esquerdo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "Vista Lado Direito" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Configurar Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Adicionar Impressora..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Gerir Im&pressoras..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Gerir Materiais..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Atualizar perfil com as definições/substituições atuais" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Descartar alterações atuais" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "&Criar perfil a partir das definições/substituições atuais..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Gerir Perfis..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Mostrar &documentação online" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Reportar um &erro" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" -msgstr "" +msgstr "Novidades" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "Sobre..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "Apagar Modelo Selecionado" msgstr[1] "Apagar Modelos Selecionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Centrar modelo selecionado" msgstr[1] "Centrar modelos selecionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Multiplicar modelo selecionado" msgstr[1] "Multiplicar modelos selecionados" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Apagar Modelo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Ce&ntrar Modelo na Base" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "&Agrupar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Desagrupar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Combinar Modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Multiplicar Modelo..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Selecionar todos os modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Limpar base de construção" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Recarregar todos os modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Dispor todos os modelos em todas as bases de construção" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Dispor todos os modelos" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Dispor seleção" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Repor todas as posições de modelos" # rever! # Cancelar todas? -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Repor Todas as Transformações do Modelo" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Abrir Ficheiro(s)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Novo Projeto..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Mostrar pasta de configuração" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "&Mercado" @@ -4539,52 +4454,52 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Este pacote será instalado após reiniciar." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "Definições" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "Fechar Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 msgctxt "@label" msgid "Are you sure you want to exit Cura?" msgstr "Tem a certeza de que deseja sair do Cura?" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:19 msgctxt "@title:window" msgid "Open file(s)" msgstr "Abrir ficheiro(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "Instalar Pacote" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "Abrir ficheiro(s)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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 "Encontrámos um ou mais ficheiros G-code nos ficheiros selecionados. Só é possível abrir um ficheiro G-code de cada vez. Se pretender abrir um ficheiro G-code, selecione apenas um." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "Adicionar Impressora" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" -msgstr "" +msgstr "Novidades" #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 msgctxt "@label %1 is filled in with the name of an extruder" @@ -4809,32 +4724,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Guardar projeto" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:149 msgctxt "@action:label" msgid "Build plate" msgstr "Base de construção" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "Extrusor %1" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & material" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" -msgstr "" +msgstr "Material" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Não mostrar novamente o resumo do projeto ao guardar" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "Guardar" @@ -4867,158 +4782,158 @@ msgstr "Importar modelos" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DropDownWidget.qml:93 msgctxt "@label" msgid "Empty" -msgstr "" +msgstr "Vazio" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:24 msgctxt "@label" msgid "Add a printer" -msgstr "" +msgstr "Adicionar uma impressora" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:39 msgctxt "@label" msgid "Add a networked printer" -msgstr "" +msgstr "Adicionar uma impressora em rede" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:81 msgctxt "@label" msgid "Add a non-networked printer" -msgstr "" +msgstr "Adicionar uma impressora sem rede" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:70 msgctxt "@label" msgid "Add printer by IP address" -msgstr "" +msgstr "Adicionar impressora por endereço IP" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:133 msgctxt "@text" msgid "Place enter your printer's IP address." -msgstr "" +msgstr "Introduza o endereço IP da sua impressora." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:158 msgctxt "@button" msgid "Add" -msgstr "" +msgstr "Adicionar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:204 msgctxt "@label" msgid "Could not connect to device." -msgstr "" +msgstr "Não foi possível ligar ao dispositivo." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:208 msgctxt "@label" msgid "The printer at this address has not responded yet." -msgstr "" +msgstr "A impressora neste endereço ainda não respondeu." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:240 msgctxt "@label" msgid "This printer cannot be added because it's an unknown printer or it's not the host of a group." -msgstr "" +msgstr "Não foi possível adicionar esta impressora porque é uma impressora desconhecida ou não aloja um grupo." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:329 msgctxt "@button" msgid "Back" -msgstr "" +msgstr "Anterior" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:342 msgctxt "@button" msgid "Connect" -msgstr "" +msgstr "Ligar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/FirstStartMachineActionsContent.qml:77 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:123 msgctxt "@button" msgid "Next" -msgstr "" +msgstr "Seguinte" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:23 msgctxt "@label" msgid "User Agreement" -msgstr "" +msgstr "Contrato de utilizador" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:56 msgctxt "@button" msgid "Agree" -msgstr "" +msgstr "Concordar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:70 msgctxt "@button" msgid "Decline and close" -msgstr "" +msgstr "Rejeitar e fechar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:24 msgctxt "@label" msgid "Help us to improve Ultimaker Cura" -msgstr "" +msgstr "Ajude-nos a melhorar o Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:57 msgctxt "@text" msgid "Ultimaker Cura collects anonymous data to improve print quality and user experience, including:" -msgstr "" +msgstr "O Ultimaker Cura recolhe dados anónimos para melhorar a qualidade da impressão e a experiência do utilizador, incluindo:" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:71 msgctxt "@text" msgid "Machine types" -msgstr "" +msgstr "Tipos de máquina" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:77 msgctxt "@text" msgid "Material usage" -msgstr "" +msgstr "Utilização do material" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:83 msgctxt "@text" msgid "Number of slices" -msgstr "" +msgstr "Número de segmentos" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:89 msgctxt "@text" msgid "Print settings" -msgstr "" +msgstr "Definições de impressão" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:102 msgctxt "@text" msgid "Data collected by Ultimaker Cura will not contain any personal information." -msgstr "" +msgstr "Os dados recolhidos pelo Ultimaker Cura não conterão quaisquer informações pessoais." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:103 msgctxt "@text" msgid "More information" -msgstr "" +msgstr "Mais informações" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WhatsNewContent.qml:24 msgctxt "@label" msgid "What's new in Ultimaker Cura" -msgstr "" +msgstr "Novidades no Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:42 msgctxt "@label" msgid "There is no printer found over your network." -msgstr "" +msgstr "Não foi encontrada nenhuma impressora na sua rede." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:179 msgctxt "@label" msgid "Refresh" -msgstr "" +msgstr "Atualizar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:190 msgctxt "@label" msgid "Add printer by IP" -msgstr "" +msgstr "Adicionar impressora por IP" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:223 msgctxt "@label" msgid "Troubleshooting" -msgstr "" +msgstr "Resolução de problemas" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" -msgstr "" +msgstr "Nome da impressora" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" -msgstr "" +msgstr "Atribua um nome à sua impressora" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:36 msgctxt "@label" @@ -5028,37 +4943,37 @@ msgstr "Ultimaker Cloud" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:77 msgctxt "@text" msgid "The next generation 3D printing workflow" -msgstr "" +msgstr "O fluxo de trabalho de impressão 3D da próxima geração" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:94 msgctxt "@text" msgid "- Send print jobs to Ultimaker printers outside your local network" -msgstr "" +msgstr "- Envie trabalhos de impressão para impressoras Ultimaker fora da sua rede local" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:97 msgctxt "@text" msgid "- Store your Ultimaker Cura settings in the cloud for use anywhere" -msgstr "" +msgstr "- Guarde as definições do seu Ultimaker Cura na cloud para utilizar em qualquer lugar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:100 msgctxt "@text" msgid "- Get exclusive access to print profiles from leading brands" -msgstr "" +msgstr "- Obtenha acesso exclusivo a perfis de impressão de marcas de referência" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:119 msgctxt "@button" msgid "Finish" -msgstr "" +msgstr "Concluir" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:128 msgctxt "@button" msgid "Create an account" -msgstr "" +msgstr "Criar uma conta" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:29 msgctxt "@label" msgid "Welcome to Ultimaker Cura" -msgstr "" +msgstr "Bem-vindo ao Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:47 msgctxt "@text" @@ -5066,26 +4981,13 @@ msgid "" "Please follow these steps to set up\n" "Ultimaker Cura. This will only take a few moments." msgstr "" +"Siga estes passos para configurar o\n" +"Ultimaker Cura. Este processo deverá demorar apenas alguns momentos." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:58 msgctxt "@button" msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "Ver só a base de construção ativa" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "Dispor em todas as bases" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "Dispor só na base ativa" +msgstr "Iniciar" #: MachineSettingsAction/plugin.json msgctxt "description" @@ -5170,12 +5072,22 @@ msgstr "Atualizador de firmware" #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattened quality changes profile." -msgstr "" +msgstr "Cria um perfil de alterações de qualidade aplanado." #: ProfileFlattener/plugin.json msgctxt "name" msgid "Profile Flattener" -msgstr "" +msgstr "Aplanador de perfis" + +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "Fornece suporte para ler ficheiros AMF." + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "Leitor de AMF" #: USBPrinting/plugin.json msgctxt "description" @@ -5185,17 +5097,7 @@ msgstr "Aceita G-Codes e envia-os para uma impressora. O plug-in também pode at #: USBPrinting/plugin.json msgctxt "name" msgid "USB printing" -msgstr "Impressão através de USB" - -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "Permite guardar o resultado do seccionamento como um ficheiro X3G, para poder ser usado com impressoras 3D que usam este formato (Kalyan, Makerbot e outras impressoras baseadas no Sailfish)." - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "X3GWriter" +msgstr "Impressão USB" #: GCodeGzWriter/plugin.json msgctxt "description" @@ -5239,23 +5141,13 @@ msgstr "Plug-in de dispositivo de saída da unidade amovível" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Gere as ligações de rede com as impressoras Ultimaker 3." +msgid "Manages network connections to Ultimaker networked printers." +msgstr "Gere as ligações de rede com as impressoras em rede Ultimaker." #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "Ligação de rede UM3" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" -msgstr "" +msgid "Ultimaker Network Connection" +msgstr "Ligação de rede Ultimaker" #: MonitorStage/plugin.json msgctxt "description" @@ -5286,7 +5178,7 @@ msgstr "Permite a visualização por camadas." #: SimulationView/plugin.json msgctxt "name" msgid "Simulation View" -msgstr "Vista Camadas" +msgstr "Visualização por camadas" #: GCodeGzReader/plugin.json msgctxt "description" @@ -5321,12 +5213,12 @@ msgstr "Eliminador de suportes" #: UFPReader/plugin.json msgctxt "description" msgid "Provides support for reading Ultimaker Format Packages." -msgstr "" +msgstr "Fornece suporte para ler pacotes de formato Ultimaker." #: UFPReader/plugin.json msgctxt "name" msgid "UFP Reader" -msgstr "" +msgstr "Leitor de UFP" #: SliceInfoPlugin/plugin.json msgctxt "description" @@ -5411,12 +5303,12 @@ msgstr "Atualização da versão 2.7 para 3.0" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.5 to Cura 4.0." -msgstr "" +msgstr "Atualiza as configurações do Cura 3.5 para o Cura 4.0." #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "name" msgid "Version Upgrade 3.5 to 4.0" -msgstr "" +msgstr "Atualização da versão 3.5 para 4.0" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" @@ -5431,12 +5323,12 @@ msgstr "Atualização da versão 3.4 para 3.5" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 4.0 to Cura 4.1." -msgstr "" +msgstr "Atualiza as configurações do Cura 4.0 para o Cura 4.1." #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "name" msgid "Version Upgrade 4.0 to 4.1" -msgstr "" +msgstr "Atualização da versão 4.0 para 4.1" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" @@ -5448,6 +5340,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "Atualização da versão 3.0 para 3.1" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "Atualiza as configurações do Cura 4.1 para o Cura 4.2." + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "Atualização da versão 4.1 para 4.2" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5478,6 +5380,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "Atualização da versão 2.2 para 2.4" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "Atualiza as configurações do Cura 4.2 para o Cura 4.3." + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "Atualização da versão 4.2 para 4.3" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5488,6 +5400,16 @@ msgctxt "name" msgid "Image Reader" msgstr "Leitor de imagens" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "Fornece suporte para a leitura de ficheiros modelo." + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "Leitor de Trimesh" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5518,16 +5440,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "Leitor de 3MF" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5551,12 +5463,12 @@ msgstr "Leitor de G-code" #: CuraDrive/plugin.json msgctxt "description" msgid "Backup and restore your configuration." -msgstr "" +msgstr "Efetua uma cópia de segurança e repõe a sua configuração." #: CuraDrive/plugin.json msgctxt "name" msgid "Cura Backups" -msgstr "" +msgstr "Cópias de segurança do Cura" # rever! # Fornece suporte para exportar perfis Cura. @@ -5593,12 +5505,12 @@ msgstr "Gravador 3MF" #: PreviewStage/plugin.json msgctxt "description" msgid "Provides a preview stage in Cura." -msgstr "" +msgstr "Fornece uma fase de pré-visualização no Cura." #: PreviewStage/plugin.json msgctxt "name" msgid "Preview Stage" -msgstr "" +msgstr "Fase de pré-visualização" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -5620,6 +5532,306 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Leitor de Perfis Cura" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "Ligado através da rede." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "Ligado através da rede. Por favor aprove o pedido de acesso, na impressora." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "Ligado através da rede. Sem autorização para controlar a impressora." + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "Acesso à impressora solicitado. Por favor aprove o pedido de acesso, na impressora" + +#~ msgctxt "@info:title" +#~ msgid "Authentication status" +#~ msgstr "Estado da autenticação" + +#~ msgctxt "@info:title" +#~ msgid "Authentication Status" +#~ msgstr "Estado da autenticação" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "Reenviar a solicitação de acesso" + +# rever! +# aceite? +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "Acesso à impressora confirmado" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "Sem autorização para imprimir com esta impressora. Não foi possível enviar o trabalho de impressão." + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "Solicitar Acesso" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "Enviar pedido de acesso para a impressora" + +#~ msgctxt "@label" +#~ msgid "Unable to start a new print job." +#~ msgstr "Não é possível iniciar um novo trabalho de impressão." + +#~ msgctxt "@label" +#~ msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." +#~ msgstr "Existe um problema com a configuração da sua Ultimaker, o qual impede o inicio da impressão. Por favor resolva este problema antes de continuar." + +# rever! +# ver contexto! pode querer dizer +# Configuração incompatível +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "Divergência de Configuração" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "Tem a certeza de que deseja imprimir com a configuração selecionada?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Existe uma divergência entre a configuração ou calibração da impressora e o Cura. Para se obter os melhores resultados, o seccionamento (no Cura) deve ser sempre feito para os núcleos de impressão e para os materiais que estão introduzidos na impressora." + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "O envio de novos trabalhos está (temporariamente) bloqueado; o trabalho de impressão anterior ainda está a ser enviado." + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "A enviar dados para a impressora" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "A Enviar Dados" + +#~ msgctxt "@info:status" +#~ msgid "No Printcore loaded in slot {slot_number}" +#~ msgstr "Nenhum PrintCore instalado na ranhura {slot_number}" + +#~ msgctxt "@info:status" +#~ msgid "No material loaded in slot {slot_number}" +#~ msgstr "Nenhum material carregado na ranhura {slot_number}" + +#~ msgctxt "@label" +#~ msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" +#~ msgstr "PrintCore diferente (Cura: {cura_printcore_name}, Impressora: {remote_printcore_name}) selecionado para o extrusor {extruder_id}" + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "Material diferente (Cura: {0}, Impressora: {1}) selecionado para o extrusor {2}" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "Sincronizar com a impressora" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "Deseja utilizar a configuração atual da impressora no Cura?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Os núcleos de impressão e/ou materiais na sua impressora são diferentes dos definidos no seu projeto atual. Para se obter os melhores resultados, o seccionamento (no Cura) deve ser sempre feito para os núcleos de impressão e para os materiais que estão introduzidos na impressora." + +# rever! +# contexto +#~ msgctxt "@action:button" +#~ msgid "View in Monitor" +#~ msgstr "Ver no Monitor" + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "A impressora {printer_name} terminou a impressão de \"{job_name}\"." + +#~ msgctxt "@info:status" +#~ msgid "The print job '{job_name}' was finished." +#~ msgstr "O trabalho de impressão '{job_name}' terminou." + +# rever! +# Concluída? +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "Impressão terminada" + +#~ msgctxt "@label:material" +#~ msgid "Empty" +#~ msgstr "Vazio" + +#~ msgctxt "@label:material" +#~ msgid "Unknown" +#~ msgstr "Desconhecido" + +#~ msgctxt "@info:title" +#~ msgid "Cloud error" +#~ msgstr "Erro da cloud" + +#~ msgctxt "@info:status" +#~ msgid "Could not export print job." +#~ msgstr "Não foi possível exportar o trabalho de impressão." + +#~ msgctxt "@info:description" +#~ msgid "There was an error connecting to the cloud." +#~ msgstr "Ocorreu um erro na ligação à cloud." + +#~ msgctxt "@info:status" +#~ msgid "Uploading via Ultimaker Cloud" +#~ msgstr "A carregar através da cloud do Ultimaker" + +#~ msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." +#~ msgid "Connect to Ultimaker Cloud" +#~ msgstr "Ligar à cloud do Ultimaker" + +#~ msgctxt "@action" +#~ msgid "Don't ask me again for this printer." +#~ msgstr "Não perguntar novamente sobre esta impressora." + +#~ msgctxt "@info:status" +#~ msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." +#~ msgstr "Agora pode enviar e monitorizar trabalhos de impressão a partir de qualquer lugar através da sua conta Ultimaker." + +#~ msgctxt "@info:status" +#~ msgid "Connected!" +#~ msgstr "Ligada!" + +#~ msgctxt "@action" +#~ msgid "Review your connection" +#~ msgstr "Reveja a sua ligação" + +#~ msgctxt "@info:status Don't translate the XML tags !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "A máquina definida no perfil {0} ({1}) não corresponde à sua máquina atual ({2}), não foi possível importá-la." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "Failed to import profile from {0}:" +#~ msgstr "Falha ao importar perfil de {0}:" + +#~ msgctxt "@window:title" +#~ msgid "Existing Connection" +#~ msgstr "Ligação Existente" + +#~ msgctxt "@message:text" +#~ msgid "This printer/group is already added to Cura. Please select another printer/group." +#~ msgstr "Esta impressora/grupo já foi adicionada ao Cura. Por favor selecione outra impressora/grupo." + +#~ msgctxt "@label" +#~ msgid "Enter the IP address or hostname of your printer on the network." +#~ msgstr "Introduza o endereço IP ou o nome de anfitrião da sua impressora na rede." + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "Ligar a uma impressora" + +#~ msgctxt "@title" +#~ msgid "Cura Settings Guide" +#~ msgstr "Guia de definições do Cura" + +#~ msgctxt "@info:tooltip" +#~ msgid "Zooming towards the mouse is not supported in the orthogonal perspective." +#~ msgstr "Fazer zoom em direção ao rato não é suportado na perspetiva ortogonal." + +#~ msgid "Orthogonal" +#~ msgstr "Ortogonal" + +#~ msgctxt "description" +#~ msgid "Manages network connections to Ultimaker 3 printers." +#~ msgstr "Gere as ligações de rede com as impressoras Ultimaker 3." + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "Ligação de rede UM3" + +#~ msgctxt "description" +#~ msgid "Provides extra information and explanations about settings in Cura, with images and animations." +#~ msgstr "Fornece informações e explicações adicionais sobre as definições do Cura, com imagens e animações." + +#~ msgctxt "name" +#~ msgid "Settings Guide" +#~ msgstr "Guia de definições" + +#~ msgctxt "@item:inmenu" +#~ msgid "Cura Settings Guide" +#~ msgstr "Guia de definições do Cura" + +#~ msgctxt "@info:generic" +#~ msgid "Settings have been changed to match the current availability of extruders: [%s]" +#~ msgstr "As definições foram alteradas de forma a corresponder aos extrusores disponíveis de momento: [%s]" + +#~ msgctxt "@title:groupbox" +#~ msgid "User description" +#~ msgstr "Descrição do utilizador" + +#~ msgctxt "@info" +#~ msgid "These options are not available because you are monitoring a cloud printer." +#~ msgstr "Estas opções não estão disponíveis pois está a monitorizar uma impressora na cloud." + +#~ msgctxt "@label link to connect manager" +#~ msgid "Go to Cura Connect" +#~ msgstr "Ir para o Cura Connect" + +#~ msgctxt "@info" +#~ msgid "All jobs are printed." +#~ msgstr "Todos os trabalhos foram impressos." + +#~ msgctxt "@label link to connect manager" +#~ msgid "View print history" +#~ msgstr "Ver histórico de impressão" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "Para imprimir diretamente para a sua impressora através da rede, certifique-se de que a sua impressora está ligada à rede por meio de um cabo de rede ou através de ligação à rede Wi-Fi. Se não ligar o Cura por rede à impressora, poderá ainda assim utilizar uma unidade USB para transferir ficheiros g-code para a impressora.\n" +#~ "\n" +#~ "Selecione a sua impressora na lista em baixo:" + +#~ msgctxt "@info" +#~ msgid "" +#~ "Please make sure your printer has a connection:\n" +#~ "- Check if the printer is turned on.\n" +#~ "- Check if the printer is connected to the network." +#~ msgstr "" +#~ "Certifique-se de que é possível estabelecer ligação com a impressora:\n" +#~ "- Verifique se a impressora está ligada.\n" +#~ "- Verifique se a impressora está ligada à rede." + +#~ msgctxt "@option:check" +#~ msgid "See only current build plate" +#~ msgstr "Ver só a base de construção ativa" + +#~ msgctxt "@action:button" +#~ msgid "Arrange to all build plates" +#~ msgstr "Dispor em todas as bases" + +#~ msgctxt "@action:button" +#~ msgid "Arrange current build plate" +#~ msgstr "Dispor só na base ativa" + +#~ msgctxt "description" +#~ msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." +#~ msgstr "Permite guardar o resultado do seccionamento como um ficheiro X3G, para poder ser usado com impressoras 3D que usam este formato (Kalyan, Makerbot e outras impressoras baseadas no Sailfish)." + +#~ msgctxt "name" +#~ msgid "X3GWriter" +#~ msgstr "X3GWriter" + +#~ msgctxt "description" +#~ msgid "Reads SVG files as toolpaths, for debugging printer movements." +#~ msgstr "Lê ficheiros SVG como caminhos de ferramenta para efeitos de depuração dos movimentos da impressora." + +#~ msgctxt "name" +#~ msgid "SVG Toolpath Reader" +#~ msgstr "Leitor de caminhos de ferramenta SVG" + #~ msgctxt "@item:inmenu" #~ msgid "Changelog" #~ msgstr "Lista das Alterações" diff --git a/resources/i18n/pt_PT/fdmextruder.def.json.po b/resources/i18n/pt_PT/fdmextruder.def.json.po index f62b25719f..5db0128890 100644 --- a/resources/i18n/pt_PT/fdmextruder.def.json.po +++ b/resources/i18n/pt_PT/fdmextruder.def.json.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" "PO-Revision-Date: 2019-03-14 14:15+0100\n" "Last-Translator: Portuguese \n" "Language-Team: Paulo Miranda , Portuguese \n" diff --git a/resources/i18n/pt_PT/fdmprinter.def.json.po b/resources/i18n/pt_PT/fdmprinter.def.json.po index c0bd0ceba7..06b3051b93 100644 --- a/resources/i18n/pt_PT/fdmprinter.def.json.po +++ b/resources/i18n/pt_PT/fdmprinter.def.json.po @@ -5,12 +5,12 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" -"PO-Revision-Date: 2019-03-14 14:15+0100\n" -"Last-Translator: Portuguese \n" -"Language-Team: Paulo Miranda , Portuguese \n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" +"PO-Revision-Date: 2019-07-29 15:51+0100\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Portuguese , Paulo Miranda , Portuguese \n" "Language: pt_PT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -109,7 +109,7 @@ msgstr "Introduzir ou não um comando para esperar até que a temperatura da bas #: fdmprinter.def.json msgctxt "material_print_temp_wait label" msgid "Wait for Nozzle Heatup" -msgstr "Esperar pelo Aquecimento do Nozzle" +msgstr "Esperar pelo aquecimento do nozzle" #: fdmprinter.def.json msgctxt "material_print_temp_wait description" @@ -124,7 +124,7 @@ msgstr "Incluir Temperaturas do Material" #: fdmprinter.def.json msgctxt "material_print_temp_prepend description" msgid "Whether to include nozzle temperature commands at the start of the gcode. When the start_gcode already contains nozzle temperature commands Cura frontend will automatically disable this setting." -msgstr "Incluir ou não os comandos de temperatura do nozzle no início do gcode. Se o gcode_inicial já incluir os comandos de temperatura do nozzle, o front-end do Cura desativará automaticamente esta definição." +msgstr "Incluir ou não os comandos de temperatura do nozzle no início do G-code. Se o gcode_inicial já incluir os comandos de temperatura do nozzle, o front-end do Cura desativará automaticamente esta definição." #: fdmprinter.def.json msgctxt "material_bed_temp_prepend label" @@ -216,6 +216,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "Se a máquina tem ou não uma base de construção aquecida." +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "Tem estabilização da temperatura do volume de construção" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "Se a máquina consegue ou não estabilizar a temperatura do volume de construção." + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -241,7 +251,7 @@ msgstr "Número de núcleos de extrusão. Um núcleo de extrusão é o conjunto #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders That Are Enabled" -msgstr "" +msgstr "Número de extrusores ativos" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -251,7 +261,7 @@ msgstr "Número de núcleos de extrusão que estão activos; definido automatica #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer Nozzle Diameter" -msgstr "" +msgstr "Diâmetro externo do nozzle" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter description" @@ -261,7 +271,7 @@ msgstr "O diâmetro externo da ponta do nozzle." #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle Length" -msgstr "" +msgstr "Comprimento do nozzle" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance description" @@ -271,7 +281,7 @@ msgstr "A diferença de altura entre a ponta do nozzle e o extremo inferior da c #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle Angle" -msgstr "" +msgstr "Ângulo do nozzle" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle description" @@ -281,7 +291,7 @@ msgstr "O ângulo entre o plano horizontal e a parte cónica imediatamente acima #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat Zone Length" -msgstr "" +msgstr "Comprimento da zona de aquecimento" #: fdmprinter.def.json msgctxt "machine_heat_zone_length description" @@ -301,7 +311,7 @@ msgstr "A distância, a partir da ponta do nozzle, à qual o filamento deve ser #: fdmprinter.def.json msgctxt "machine_nozzle_temp_enabled label" msgid "Enable Nozzle Temperature Control" -msgstr "Ativar Controlo da Temperatura do Nozzle" +msgstr "Ativar controlo de temperatura do nozzle" #: fdmprinter.def.json msgctxt "machine_nozzle_temp_enabled description" @@ -311,7 +321,7 @@ msgstr "Controlar ou não a temperatura a partir do Cura. Desative esta opção #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat Up Speed" -msgstr "" +msgstr "Velocidade de aquecimento" # intervalo? #: fdmprinter.def.json @@ -322,7 +332,7 @@ msgstr "A velocidade média (°C/s) a que o nozzle é aquecido, média calculada #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool Down Speed" -msgstr "" +msgstr "Velocidade de arrefecimento" # intervalo? #: fdmprinter.def.json @@ -342,13 +352,13 @@ msgstr "O tempo mínimo durante o qual um extrusor tem de estar inativo antes de #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" -msgstr "" +msgid "G-code Flavor" +msgstr "Variante do G-code" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" msgid "The type of g-code to be generated." -msgstr "O tipo de g-code a ser gerado." +msgstr "O tipo de G-code a ser gerado." #: fdmprinter.def.json msgctxt "machine_gcode_flavor option RepRap (Marlin/Sprinter)" @@ -408,7 +418,7 @@ msgstr "Se se deve utilizar os comandos de retração do firmware (G10/G11), em #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed Areas" -msgstr "" +msgstr "Áreas não permitidas" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" @@ -428,7 +438,7 @@ msgstr "Uma lista de polígonos com áreas onde o nozzle não pode entrar." #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine Head Polygon" -msgstr "" +msgstr "Polígono da cabeça da máquina" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -438,7 +448,7 @@ msgstr "Uma silhueta 2D da cabeça de impressão (excluindo tampas do(s) ventila #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine Head & Fan Polygon" -msgstr "" +msgstr "Polígono da cabeça e do ventilador da máquina" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -448,7 +458,7 @@ msgstr "Uma silhueta 2D da cabeça de impressão (incluindo tampas do(s) ventila #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry Height" -msgstr "" +msgstr "Altura do pórtico" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -478,7 +488,7 @@ msgstr "O diâmetro interno do nozzle. Altere esta definição quando utilizar u #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset with Extruder" -msgstr "" +msgstr "Desviar com extrusor" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -733,7 +743,7 @@ msgstr "Todas as definições que influenciam a resolução da impressão. Estas #: fdmprinter.def.json msgctxt "layer_height label" msgid "Layer Height" -msgstr "Espessura das Camadas (Layers)" +msgstr "Espessura das Camadas" # Valores? ou numeros? ou espessura? # mais elevadas ou maiores? @@ -819,7 +829,7 @@ msgstr "O diâmetro de uma única linha de enchimento." #: fdmprinter.def.json msgctxt "skirt_brim_line_width label" msgid "Skirt/Brim Line Width" -msgstr "Diâmetro Linha Contorno / Aba" +msgstr "Diâmetro Linha Contorno/Aba" #: fdmprinter.def.json msgctxt "skirt_brim_line_width description" @@ -1240,7 +1250,7 @@ msgstr "Descartar Folgas Mínimas" #: fdmprinter.def.json msgctxt "filter_out_tiny_gaps description" msgid "Filter out tiny gaps to reduce blobs on outside of model." -msgstr "Descartar folgas muito pequenas, entre paredes, para reduzir \"blobs\" no exterior da impressão." +msgstr "Descartar folgas muito pequenas, entre paredes, para reduzir \"blobs\" (borrões) no exterior da impressão." #: fdmprinter.def.json msgctxt "fill_outline_gaps label" @@ -1307,6 +1317,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "Canto mais Acentuado" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "Posição da Junta-Z" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "A posição próxima do local onde a impressão de cada parte de uma camada será iniciada." + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "Posterior esquerda" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "Anterior" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "Posterior direita" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "Direita" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "Frontal direita" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "Frontal" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "Frontal esquerda" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "Esquerda" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1334,13 +1394,10 @@ msgctxt "z_seam_corner label" msgid "Seam Corner Preference" msgstr "Preferência Canto Junta" -# rever! -# torna mais provável que esta surja num canto -# aconteça? surja? apareça? #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "Controla se os cantos do contorno do modelo influenciam a posição da junta. Nenhum significa que os cantos não influenciam a posição da junta. Ocultar Junta faz com que seja mais provável que a junta surja num canto interior. Expor Junta faz com que seja mais provável que a junta aconteça num canto exterior. Ocultar ou Expor Junta faz com que seja mais provável que a junta aconteça num canto interior ou exterior." +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "Controla se os cantos do contorno do modelo influenciam a posição da junta. Nenhum significa que os cantos não influenciam a posição da junta. Ocultar Junta faz com que seja mais provável que a junta surja num canto interior. Expor Junta faz com que seja mais provável que a junta aconteça num canto exterior. Ocultar ou Expor Junta faz com que seja mais provável que a junta aconteça num canto interior ou exterior. Ocultação Inteligente permite os cantos interiores e exteriores, mas opta pelos cantos interiores com mais frequência, se apropriado." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1368,6 +1425,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "Ocultar ou Expor Junta" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "Ocultação Inteligente" + #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" @@ -1378,17 +1440,15 @@ msgctxt "z_seam_relative description" msgid "When enabled, the z seam coordinates are relative to each part's centre. When disabled, the coordinates define an absolute position on the build plate." msgstr "Quando ativado, as coordenadas da junta-Z são relativas ao centro de cada peça. Quando desativado, as coordenadas definem uma posição absoluta na base de construção." -# rever! -# gaps? Espaços? intervalos? folgas? #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "Ignorar Pequenos Espaços Z" +msgid "No Skin in Z Gaps" +msgstr "Sem Revestimento nos Espaços Z" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "Quando o modelo tem pequenos espaços verticais, cerca de mais 5% de tempo de cálculo pode ser despendido na criação das superfícies de revestimentos superior e inferior nestes pequenos espaços. Nesse caso desative esta definição." +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "Quando o modelo tem pequenos espaços verticais de apenas algumas camadas, deverá normalmente existir revestimento à volta dessas camadas no espaço estreito. Ative esta definição para não gerar revestimento se o espaço vertical for muito pequeno. Isto melhora o tempo de impressão e o tempo de seccionamento, mas deixa tecnicamente o enchimento exposto ao ar." #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1409,11 +1469,12 @@ msgctxt "ironing_enabled label" msgid "Enable Ironing" msgstr "Ativar Engomar (Ironing)" -# O objetivo é derreter mais o plástico das superfícies superiores, criando uma superfície mais uniforme. #: fdmprinter.def.json 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 "Passar com o nozzle uma vez mais, sobre as superfícies superiores, mas sem extrudir material. O objetivo é criar superfícies mais suaves/lisas, ao derreter (\"engomar\") o plástico das superfícies superiores." +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 "Passar novamente sobre o revestimento superior, mas desta vez extrudindo muito pouco material. O objetivo é derreter mais o plástico da camada superior," +" criando uma superfície mais suave. A pressão na câmara do nozzle é mantida elevada de modo que os vincos existentes na superfície sejam preenchidos com" +" material." #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1509,6 +1570,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "A mudança de velocidade instantânea máxima ao engomar." +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "Sobreposição Revestimento (%)" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Ajuste a quantidade de sobreposição entre as paredes e (as extremidades) das linhas centrais de revestimento, como percentagem das larguras de linha das linhas de revestimento e da parede mais interna. Uma ligeira sobreposição permite que as paredes se liguem firmemente ao revestimento. Observe que no caso de um revestimento e uma largura de revestimento da parede iguais, qualquer percentagem acima de 50% pode fazer com que o revestimento ultrapasse a parede, visto que a posição do nozzle do extrusor de revestimento pode já ultrapassar o centro da parede neste ponto." + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "Sobreposição Revestimento (mm)" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Ajuste a quantidade de sobreposição entre as paredes e (as extremidades) das linhas centrais de revestimento. Uma ligeira sobreposição permite que as paredes se liguem firmemente ao revestimento. Observe que no caso de um revestimento e uma largura de revestimento da parede iguais, qualquer valor acima da metade da largura da parede pode fazer com que o revestimento ultrapasse a parede, visto que a posição do nozzle do extrusor de revestimento pode já ultrapassar o centro da parede." + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1679,6 +1760,16 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "O padrão geométrico de enchimento é deslocado por esta distância ao longo do eixo Y." +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +msgstr "Início aleatório do enchimento" + +#: 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 "A linha de enchimento que é impressa primeiro é aleatória. Isso impede que um segmento se torne o mais forte, mas exige um movimento adicional." + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1733,26 +1824,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "A distância em milímetros da sobreposição entre o enchimento e as paredes. Uma ligeira sobreposição permite que as paredes se unam firmemente ao enchimento." -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "Sobreposição Revestimento (%)" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Ajuste a quantidade de sobreposição entre as paredes e (as extremidades) das linhas centrais de revestimento, como percentagem das larguras de linha das linhas de revestimento e da parede mais interna. Uma ligeira sobreposição permite que as paredes se liguem firmemente ao revestimento. Observe que no caso de um revestimento e uma largura de revestimento da parede iguais, qualquer percentagem acima de 50% pode fazer com que o revestimento ultrapasse a parede, visto que a posição do bocal do extrusor de revestimento pode já ultrapassar o centro da parede neste ponto." - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "Sobreposição Revestimento (mm)" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Ajuste a quantidade de sobreposição entre as paredes e (as extremidades) das linhas centrais de revestimento. Uma ligeira sobreposição permite que as paredes se liguem firmemente ao revestimento. Observe que no caso de um revestimento e uma largura de revestimento da parede iguais, qualquer valor acima da metade da largura da parede pode fazer com que o revestimento ultrapasse a parede, visto que a posição do bocal do extrusor de revestimento pode já ultrapassar o centro da parede." - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1941,12 +2012,12 @@ msgstr "A temperatura predefinida utilizada para a impressão. Esta deve ser a t #: fdmprinter.def.json msgctxt "build_volume_temperature label" msgid "Build Volume Temperature" -msgstr "" +msgstr "Temperatura do volume de construção" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." -msgstr "" +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." +msgstr "A temperatura do ambiente para a impressão. Se este valor for 0, a temperatura do volume de construção não será ajustada." #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -2058,6 +2129,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "Proporção de Contração em percentagem." +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "Material Cristalino" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "Este tipo de material é daquele que se separa de forma regular quando aquecido (cristalino) ou daquele que cria longas cadeias de polímero entrelaçado (não cristalino)?" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "Posição Retraída Antiescorrimento" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "A distância a que o material tem de ser retraído antes de parar o escorrimento." + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "Velocidade de Retração Antiescorrimento" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "A velocidade a que o material tem de ser retraído durante uma substituição de filamentos para evitar o escorrimento." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "Posição Retraída de Preparação da Separação" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "A distância a que o filamento pode ser esticado antes de se separar, enquanto é aquecido." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "Velocidade de Retração de Preparação da Separação" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "A velocidade a que o filamento tem de ser retraído imediatamente antes de se separar numa retração." + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "Posição Retraída de Separação" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "A distância de retração do filamento para separá-lo de forma regular." + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "Velocidade de Retração de Separação" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "A velocidade de retração do filamento para separá-lo de forma regular." + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "Temperatura de Separação" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "A temperatura a que o filamento se quebra para uma separação regular." + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -2068,6 +2219,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "Compensação de fluxo: a quantidade de material extrudido é multiplicada por este valor." +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "Fluxo da Parede" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "Compensação de fluxo nas linhas de parede." + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "Fluxo de Parede Exterior" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "Compensação de fluxo na linha de parede exterior." + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "Parede de Parede(s) Interior(es)" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "A compensação de fluxo nas linhas de parede para todas as linhas de parede exceto a mais exterior." + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "Fluxo Superior/Inferior" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "Compensação de fluxo nas linhas superiores/inferiores." + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "Fluxo de Revestimento da Superfície Superior" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "Compensação de fluxo nas linhas das áreas na parte superior da impressora." + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "Fluxo de Enchimento" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "Compensação de fluxo nas linhas de enchimento." + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "Fluxo de Contorno/Aba" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "Compensação de fluxo nas linhas de contorno ou abas." + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "Fluxo de Suporte" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "Compensação de fluxo nas linhas das estruturas de suporte." + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "Fluxo da Interface do Suporte" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "Compensação de fluxo nas linhas de suporte do teto ou do chão." + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "Fluxo do Teto do Suporte" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "Compensação de fluxo nas linhas do teto do suporte." + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "Fluxo do Chão do Suporte" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "Compensação de fluxo nas linhas do chão do suporte." + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "Fluxo da torre de preparação" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "Compensação de fluxo nas linhas da torre de preparação." + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2141,7 +2412,7 @@ msgstr "A velocidade a que o filamento é retraído durante um movimento de retr #: fdmprinter.def.json msgctxt "retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "Velocidade Preparar na Retração" +msgstr "Velocidade de preparação na retração" #: fdmprinter.def.json msgctxt "retraction_prime_speed description" @@ -2196,8 +2467,8 @@ msgstr "Limitar Retrações de Suportes" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." -msgstr "Eliminar a retração quando o movimento de suporte para suporte é em linha recta. Ativar esta definição reduz o tempo de impressão, mas pode levar a que aja um excessivo numero de fios nas estruturas de suporte." +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." +msgstr "Eliminar a retração quando o movimento de suporte para suporte é em linha reta. Ativar esta definição reduz o tempo de impressão, mas pode levar a que aja um excessivo numero de fios nas estruturas de suporte." #: fdmprinter.def.json msgctxt "material_standby_temperature label" @@ -2251,6 +2522,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "A velocidade a que o filamento é empurrado após uma retração de substituição do nozzle." +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "Quantidade de Preparação Extra de Substituição do Nozzle" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "Material extra a preparar após a substituição do nozzle." + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2448,7 +2729,7 @@ msgstr "A velocidade dos movimentos de deslocação na camada inicial. É recome #: fdmprinter.def.json msgctxt "skirt_brim_speed label" msgid "Skirt/Brim Speed" -msgstr "Velocidade Contorno / Aba" +msgstr "Velocidade Contorno/Aba" #: fdmprinter.def.json msgctxt "skirt_brim_speed description" @@ -2456,15 +2737,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "A velocidade a que o contorno e a aba são impressos. Geralmente, isto é efetuado à velocidade de camada inicial, mas, por vezes, pode preferir imprimir o contorno ou a aba a uma velocidade diferente." #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "Velocidade Z máxima" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "Velocidade do Salto Z" -# a que a base de construção é movida. Defini-la como zero #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "A velocidade máxima do movimento da base de construção. Definir esta como zero faz com que a impressão utilize as predefinições de firmware para a velocidade Z máxima." +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "A velocidade a que o movimento Z vertical é efetuado para Saltos Z. Este valor é geralmente inferior à velocidade de impressão, uma vez que é mais difícil mover a base de construção ou o pórtico da máquina." #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2679,7 +2959,7 @@ msgstr "A aceleração dos movimentos de deslocação na camada inicial." #: fdmprinter.def.json msgctxt "acceleration_skirt_brim label" msgid "Skirt/Brim Acceleration" -msgstr "Aceleração Contorno / Aba" +msgstr "Aceleração Contorno/Aba" #: fdmprinter.def.json msgctxt "acceleration_skirt_brim description" @@ -2878,7 +3158,7 @@ msgstr "A aceleração dos movimentos de deslocação na camada inicial." #: fdmprinter.def.json msgctxt "jerk_skirt_brim label" msgid "Skirt/Brim Jerk" -msgstr "Jerk de Contorno / Aba" +msgstr "Jerk de Contorno/Aba" #: fdmprinter.def.json msgctxt "jerk_skirt_brim description" @@ -2910,7 +3190,7 @@ msgstr "Modo de Combing" #: fdmprinter.def.json msgctxt "retraction_combing description" msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas or to only comb within the infill." -msgstr "Combing mantém o bocal em áreas já impressas durante a deslocação. Isto resulta em movimentos de deslocação ligeiramente mais longos, mas reduz a necessidade de retrações. Se o combing estiver desativado, o material será retraído e o bocal irá deslocar-se em linha reta para o próximo ponto. Também é possível evitar o combing em áreas de revestimento superiores/inferiores ou apenas efetuar o combing no enchimento." +msgstr "Combing mantém o nozzle em áreas já impressas durante a deslocação. Isto resulta em movimentos de deslocação ligeiramente mais longos, mas reduz a necessidade de retrações. Se o combing estiver desativado, o material será retraído e o nozzle irá deslocar-se em linha reta para o próximo ponto. Também é possível evitar o combing em áreas de revestimento superiores/inferiores ou apenas efetuar o combing no enchimento." #: fdmprinter.def.json msgctxt "retraction_combing option off" @@ -2982,16 +3262,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "A distância entre o nozzle e as peças já impressas ao evitá-las durante os movimentos de deslocação." -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "Começar Camadas Mesmo Objecto" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "Em cada camada, começar a imprimir o objeto perto do mesmo ponto, para não se começar a imprimir uma nova camada com a peça com a qual se terminou a camada anterior. O que resulta em melhores impressões de saliências e de pequenos objectos, mas aumenta o tempo de impressão." - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -3015,7 +3285,7 @@ msgstr "A coordenada Y da posição do local onde se situa a peça pela qual ini #: fdmprinter.def.json msgctxt "retraction_hop_enabled label" msgid "Z Hop When Retracted" -msgstr "Salto-Z ao Retrair" +msgstr "Salto Z ao retrair" #: fdmprinter.def.json msgctxt "retraction_hop_enabled description" @@ -3035,12 +3305,12 @@ msgstr "Efetua um salto Z apenas ao deslocar-se sobre as peças impressas que n #: fdmprinter.def.json msgctxt "retraction_hop label" msgid "Z Hop Height" -msgstr "Altura do Salto-Z" +msgstr "Altura do salto Z" #: fdmprinter.def.json msgctxt "retraction_hop description" msgid "The height difference when performing a Z Hop." -msgstr "A diferença de altura ao efetuar um Salto-Z." +msgstr "A diferença de altura ao efetuar um salto Z." # rever! # Salto? @@ -3049,7 +3319,7 @@ msgstr "A diferença de altura ao efetuar um Salto-Z." #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch label" msgid "Z Hop After Extruder Switch" -msgstr "Salto-Z Após Mudança Extrusor" +msgstr "Salto Z após mudança extrusor" # rever! #: fdmprinter.def.json @@ -3060,12 +3330,12 @@ msgstr "Após a máquina mudar de um extrusor para outro, a base de construção #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height label" msgid "Z Hop After Extruder Switch Height" -msgstr "" +msgstr "Altura do salto Z após mudança do extrusor" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height description" msgid "The height difference when performing a Z Hop after extruder switch." -msgstr "" +msgstr "A diferença de altura ao efetuar um salto Z após uma mudança do extrusor." # rever! # todoas as strings de Arrefecimento @@ -3215,7 +3485,7 @@ msgstr "Criar Suportes" #: fdmprinter.def.json msgctxt "support_enable description" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." -msgstr "Criar estruturas para suportar partes do modelo, suspensas ou com saliências. Sem estas estruturas, essas partes do modelo podem deformar-se ou mesmo desmoronar durante a impressão." +msgstr "Criar estruturas para suportar partes do modelo, suspensas ou com saliências. Sem estas estruturas, essas partes do modelo podem desmoronar durante a impressão." #: fdmprinter.def.json msgctxt "support_extruder_nr label" @@ -3350,7 +3620,7 @@ msgstr "Cruz" #: fdmprinter.def.json msgctxt "support_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "Gyroid" #: fdmprinter.def.json msgctxt "support_wall_count label" @@ -3416,44 +3686,46 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "Distância entre as linhas da estrutura de suporte da camada inicial impressas. Esta definição é calculada pela densidade do suporte." #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "Direção da linha de enchimento do suporte" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." -msgstr "Orientação do padrão de enchimento para suportes. O padrão de enchimento do suporte gira no plano horizontal." +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 "Lista de ângulos (números inteiros) relativos às direções de linha a utilizar. Os valores da lista são utilizados em sequência, à medida que as camadas" +" progridem, voltando ao início assim que a lista chega ao fim. Os itens da lista são separados por vírgulas e a lista completa é escrita entre parênteses" +" retos. Por defeito, a lista está vazia, o que significa a utilização dos ângulos predefinidos de 0 graus." #: fdmprinter.def.json msgctxt "support_brim_enable label" msgid "Enable Support Brim" -msgstr "Ativar borda de suporte" +msgstr "Ativar aba de suporte" #: fdmprinter.def.json msgctxt "support_brim_enable description" msgid "Generate a brim within the support infill regions of the first layer. This brim is printed underneath the support, not around it. Enabling this setting increases the adhesion of support to the build plate." -msgstr "Gera uma borda dentro das regiões de enchimento do suporte da primeira camada. Esta borda é impressa na parte por baixo do suporte e não em torno do mesmo. Ativar esta definição aumenta a aderência do suporte à placa de construção." +msgstr "Gera uma aba dentro das regiões de enchimento do suporte da primeira camada. Esta aba é impressa na parte por baixo do suporte e não em torno do mesmo. Ativar esta definição aumenta a aderência do suporte à base de construção." #: fdmprinter.def.json msgctxt "support_brim_width label" msgid "Support Brim Width" -msgstr "Largura da borda do suporte" +msgstr "Largura da aba do suporte" #: fdmprinter.def.json msgctxt "support_brim_width description" msgid "The width of the brim to print underneath the support. A larger brim enhances adhesion to the build plate, at the cost of some extra material." -msgstr "A largura da borda para imprimir na parte por baixo do suporte. Uma borda mais larga melhora a aderência à placa de construção à custa de algum material adicional." +msgstr "A largura da aba para imprimir na parte por baixo do suporte. Uma aba mais larga melhora a aderência à base de construção à custa de algum material adicional." #: fdmprinter.def.json msgctxt "support_brim_line_count label" msgid "Support Brim Line Count" -msgstr "Contagem de linhas da borda do suporte" +msgstr "Contagem de linhas da aba do suporte" #: fdmprinter.def.json msgctxt "support_brim_line_count description" msgid "The number of lines used for the support brim. More brim lines enhance adhesion to the build plate, at the cost of some extra material." -msgstr "O número de linhas utilizado para a borda do suporte. Uma borda com mais linhas melhora a aderência à placa de construção à custa de algum material adicional." +msgstr "O número de linhas utilizado para a aba do suporte. Uma aba com mais linhas melhora a aderência à base de construção à custa de algum material adicional." #: fdmprinter.def.json msgctxt "support_z_distance label" @@ -3552,7 +3824,7 @@ msgstr "Distância da junção do suporte" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." msgstr "A distância máxima entre as estruturas de suporte nas direções X/Y. Quando a distância entre as estruturas de suporte for menor do que este valor, as estruturas fundem-se numa só." #: fdmprinter.def.json @@ -3893,6 +4165,45 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "Quantidade do desvio aplicado aos pisos de suporte." +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +msgstr "Direções da linha da interface do suporte" + +#: 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 "Lista de ângulos (números inteiros) relativos às direções de linha a utilizar. Os valores da lista são utilizados em sequência, à medida que as camadas" +" progridem, voltando ao início assim que a lista chega ao fim. Os itens da lista são separados por vírgulas e a lista completa é escrita entre parênteses" +" retos. Por defeito, a lista está vazia, o que significa a utilização dos ângulos predefinidos (que alternam entre 45 e 135 graus se as interfaces forem" +" bastante espessas ou 90 graus)." + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +msgstr "Direções da linha do teto do suporte" + +#: 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 "Uma lista de ângulos (números inteiros) relativos às direções de linha a utilizar. Os valores da lista são utilizados em sequência, à medida que as camadas" +" progridem, voltando ao início assim que a lista chega ao fim. Os itens da lista são separados por vírgulas e a lista completa é escrita entre parênteses" +" retos. Por defeito, a lista está vazia, o que significa a utilização dos ângulos predefinidos (que alternam entre 45 e 135 graus se as interfaces forem" +" bastante espessas ou 90 graus)." + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +msgstr "Direções da linha do piso do suporte" + +#: 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 "Lista de ângulos (números inteiros) relativos às direções de linha a utilizar. Os valores da lista são utilizados em sequência, à medida que as camadas" +" progridem, voltando ao início assim que a lista chega ao fim. Os itens da lista são separados por vírgulas e a lista completa é escrita entre parênteses" +" retos. Por defeito, a lista está vazia, o que significa a utilização dos ângulos predefinidos (que alternam entre 45 e 135 graus se as interfaces forem" +" bastante espessas ou 90 graus)." + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3934,14 +4245,14 @@ msgid "The diameter of a special tower." msgstr "O diâmetro de uma torre especial." #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "Diâmetro mínimo" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "Diâmetro Máximo Suportado pela Torre" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." -msgstr "O diâmetro mínimo nas direções X/Y de uma pequena área que deverá ser suportada por uma torre de suporte especializada." +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "O diâmetro máximo nas direções X/Y de uma pequena área que deverá ser suportada por uma torre de suporte especializada." #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" @@ -4014,17 +4325,17 @@ msgstr "Modos de Aderência" #: fdmprinter.def.json msgctxt "adhesion_type description" msgid "Different options that help to improve both priming your extrusion and adhesion to the build plate. Brim adds a single layer flat area around the base of your model to prevent warping. Raft adds a thick grid with a roof below the model. Skirt is a line printed around the model, but not connected to the model." -msgstr "Diferentes modos que ajudam a melhorar a aderência à base de construção, assim como a preparação inicial da extrusão.

Contorno (Skirt) imprime uma linha paralela ao perímetro do modelo.
Aba (Brim) acrescenta uma única camada em torno da base do modelo para prevenir empenos ou deformações na parte inferior dos modelos.
Raft adiciona uma plataforma, composta por uma grelha espessa e um tecto, entre o modelo e a base de construção." +msgstr "Diferentes modos que ajudam a melhorar a aderência à base de construção, assim como a preparação inicial da extrusão. \"Aba\" acrescenta uma única camada em torno da base do modelo para prevenir empenos ou deformações na parte inferior dos modelos. \"Raft\" adiciona uma plataforma, composta por uma grelha espessa e um teto, entre o modelo e a base de construção. \"Contorno\" é uma linha impressa à volta do modelo, mas que não está ligada ao modelo." #: fdmprinter.def.json msgctxt "adhesion_type option skirt" msgid "Skirt" -msgstr "Contorno (Skirt)" +msgstr "Contorno" #: fdmprinter.def.json msgctxt "adhesion_type option brim" msgid "Brim" -msgstr "Aba (Brim)" +msgstr "Aba" #: fdmprinter.def.json msgctxt "adhesion_type option raft" @@ -4044,7 +4355,7 @@ msgstr "Extrusor para Aderência" #: fdmprinter.def.json msgctxt "adhesion_extruder_nr description" msgid "The extruder train to use for printing the skirt/brim/raft. This is used in multi-extrusion." -msgstr "O núcleo de extrusão utilizado para imprimir o Contorno / Aba / Raft. Definição usada com múltiplos extrusores." +msgstr "O núcleo de extrusão utilizado para imprimir o Contorno/Aba/Raft. Definição usada com múltiplos extrusores." #: fdmprinter.def.json msgctxt "skirt_line_count label" @@ -4103,12 +4414,12 @@ msgstr "O número de linhas utilizado para uma aba. Um maior número de linhas d #: fdmprinter.def.json msgctxt "brim_replaces_support label" msgid "Brim Replaces Support" -msgstr "A borda substitui o suporte" +msgstr "A aba substitui o suporte" #: fdmprinter.def.json msgctxt "brim_replaces_support description" msgid "Enforce brim to be printed around the model even if that space would otherwise be occupied by support. This replaces some regions of the first layer of support by brim regions." -msgstr "Aplicar a borda para ser impressa em torno do modelo, mesmo se esse espaço fosse ocupado de outra forma pelo suporte. Isto substitui algumas regiões da primeira camada do suporte por regiões de borda." +msgstr "Aplicar a aba para ser impressa em torno do modelo, mesmo se esse espaço fosse ocupado de outra forma pelo suporte. Isto substitui algumas regiões da primeira camada do suporte por regiões de aba." #: fdmprinter.def.json msgctxt "brim_outside_only label" @@ -4169,7 +4480,7 @@ msgstr "Camadas Superiores do Raft" #: fdmprinter.def.json msgctxt "raft_surface_layers description" msgid "The number of top layers on top of the 2nd raft layer. These are fully filled layers that the model sits on. 2 layers result in a smoother top surface than 1." -msgstr "O número de camadas superiores impressas em cima da camada do meio do raft. Estas são as camadas, totalmente preenchidas, onde o modelo assenta. Duas camadas resultam numa superfície superior mais uniforme, do que só uma camada." +msgstr "O número de camadas superiores impressas em cima da camada do meio do raft. Estas são as camadas, totalmente preenchidas, onde o modelo assenta. Duas camadas resultam numa superfície superior mais uniforme do que só uma camada." #: fdmprinter.def.json msgctxt "raft_surface_thickness label" @@ -4441,16 +4752,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "Imprime uma torre próxima da impressão que prepara o material depois de cada substituição do nozzle." -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "Torre de preparação circular" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "Faça a torre de preparação como uma forma circular." - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4491,16 +4792,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "A coordenada Y da posição da torre de preparação." -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "Fluxo da torre de preparação" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "Compensação de fluxo: a quantidade de material extrudido é multiplicada por este valor." - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4514,12 +4805,12 @@ msgstr "Após a impressão da torre de preparação com um nozzle, limpe o mater #: fdmprinter.def.json msgctxt "prime_tower_brim_enable label" msgid "Prime Tower Brim" -msgstr "" +msgstr "Aba da torre de preparação" #: fdmprinter.def.json msgctxt "prime_tower_brim_enable description" msgid "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type." -msgstr "" +msgstr "As torres de preparação poderão necessitar de uma aderência adicional concedida por uma aba, ainda que o modelo não o necessite. Atualmente, não é possível utilizá-la com o tipo de aderência \"Raft\"." # rever! #: fdmprinter.def.json @@ -4828,8 +5119,8 @@ msgstr "\"Spiralize\" Suavizar Contornos" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." -msgstr "Suaviza os contornos, criados pelo \"Spiralize\", para reduzir a visibilidade da junta Z (a junta Z deve ser praticamente imperceptível na impressão, mas continuará a ser visível na visualização por camadas). Ter em conta que a suavização tenderá a reduzir/desfocar pequenos detalhes da superfície." +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgstr "Suaviza os contornos, criados pelo \"Spiralize\", para reduzir a visibilidade da junta Z (a junta Z deve ser praticamente impercetível na impressão, mas continuará a ser visível na visualização por camadas). Tenha em conta que a suavização tenderá a reduzir/desfocar pequenos detalhes da superfície." #: fdmprinter.def.json msgctxt "relative_extrusion label" @@ -4839,7 +5130,7 @@ msgstr "Extrusão relativa" #: fdmprinter.def.json msgctxt "relative_extrusion description" msgid "Use relative extrusion rather than absolute extrusion. Using relative E-steps makes for easier post-processing of the g-code. However, it's not supported by all printers and it may produce very slight deviations in the amount of deposited material compared to absolute E-steps. Irrespective of this setting, the extrusion mode will always be set to absolute before any g-code script is output." -msgstr "Utilizar a extrusão relativa em vez da extrusão absoluta. A utilização de passos-E relativos facilita o pós-processamento do g-code. Contudo, isto não é compatível com todas as impressoras e poderá produzir ligeiros desvios na quantidade de material depositado em comparação com os passos-E absolutos. Não considerando esta definição, o modo de extrusão será sempre definido como absoluto antes da exportação de qualquer script g-code." +msgstr "Utilizar a extrusão relativa em vez da extrusão absoluta. A utilização de passos-E relativos facilita o pós-processamento do G-code. Contudo, isto não é compatível com todas as impressoras e poderá produzir ligeiros desvios na quantidade de material depositado em comparação com os passos-E absolutos. Não considerando esta definição, o modo de extrusão será sempre definido como absoluto antes da exportação de qualquer script g-code." #: fdmprinter.def.json msgctxt "experimental label" @@ -5051,7 +5342,7 @@ msgstr "Resolução 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 "O tamanho mínimo de um segmento após o seccionamento. Se aumentar este valor, a malha terá uma resolução menor. Isto poderá permitir que a impressora acompanhe a velocidade que tem para processar o g-code e irá aumentar a velocidade de seccionamento ao remover os detalhes da malha que não podem ser processados." +msgstr "O tamanho mínimo de um segmento após o seccionamento. Se aumentar este valor, a malha terá uma resolução menor. Isto poderá permitir que a impressora acompanhe a velocidade que tem para processar o G-code e irá aumentar a velocidade de seccionamento ao remover os detalhes da malha que não podem ser processados." #: fdmprinter.def.json msgctxt "meshfix_maximum_travel_resolution label" @@ -5061,17 +5352,18 @@ msgstr "Resolução Máxima Deslocação" #: 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 "O tamanho mínimo de um segmento de deslocação após o seccionamento. Se aumentar este valor, o movimento de deslocação nos cantos será menos suave. Isto poderá permitir que a impressora acompanhe a velocidade que tem para processar o g-code, mas pode reduzir a precisão do movimento ao evitar as peças já impressas." +msgstr "O tamanho mínimo de um segmento de deslocação após o seccionamento. Se aumentar este valor, o movimento de deslocação nos cantos será menos suave. Isto poderá permitir que a impressora acompanhe a velocidade que tem para processar o G-code, mas pode reduzir a precisão do movimento ao evitar as peças já impressas." #: fdmprinter.def.json msgctxt "meshfix_maximum_deviation label" msgid "Maximum Deviation" -msgstr "" +msgstr "Desvio máximo" #: 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." -msgstr "" +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 "O desvio máximo permitido ao reduzir a resolução da definição de Resolução máxima. Se aumentar esta definição, a impressão será menos precisa, mas o G-code" +" será menor. O Desvio máximo é um limite para a Resolução máxima, pelo que, se estiverem em conflito, o Desvio máximo é sempre considerado verdadeiro." # rever! # Is the english string correct? for the label? @@ -5344,8 +5636,8 @@ msgstr "Ativar suporte cónico" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "Funcionalidade experimental: torna as áreas de suporte mais reduzidas na parte inferior do que na saliência." +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "Torna as áreas de suporte mais reduzidas na parte inferior do que na saliência." #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5689,7 +5981,7 @@ msgstr "Distância entre o nozzle e as linhas horizontais descendentes. Uma maio #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled label" msgid "Use Adaptive Layers" -msgstr "" +msgstr "Utilizar camadas adaptáveis" #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled description" @@ -5699,7 +5991,7 @@ msgstr "Camadas Adaptáveis calcula as espessuras das camadas conforme a forma d #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation label" msgid "Adaptive Layers Maximum Variation" -msgstr "" +msgstr "Variação máxima das camadas adaptáveis" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" @@ -5709,7 +6001,7 @@ msgstr "A diferença máxima de espessura permitida em relação ao valor base d #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" msgid "Adaptive Layers Variation Step Size" -msgstr "" +msgstr "Tamanho da fase de variação das camadas adaptáveis" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step description" @@ -5719,7 +6011,7 @@ msgstr "A diferença de espessura da camada seguinte em comparação com a anter #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold label" msgid "Adaptive Layers Threshold" -msgstr "" +msgstr "Limiar das camadas adaptáveis" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" @@ -5764,7 +6056,7 @@ msgstr "Comprimento mínimo da parede de Bridge" #: fdmprinter.def.json msgctxt "bridge_wall_min_length description" msgid "Unsupported walls shorter than this will be printed using the normal wall settings. Longer unsupported walls will be printed using the bridge wall settings." -msgstr "Paredes sem suporte com comprimento menor que este valor serão impressas utilizando as definições de parede normais. Paredes sem suporte mais longas serão impressas utilizando as definições da parede de Bridge." +msgstr "Paredes sem suporte com comprimento menor que este valor serão impressas utilizando as definições de parede normais. Paredes sem suporte mais longas serão impressas utilizando as definições da parede de Bridge." #: fdmprinter.def.json msgctxt "bridge_skin_support_threshold label" @@ -5784,7 +6076,7 @@ msgstr "Desaceleração da parede de Bridge" #: fdmprinter.def.json msgctxt "bridge_wall_coast description" msgid "This controls the distance the extruder should coast immediately before a bridge wall begins. Coasting before the bridge starts can reduce the pressure in the nozzle and may produce a flatter bridge." -msgstr "Isto controla a distância que a extrusora deve desacelerar imediatamente antes do início de uma parede de Bridge. Desacelerar antes do início de Bridge pode reduzir a pressão no bocal e poderá produzir um vão mais liso." +msgstr "Isto controla a distância que o extrusor deve desacelerar imediatamente antes do início de uma parede de Bridge. Desacelerar antes do início de Bridge pode reduzir a pressão no nozzle e poderá produzir um vão mais liso." #: fdmprinter.def.json msgctxt "bridge_wall_speed label" @@ -5939,152 +6231,194 @@ msgstr "Percentagem da velocidade da ventoinha a ser utilizada ao imprimir a ter #: fdmprinter.def.json msgctxt "clean_between_layers label" msgid "Wipe Nozzle Between Layers" -msgstr "" +msgstr "Limpar nozzle entre camadas" #: fdmprinter.def.json msgctxt "clean_between_layers description" msgid "Whether to include nozzle wipe G-Code between layers. Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working." -msgstr "" +msgstr "Incluir ou não o G-code de limpeza do nozzle entre as camadas. Ativar esta definição poderá influenciar o comportamento de retração na mudança de camada. Utilize as definições de Retração de limpeza para controlar a retração nas camadas onde o script de limpeza estará em funcionamento." #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe label" msgid "Material Volume Between Wipes" -msgstr "" +msgstr "Volume de material entre limpezas" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe description" msgid "Maximum material, that can be extruded before another nozzle wipe is initiated." -msgstr "" +msgstr "Material máximo que pode ser extrudido antes de ser iniciada outra limpeza do nozzle." #: fdmprinter.def.json msgctxt "wipe_retraction_enable label" msgid "Wipe Retraction Enable" -msgstr "" +msgstr "Retração de limpeza ativada" #: fdmprinter.def.json msgctxt "wipe_retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area." -msgstr "" +msgstr "Retrai o filamento quando o nozzle está em movimento numa área sem impressão." #: fdmprinter.def.json msgctxt "wipe_retraction_amount label" msgid "Wipe Retraction Distance" -msgstr "" +msgstr "Distância de retração da limpeza" #: fdmprinter.def.json msgctxt "wipe_retraction_amount description" msgid "Amount to retract the filament so it does not ooze during the wipe sequence." -msgstr "" +msgstr "Quantidade de filamento a retrair para não escorrer durante a sequência de limpeza." #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount label" msgid "Wipe Retraction Extra Prime Amount" -msgstr "" +msgstr "Quantidade de preparação adicional de retração de limpeza" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount description" msgid "Some material can ooze away during a wipe travel moves, which can be compensated for here." -msgstr "" +msgstr "Pode ocorrer escorrimento de material durante um movimento de deslocação de limpeza, o qual pode ser compensado aqui." #: fdmprinter.def.json msgctxt "wipe_retraction_speed label" msgid "Wipe Retraction Speed" -msgstr "" +msgstr "Velocidade de retração de limpeza" #: fdmprinter.def.json msgctxt "wipe_retraction_speed description" msgid "The speed at which the filament is retracted and primed during a wipe retraction move." -msgstr "" +msgstr "A velocidade a que o filamento é retraído e preparado durante um movimento de retração de limpeza." #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed label" msgid "Wipe Retraction Retract Speed" -msgstr "" +msgstr "Velocidade de retração na retração de limpeza" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed description" msgid "The speed at which the filament is retracted during a wipe retraction move." -msgstr "" +msgstr "A velocidade a que o filamento é retraído durante um movimento de retração de limpeza." #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "Velocidade de preparação na retração" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed description" msgid "The speed at which the filament is primed during a wipe retraction move." -msgstr "" +msgstr "A velocidade a que o filamento é preparado durante um movimento de retração de limpeza." #: fdmprinter.def.json msgctxt "wipe_pause label" msgid "Wipe Pause" -msgstr "" +msgstr "Pausa na limpeza" #: fdmprinter.def.json msgctxt "wipe_pause description" msgid "Pause after the unretract." -msgstr "" +msgstr "Coloca a limpeza em pausa após anular a retração." #: fdmprinter.def.json msgctxt "wipe_hop_enable label" msgid "Wipe Z Hop When Retracted" -msgstr "" +msgstr "Salto Z de limpeza ao retrair" #: fdmprinter.def.json msgctxt "wipe_hop_enable description" msgid "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." -msgstr "" +msgstr "Sempre que for efetuada uma retração, a base de construção é baixada para criar uma folga entre o nozzle e a impressão. Desta forma, evita-se que o nozzle atinja a impressão durante os movimentos de deslocação, reduzindo a probabilidade de derrubar a impressão da base de construção." #: fdmprinter.def.json msgctxt "wipe_hop_amount label" msgid "Wipe Z Hop Height" -msgstr "" +msgstr "Altura do salto Z de limpeza" #: fdmprinter.def.json msgctxt "wipe_hop_amount description" msgid "The height difference when performing a Z Hop." -msgstr "" +msgstr "A diferença de altura ao efetuar um salto Z." #: fdmprinter.def.json msgctxt "wipe_hop_speed label" msgid "Wipe Hop Speed" -msgstr "" +msgstr "Velocidade do salto de limpeza" #: fdmprinter.def.json msgctxt "wipe_hop_speed description" msgid "Speed to move the z-axis during the hop." -msgstr "" +msgstr "Velocidade para mover o eixo Z durante o salto." #: fdmprinter.def.json msgctxt "wipe_brush_pos_x label" msgid "Wipe Brush X Position" -msgstr "" +msgstr "Posição X da escova de limpeza" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x description" msgid "X location where wipe script will start." -msgstr "" +msgstr "Localização X onde o script de limpeza será iniciado." #: fdmprinter.def.json msgctxt "wipe_repeat_count label" msgid "Wipe Repeat Count" -msgstr "" +msgstr "Contagem de repetições de limpeza" #: fdmprinter.def.json msgctxt "wipe_repeat_count description" msgid "Number of times to move the nozzle across the brush." -msgstr "" +msgstr "Número de vezes que o nozzle deve ser passado pela escova." #: fdmprinter.def.json msgctxt "wipe_move_distance label" msgid "Wipe Move Distance" -msgstr "" +msgstr "Distância do movimento de limpeza" #: fdmprinter.def.json msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." -msgstr "" +msgstr "A distância de deslocação da cabeça para trás e para a frente pela escova." + +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "Tamanho máximo do buraco pequeno" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "Os buracos e os contornos das peças com um diâmetro inferior a este valor serão impressos à Velocidade de elemento pequeno." + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "Comprimento máximo do elemento pequeno" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "Os contornos do elemento com um comprimento inferior a este serão impressos à Velocidade de elemento pequeno." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +msgstr "Velocidade de elemento pequeno" + +#: 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 "Os elementos pequenos serão impressos a esta percentagem da velocidade de impressão normal. A impressão mais lenta poderá contribuir para uma maior aderência" +" e precisão." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor_0 label" +msgid "First Layer Speed" +msgstr "Velocidade da primeira camada" + +#: 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 "Os elementos pequenos da primeira camada serão impressos a esta percentagem da velocidade de impressão normal. A impressão mais lenta poderá contribuir" +" para uma maior aderência e precisão." #: fdmprinter.def.json msgctxt "command_line_settings label" @@ -6146,6 +6480,97 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Matriz de transformação a ser aplicada ao modelo quando abrir o ficheiro." +# O objetivo é derreter mais o plástico das superfícies superiores, criando uma superfície mais uniforme. +#~ 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 "Passar com o nozzle uma vez mais, sobre as superfícies superiores, mas sem extrudir material. O objetivo é criar superfícies mais suaves/lisas, ao derreter (\"engomar\") o plástico das superfícies superiores." + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "Começar Camadas Mesmo Objecto" + +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "Em cada camada, começar a imprimir o objeto perto do mesmo ponto, para não se começar a imprimir uma nova camada com a peça com a qual se terminou a camada anterior. O que resulta em melhores impressões de saliências e de pequenos objectos, mas aumenta o tempo de impressão." + +#~ msgctxt "support_infill_angles description" +#~ msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +#~ msgstr "Orientação do padrão de enchimento para suportes. O padrão de enchimento do suporte gira no plano horizontal." + +#~ 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." +#~ msgstr "O desvio máximo permitido ao reduzir a resolução da definição de Resolução máxima. Se aumentar esta definição, a impressão será menos precisa, mas o G-code será inferior." + +#~ msgctxt "machine_gcode_flavor label" +#~ msgid "G-code Flavour" +#~ msgstr "Variante de G-code" + +# rever! +# torna mais provável que esta surja num canto +# aconteça? surja? apareça? +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "Controla se os cantos do contorno do modelo influenciam a posição da junta. Nenhum significa que os cantos não influenciam a posição da junta. Ocultar Junta faz com que seja mais provável que a junta surja num canto interior. Expor Junta faz com que seja mais provável que a junta aconteça num canto exterior. Ocultar ou Expor Junta faz com que seja mais provável que a junta aconteça num canto interior ou exterior." + +# rever! +# gaps? Espaços? intervalos? folgas? +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "Ignorar Pequenos Espaços Z" + +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "Quando o modelo tem pequenos espaços verticais, cerca de mais 5% de tempo de cálculo pode ser despendido na criação das superfícies de revestimentos superior e inferior nestes pequenos espaços. Nesse caso desative esta definição." + +#~ msgctxt "build_volume_temperature description" +#~ msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +#~ msgstr "A temperatura utilizada para o volume de construção. Se for 0, a temperatura do volume de construção não será ajustada." + +#~ msgctxt "limit_support_retractions description" +#~ msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +#~ msgstr "Eliminar a retração quando o movimento de suporte para suporte é em linha recta. Ativar esta definição reduz o tempo de impressão, mas pode levar a que aja um excessivo numero de fios nas estruturas de suporte." + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "Velocidade Z máxima" + +# a que a base de construção é movida. Defini-la como zero +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "A velocidade máxima do movimento da base de construção. Definir esta como zero faz com que a impressão utilize as predefinições de firmware para a velocidade Z máxima." + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "A distância máxima entre as estruturas de suporte nas direções X/Y. Quando a distância entre as estruturas de suporte for menor do que este valor, as estruturas fundem-se numa só." + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "Diâmetro mínimo" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "O diâmetro mínimo nas direções X/Y de uma pequena área que deverá ser suportada por uma torre de suporte especializada." + +#~ msgctxt "prime_tower_circular label" +#~ msgid "Circular Prime Tower" +#~ msgstr "Torre de preparação circular" + +#~ msgctxt "prime_tower_circular description" +#~ msgid "Make the prime tower as a circular shape." +#~ msgstr "Faça a torre de preparação como uma forma circular." + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "Compensação de fluxo: a quantidade de material extrudido é multiplicada por este valor." + +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "Suaviza os contornos, criados pelo \"Spiralize\", para reduzir a visibilidade da junta Z (a junta Z deve ser praticamente imperceptível na impressão, mas continuará a ser visível na visualização por camadas). Ter em conta que a suavização tenderá a reduzir/desfocar pequenos detalhes da superfície." + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "Funcionalidade experimental: torna as áreas de suporte mais reduzidas na parte inferior do que na saliência." + #~ msgctxt "extruders_enabled_count label" #~ msgid "Number of Extruders that are enabled" #~ msgstr "O numero de Extrusores que estão activos" diff --git a/resources/i18n/ru_RU/cura.po b/resources/i18n/ru_RU/cura.po index d861a3ad54..7c7521b1c3 100644 --- a/resources/i18n/ru_RU/cura.po +++ b/resources/i18n/ru_RU/cura.po @@ -5,20 +5,20 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" -"PO-Revision-Date: 2019-03-14 14:45+0100\n" -"Last-Translator: Bothof \n" -"Language-Team: Ruslan Popov , Russian \n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" +"PO-Revision-Date: 2019-07-29 15:51+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Russian , Ruslan Popov , Russian \n" "Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.1.1\n" +"X-Generator: Poedit 2.2.3\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "Параметры принтера" @@ -85,36 +85,45 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Профиль был нормализован и активирован." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "Файл AMF" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "Печать через USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "Печатать через USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "Печатать через USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "Подключено через USB" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "Выполняется печать через USB, закрытие Cura остановит эту печать. Вы уверены?" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 -msgctxt "X3G Writer File Description" -msgid "X3G File" -msgstr "Файл X3G" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "Печать еще выполняется. Cura не может начать другую печать через USB, пока предыдущая печать не будет завершена." + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +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" @@ -126,6 +135,11 @@ 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" @@ -160,7 +174,7 @@ msgid "Save to Removable Drive {0}" msgstr "Сохранить на внешний носитель {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Ни один из форматов файлов не доступен для записи!" @@ -197,10 +211,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/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "Ошибка" @@ -229,9 +242,9 @@ 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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "Внимание" @@ -258,347 +271,149 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Внешний носитель" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "Печать через сеть" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "Печать через сеть" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "Подключен по сети." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "Подключен по сети. Пожалуйста, подтвердите запрос на принтере." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "Подключен по сети. Нет доступа к управлению принтером." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "Запрошен доступ к принтеру. Пожалуйста, подтвердите запрос на принтере" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "Состояние аутентификации" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "Состояние аутентификации" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "Повторить" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "Послать запрос доступа ещё раз" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "Доступ к принтеру получен" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "Нет доступа к использованию этого принтера. Невозможно отправить задачу на печать." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "Запросить доступ" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "Отправить запрос на доступ к принтеру" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "Не удалось начать новое задание печати." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "Возникла проблема конфигурации Ultimaker, из-за которой невозможно начать печать. Перед продолжением работы решите возникшую проблему." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "Несовпадение конфигурации" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "Вы уверены, что желаете печатать с использованием выбранной конфигурации?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Есть несовпадение между конфигурацией или калибровкой принтера и Cura. Для лучшего результата, всегда производите слайсинг для PrintCore и материала, которые установлены в вашем принтере." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "Отправка новых заданий (временно) заблокирована, идёт отправка предыдущего задания." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "Отправка данных на принтер" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "Отправка данных" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "Отмена" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "Модуль экструдера PrintCore не загружен в слот {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "Материал не загружен в слот {slot_number}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "Другой модуль экструдера PrintCore (Cura: {cura_printcore_name}, принтер: {remote_printcore_name}) выбран для экструдера {extruder_id}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "Разный материал (Cura: {0}, Принтер: {1}) выбран для экструдера {2}" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "Синхронизация с вашим принтером" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "Желаете использовать текущую конфигурацию принтера в Cura?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Модуль PrintCore и/или материал в вашем принтере отличается от тех, что вы используете в текущем проекте. Для наилучшего результата всегда указывайте правильный модуль PrintCore и материалы, которые вставлены в ваш принтер." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "Подключен по сети" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "Задание печати успешно отправлено на принтер." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "Данные отправлены" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "Просмотр на мониторе" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "{printer_name} завершил печать '{job_name}'." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "Задание печати '{job_name}' выполнено." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "Печать завершена" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "Пусто" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "Неизвестн" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "Печать через облако" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "Печать через облако" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "Подключено через облако" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "Ошибка облака" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "Облако не экспортировало задание печати." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "Облако не залило данные на принтер." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "завтра" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "сегодня" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "При подключении к облаку возникла ошибка." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Отправляйте и отслеживайте задания печати из любого места с помощью вашей учетной записи Ultimaker." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "Не спрашивать меня снова для этого принтера." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "Приступить" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Теперь вы можете отправлять и отслеживать задания печати из любого места с помощью вашей учетной записи Ultimaker." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "Подключено!" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "Проверьте свое подключение" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Подключиться через сеть" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" -msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +msgctxt "@action:button Preceded by 'Ready to'." +msgid "Print over network" +msgstr "Печать через сеть" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "Печать через сеть" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "Подключен по сети" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "Дождитесь окончания отправки текущего задания." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "Ошибка печати" + +#: /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 "Вы пытаетесь подключиться к {0}, но это не главный принтер группы. Откройте веб-страницу, чтобы настроить его в качестве главного принтера группы." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "Не главный принтер группы" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "Настроить группу" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "Отправляйте и отслеживайте задания печати из любого места с помощью вашей учетной записи Ultimaker." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "Подключиться к облаку Ultimaker Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "Приступить" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "Отправка задания печати" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "Загрузка задания печати в принтер." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "Задание печати успешно отправлено на принтер." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "Данные отправлены" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "Вы пытаетесь подключиться к принтеру, на котором не работает Ultimaker Connect. Обновите прошивку принтера до последней версии." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "Обновите свой принтер" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "Cura обнаружены профили материалов, которые пока не установлены в главном принтере группы {0}." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "Отправка материалов на принтер" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "Облако не залило данные на принтер." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "Ошибка сети" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "завтра" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "сегодня" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "Печать через облако" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "Печать через облако" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" +msgstr "Подключено через облако" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Монитор" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "Не могу получить информацию об обновлениях." @@ -625,12 +440,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Просмотр слоёв" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Cura не аккуратно отображает слои при использовании печати через кабель" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "Вид моделирования" @@ -685,6 +500,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF изображение" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "Open Compressed Triangle Mesh" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "COLLADA Digital Asset Exchange" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "glTF Binary" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "glTF Embedded JSON" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "Stanford Triangle Format" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "Compressed COLLADA Digital Asset Exchange" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -765,19 +610,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "Файл 3MF" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "Сопло" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "Открыть файл проекта" @@ -792,18 +637,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "Файл G" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "Обработка G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "Параметры G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Перед отправкой G-code на принтер удостоверьтесь в его соответствии вашему принтеру и его настройкам. Возможны неточности в G-code." @@ -906,16 +751,16 @@ msgstr "Вход не выполнен" #: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33 msgctxt "@info:not supported profile" msgid "Not supported" -msgstr "" +msgstr "Не поддерживается" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 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:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -928,116 +773,109 @@ msgid "Invalid file URL:" msgstr "Неправильный URL-адрес файла:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" -msgstr "Настройки изменены в соответствии с текущей доступностью экструдеров: [%s]" +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 msgctxt "@info:title" msgid "Settings updated" msgstr "Настройки обновлены" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "Экструдер (-ы) отключен (-ы)" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, 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:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, 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:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, 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:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "Экспорт успешно завершен" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, 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:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, 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:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, 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:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, 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:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "Принтер, заданный в профиле {0} ({1}), не совпадает с вашим текущим принтером ({2}), поэтому его невозможно импортировать." - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Успешно импортирован профиль {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, 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:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, 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:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "Собственный профиль" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "У профайла отсутствует тип качества." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1086,7 +924,7 @@ msgstr "Юбка" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:84 msgctxt "@tooltip" msgid "Prime Tower" -msgstr "" +msgstr "Черновая башня" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:85 msgctxt "@tooltip" @@ -1115,7 +953,7 @@ msgctxt "@action:button" msgid "Next" msgstr "Следующий" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1123,22 +961,36 @@ 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/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "Закрыть" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" 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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "Отмена" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1155,23 +1007,22 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Все файлы (*)" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" -msgstr "" +msgstr "Перечисленные ниже принтеры невозможно подключить, поскольку они входят в состав группы" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" -msgstr "" +msgstr "Доступные сетевые принтеры" #: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689 msgctxt "@label" @@ -1184,12 +1035,12 @@ msgctxt "@label" msgid "Custom" msgstr "Своё" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "Высота печатаемого объёма была уменьшена до значения параметра \"Последовательность печати\", чтобы предотвратить касание портала за напечатанные детали." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "Объём печати" @@ -1207,46 +1058,51 @@ msgstr "Попытка восстановить резервную копию Cu #: /home/ruben/Projects/Cura/cura/Backups/Backup.py:125 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that is higher than the current version." -msgstr "" +msgstr "Выполнена попытка восстановить резервную копию Cura с более поздней версией, чем текущая." #: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationHelpers.py:79 msgctxt "@message" msgid "Could not read response." -msgstr "" +msgstr "Не удалось прочитать ответ." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 msgctxt "@info" msgid "Unable to reach the Ultimaker account server." msgstr "Нет связи с сервером учетных записей Ultimaker." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:66 +#: /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." -msgstr "" +msgstr "Дайте необходимые разрешения при авторизации в этом приложении." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "Возникла непредвиденная ошибка при попытке входа в систему. Повторите попытку." -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "Размножение и размещение объектов" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "Размещение объектов" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Невозможно разместить все объекты внутри печатаемого объёма" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "Размещение объекта" @@ -1395,48 +1251,48 @@ msgstr "Журналы" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" -msgstr "Описание пользователя" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" +msgstr "Пользовательское описание (примечание: по возможности пишите на английском языке, так как разработчики могут не знать вашего языка)" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "Отправить отчёт" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Загрузка принтеров..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Настройка сцены..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Загрузка интерфейса..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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 мм" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, 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:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, 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:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Выбранная модель слишком мала для загрузки." @@ -1444,103 +1300,108 @@ msgstr "Выбранная модель слишком мала для загр #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58 msgctxt "@title:label" msgid "Printer Settings" -msgstr "" +msgstr "Параметры принтера" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X (Ширина)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "мм" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Глубина)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Высота)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "Форма стола" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" -msgstr "" +msgstr "Начало координат в центре" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" -msgstr "" +msgstr "Нагреваемый стол" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "Подогреваемый объем печати" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "Вариант G-кода" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" -msgstr "" +msgstr "Параметры головы" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X минимум" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y минимум" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "X максимум" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "Y максимум" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" -msgstr "" +msgstr "Высота портала" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "Количество экструдеров" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" -msgstr "" +msgstr "Стартовый G-код" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" -msgstr "" +msgstr "Завершающий G-код" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:42 msgctxt "@title:tab" @@ -1550,7 +1411,7 @@ msgstr "Принтер" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:63 msgctxt "@title:label" msgid "Nozzle Settings" -msgstr "" +msgstr "Параметры сопла" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:75 msgctxt "@label" @@ -1567,25 +1428,25 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "Смещение сопла по оси X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Смещение сопла по оси Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "Номер охлаждающего вентилятора" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" -msgstr "" +msgstr "Стартовый G-код экструдера" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" -msgstr "" +msgstr "Завершающий G-код экструдера" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 msgctxt "@action:button" @@ -1593,7 +1454,7 @@ msgid "Install" msgstr "Установить" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "Установлено" @@ -1608,16 +1469,16 @@ msgctxt "@label" msgid "ratings" msgstr "оценки" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "Плагины" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "Материалы" @@ -1627,49 +1488,49 @@ msgctxt "@label" msgid "Your rating" msgstr "Ваша оценка" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "Версия" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "Последнее обновление" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "Автор" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "Загрузки" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "Для выполнения установки или обновления необходимо войти" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" -msgstr "" +msgstr "Приобретение катушек с материалом" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "Обновить" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "Обновление" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1730,17 +1591,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "Выйти из Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "Вклад в развитие сообщества" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "Плагины сообщества" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "Универсальные материалы" @@ -1801,27 +1662,52 @@ msgctxt "@label" msgid "Featured" msgstr "Рекомендуемые" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "Совместимость" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +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" +msgstr "Рабочий стол" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "Поддержки" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "Качество" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "Таблица технических характеристик" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "Паспорт безопасности" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "Инструкции по печати" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "Веб-сайт" @@ -1921,70 +1807,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Обновление прошивки не удалось из-за её отсутствия." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "Управление принтером" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "Стекло" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." -msgstr "Указанные опции недоступны, поскольку вы отслеживаете облачный принтер." +msgid "Please update your printer's firmware to manage the queue remotely." +msgstr "Для удаленного управления очередью необходимо обновить программное обеспечение принтера." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "Веб-камера недоступна, поскольку вы отслеживаете облачный принтер." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "Загрузка..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "Недоступен" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "Недостижимо" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "Простой" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "Без имени" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "Анонимн" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "Необходимо внести изменения конфигурации" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "Подробности" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "Недоступный принтер" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "Первое доступное" @@ -1994,197 +1886,180 @@ msgctxt "@label" msgid "Queued" msgstr "Запланировано" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" -msgstr "Перейти к Cura Connect" +msgid "Manage in browser" +msgstr "Управление через браузер" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "В очереди нет заданий печати. Выполните нарезку и отправьте задание." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "Задания печати" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "Общее время печати" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "Ожидание" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "Просмотреть архив печати" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "Текущее подключение" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "Этот принтер/группа уже добавлен (-а) в Cura. Выберите другой (-ую) принтер/группу." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Подключение к сетевому принтеру" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" -msgstr "" -"Для печати на вашем принтере через сеть, пожалуйста, удостоверьтесь, что ваш принтер подключен к сети с помощью кабеля или через WiFi. Если вы не подключили Cura к вашему принтеру, вы по-прежнему можете использовать USB флешку для переноса G-Code файлов на ваш принтер.\n" -"\n" -"Укажите ваш принтер в списке ниже:" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." +msgstr "Для печати непосредственно на принтере через сеть необходимо подключить принтер к сети с помощью сетевого кабеля или подключить его к сети Wi-Fi. Если вы не подключили Cura к принтеру, вы можете использовать USB-накопитель для переноса файлов G-Code на принтер." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "Выберите свой принтер из приведенного ниже списка:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "Правка" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "Удалить" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "Обновить" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Если ваш принтер отсутствует в списке, обратитесь к руководству по решению проблем с сетевой печатью" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "Тип" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /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:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /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:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 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:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 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:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "Принтер по этому адресу ещё не отвечал." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "Подключить" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" -msgstr "" +msgstr "Недействительный IP-адрес" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146 msgctxt "@text" msgid "Please enter a valid IP address." -msgstr "" +msgstr "Введите действительный IP-адрес." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "Адрес принтера" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." -msgstr "" +msgid "Enter the IP address of your printer on the network." +msgstr "Введите IP-адрес принтера в сети." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "OK" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "Прервано" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "Завершено" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "Подготовка..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "Прерывается..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "Приостановка..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "Приостановлено" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "Возобновляется..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "Необходимое действие" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "Завершение %1 в %2" @@ -2288,7 +2163,7 @@ msgctxt "@action:button" msgid "Override" msgstr "Переопределить" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" @@ -2296,66 +2171,58 @@ msgstr[0] "Для назначенного принтера %1 требуетс msgstr[1] "Для назначенного принтера %1 требуются следующие изменения конфигурации:" msgstr[2] "Для назначенного принтера %1 требуются следующие изменения конфигурации:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "Принтер %1 назначен, однако в задании указана неизвестная конфигурация материала." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "Изменить материал %1 с %2 на %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "Загрузите %3 как материал %1 (переопределение этого действия невозможно)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." msgstr "Изменить экструдер %1 с %2 на %3." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "Заменить рабочий стол на %1 (переопределение этого действия невозможно)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "При переопределении к имеющейся конфигурации принтера будут применены указанные настройки. Это может привести к ошибке печати." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "Алюминий" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "Подключение к принтеру" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" "Проверьте наличие подключения к принтеру:\n" "- Убедитесь, что принтер включен.\n" -"- Проверьте, подключен ли принтер к сети." +"- Убедитесь, что принтер подключен к сети.\n" +"- Убедитесь, что вы вошли в систему (это необходимо для поиска принтеров, подключенных к облаку)." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 msgctxt "@info" msgid "Please connect your printer to the network." -msgstr "" +msgstr "Подключите принтер к сети." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:156 msgctxt "@label link to technical assistance" @@ -2477,17 +2344,17 @@ msgstr "Дополнительная информация о сборе анон #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:74 msgctxt "@text:window" msgid "Ultimaker Cura collects anonymous data in order to improve the print quality and user experience. Below is an example of all the data that is shared:" -msgstr "" +msgstr "Ultimaker Cura собирает анонимные данные для повышения качества печати и улучшения взаимодействия с пользователем. Ниже приведен пример всех передаваемых данных:" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:109 msgctxt "@text:window" msgid "I don't want to send anonymous data" -msgstr "" +msgstr "Не хочу отправлять анонимные данные" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:118 msgctxt "@text:window" msgid "Allow sending anonymous data" -msgstr "" +msgstr "Разрешить отправку анонимных данных" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2537,7 +2404,7 @@ msgstr "Глубина (мм)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 msgctxt "@info:tooltip" msgid "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model." -msgstr "" +msgstr "Для литофании темные пиксели должны соответствовать более толстым частям, чтобы сильнее задерживать проходящий свет. Для схем высот более светлые пиксели обозначают более высокий участок. Поэтому более светлые пиксели должны соответствовать более толстым местам в созданной 3D-модели." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 msgctxt "@item:inlistbox" @@ -2662,7 +2529,7 @@ msgid "Printer Group" msgstr "Группа принтеров" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "Параметры профиля" @@ -2675,19 +2542,19 @@ msgstr "Как следует решать конфликт в профиле?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 msgctxt "@action:label" msgid "Name" msgstr "Название" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 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:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2861,18 +2728,24 @@ msgid "Previous" msgstr "Предыдущий" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "Кончик" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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 "Пробная печать" @@ -2992,155 +2865,155 @@ 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 мм. Это значение несовместимо с текущим экструдером. Продолжить?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "Отображаемое имя" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "Брэнд" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "Тип материала" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "Цвет" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "Свойства" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "Плотность" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "Диаметр" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "Стоимость материала" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "Вес материала" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "Длина материала" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "Стоимость метра" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "Отвязать материал" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "Описание" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "Информация об адгезии" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /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:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "Активировать" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "Создать" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "Дублировать" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "Импорт" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "Принтер" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "Подтвердите удаление" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 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:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "Импортировать материал" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 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:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "Экспортировать материал" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 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:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "Материал успешно экспортирован в %1" @@ -3181,388 +3054,411 @@ msgid "Unit" msgstr "Единица" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "Общее" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "Интерфейс" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "Язык:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "Валюта:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "Тема:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Нарезать автоматически при изменении настроек." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "Нарезать автоматически" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "Поведение окна" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "Отобразить нависания" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 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:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Центрировать камеру на выбранном объекте" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "Следует ли инвертировать стандартный способ увеличения в Cura?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Инвертировать направление увеличения камеры." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "Увеличивать по мере движения мышкой?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +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 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Увеличивать по движению мышки" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 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:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Удостовериться, что модели размещены рядом" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 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:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Автоматически опускать модели на стол" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "Показывать предупреждающее сообщение в средстве считывания G-кода." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "Предупреждающее сообщение в средстве считывания G-кода" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "Должен ли слой быть переведён в режим совместимости?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Просматривать слои в режиме совместимости (требуется перезапуск)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +msgctxt "@info:tooltip" +msgid "What type of camera rendering should be used?" +msgstr "Рендеринг камеры какого типа следует использовать?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "Рендеринг камеры: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "Перспективная" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "Ортографическая" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "Открытие и сохранение файлов" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 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:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "Масштабировать большие модели" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Масштабировать очень маленькие модели" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "Выбрать модели после их загрузки?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Выбрать модели при загрузке" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 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:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Добавить префикс принтера к имени задачи" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Показывать сводку при сохранении файла проекта?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Показывать сводку при сохранении проекта" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Стандартное поведение при открытии файла проекта" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Стандартное поведение при открытии файла проекта: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "Всегда спрашивать меня" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Всегда открывать как проект" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "Всегда импортировать модели" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "Профили" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 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:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /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:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "Всегда сбрасывать измененные настройки" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:discardOrKeep" msgid "Always transfer changed settings to new profile" msgstr "Всегда передавать измененные настройки новому профилю" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "Приватность" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 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:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Проверять обновления при старте" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "Отправлять (анонимно) информацию о печати" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "Дополнительная информация" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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:715 +#: /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:720 +#: /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:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "Принтеры" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "Переименовать" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419 msgctxt "@title:tab" msgid "Profiles" msgstr "Профили" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "Создать" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "Дублировать" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "Создать профиль" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 msgctxt "@info" msgid "Please provide a name for this profile." msgstr "Укажите имя для данного профиля." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Скопировать профиль" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "Переименовать профиль" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "Импорт профиля" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "Экспорт профиля" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Принтер: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /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:413 +#: /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:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Обновить профиль текущими параметрами" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "Сбросить текущие параметры" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 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:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Ваши текущие параметры совпадают с выбранным профилем." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "Общие параметры" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "Магазин" @@ -3625,33 +3521,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "параметры поиска" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Скопировать значение для всех экструдеров" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Копировать все измененные значения для всех экструдеров" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide 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 "Don't show this setting" msgstr "Не показывать этот параметр" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Оставить этот параметр видимым" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Видимость параметров..." @@ -3667,32 +3563,32 @@ msgstr "" "\n" "Щёлкните, чтобы сделать эти параметры видимыми." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." -msgstr "" +msgstr "Этот параметр не используется, поскольку все параметры, на которые он влияет, переопределяются." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "Влияет на" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "Зависит от" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 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:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "Значение получается из параметров каждого экструдера " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3703,7 +3599,7 @@ msgstr "" "\n" "Щёлкните для восстановления значения из профиля." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3719,7 +3615,7 @@ msgctxt "@button" msgid "Recommended" msgstr "Рекомендован" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "Свое" @@ -3744,12 +3640,12 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Генерация структур для поддержки нависающих частей модели. Без этих структур такие части будут складываться во время печати." -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "Прилипание" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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 "Разрешает печать каймы или подложки. Это добавляет плоскую область вокруг или под вашим объектом, которую легко удалить после печати." @@ -3767,7 +3663,7 @@ 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 "" +msgstr "Этот профиль качества недоступен для вашей текущей конфигурации материала и сопла. Измените эти параметры для задействования данного профиля качества." #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449 msgctxt "@tooltip" @@ -3803,7 +3699,7 @@ 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." -msgstr "" +msgstr "Настройка печати отключена. Невозможно изменить файл с G-кодом." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:52 msgctxt "@label" @@ -3835,59 +3731,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "Отправить G-код" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "Отправить свою команду в G-коде подключенному принтеру. Нажмите Enter (Ввод) для отправки команды." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "Экструдер" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "Целевая температура сопла. Сопло будет нагрето или остужено до указанной температуры. Если значение равно 0, то нагрев будет отключен." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "Текущая температура данного сопла." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "Температура предварительного нагрева сопла." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "Отмена" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "Преднагрев" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "Нагрев сопла перед печатью. Можно продолжать настройки вашей печати во время нагрева, и вам не понадобится ждать нагрева сопла, когда вы будете готовы приступить к печати." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "Цвет материала в данном экструдере." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "Материал в данном экструдере." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "Сопло, вставленное в данный экструдер." @@ -3932,11 +3828,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "Избранные" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -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" @@ -3952,32 +3843,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "Принтер" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "Материал" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Установить как активный экструдер" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Включить экструдер" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Отключить экструдер" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /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:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "Профиль" @@ -3987,7 +3878,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "Положение камеры" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "Вид камеры" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "Перспективная" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "Ортографическая" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "Рабочий стол" @@ -4007,17 +3913,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Управление видимостью настроек..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "&Сохранить..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "&Экспорт..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "Экспорт выбранного..." @@ -4108,22 +4014,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "Открыть недавние" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "Идёт печать" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "Имя задачи" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "Время печати" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "Осталось примерно" @@ -4131,12 +4037,17 @@ msgstr "Осталось примерно" #: /home/ruben/Projects/Cura/resources/qml/ViewsSelector.qml:50 msgctxt "@label" msgid "View type" -msgstr "" +msgstr "Просмотр типа" + +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "Список объектов" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" -msgstr "" +msgstr "Приветствуем, %1" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:33 msgctxt "@button" @@ -4165,6 +4076,9 @@ msgid "" "- Store your Ultimaker Cura settings in the cloud for use anywhere\n" "- Get exclusive access to print profiles from leading brands" msgstr "" +"- Отправляйте задания печати на принтеры Ultimaker за пределами вашей локальной сети\n" +"- Храните параметры Ultimaker Cura в облаке, чтобы применять их из любого места\n" +"- Получайте эксклюзивный доступ к профилям печати от ведущих брендов" #: /home/ruben/Projects/Cura/resources/qml/Account/GeneralOperations.qml:78 msgctxt "@button" @@ -4181,32 +4095,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "Оценка расходов недоступна" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "Предварительный просмотр" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Нарезка на слои..." -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" -msgstr "" +msgstr "Невозможно нарезать" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "Обработка" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "Нарезка на слои" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "Запустить нарезку на слои" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "Отмена" @@ -4214,12 +4133,12 @@ msgstr "Отмена" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:31 msgctxt "@label" msgid "Time estimation" -msgstr "" +msgstr "Оценка времени" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:114 msgctxt "@label" msgid "Material estimation" -msgstr "" +msgstr "Оценка материала" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:164 msgctxt "@label m for meter" @@ -4241,127 +4160,132 @@ msgctxt "@label" msgid "Preset printers" msgstr "Предварительно настроенные принтеры" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "Добавить принтер" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "Управление принтерами" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "Показать онлайн-руководство по решению проблем" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "Полный экран" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "Выйти из полноэкранного режима" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "Отмена" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "Возврат" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "Выход" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "Трехмерный вид" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "Вид спереди" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "Вид сверху" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "Вид слева" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "Вид справа" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Настроить Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "Добавить принтер..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Управление принтерами..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Управление материалами..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "Обновить профиль текущими параметрами" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "Сбросить текущие параметры" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "Создать профиль из текущих параметров..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Управление профилями..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Показать онлайн документацию" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Отправить отчёт об ошибке" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" -msgstr "" +msgstr "Что нового" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "О Cura..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" @@ -4369,7 +4293,7 @@ msgstr[0] "Удалить выбранную модель" msgstr[1] "Удалить выбранные модели" msgstr[2] "Удалить выбранные модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" @@ -4377,7 +4301,7 @@ msgstr[0] "Центрировать выбранную модель" msgstr[1] "Центрировать выбранные модели" msgstr[2] "Центрировать выбранные модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" @@ -4385,92 +4309,92 @@ msgstr[0] "Размножить выбранную модель" msgstr[1] "Размножить выбранные модели" msgstr[2] "Размножить выбранные модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Удалить модель" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Поместить модель по центру" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "Сгруппировать модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Разгруппировать модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "Объединить модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "Дублировать модель..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Выбрать все модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Очистить стол" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Перезагрузить все модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Выровнять все модели по всем рабочим столам" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Выровнять все модели" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Выровнять выбранные" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Сбросить позиции всех моделей" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Сбросить преобразования всех моделей" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "Открыть файл(ы)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "Новый проект..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Показать конфигурационный каталог" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "&Магазин" @@ -4485,52 +4409,52 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Этот пакет будет установлен после перезапуска." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "Параметры" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "Закрытие Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 msgctxt "@label" msgid "Are you sure you want to exit Cura?" msgstr "Вы уверены, что хотите выйти из Cura?" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /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:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "Установить пакет" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "Открыть файл(ы)" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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-кодом. Вы можете открыть только один файл за раз. Измените свой выбор, пожалуйста." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "Добавление принтера" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" -msgstr "" +msgstr "Что нового" #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 msgctxt "@label %1 is filled in with the name of an extruder" @@ -4753,32 +4677,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Сохранить проект" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /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:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "Экструдер %1" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 и материал" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" -msgstr "" +msgstr "Материал" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Больше не показывать сводку по проекту" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "Сохранить" @@ -4811,158 +4735,158 @@ msgstr "Импортировать модели" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DropDownWidget.qml:93 msgctxt "@label" msgid "Empty" -msgstr "" +msgstr "Пусто" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:24 msgctxt "@label" msgid "Add a printer" -msgstr "" +msgstr "Добавить принтер" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:39 msgctxt "@label" msgid "Add a networked printer" -msgstr "" +msgstr "Добавить сетевой принтер" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:81 msgctxt "@label" msgid "Add a non-networked printer" -msgstr "" +msgstr "Добавить принтер, не подключенный к сети" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:70 msgctxt "@label" msgid "Add printer by IP address" -msgstr "" +msgstr "Добавить принтер по IP-адресу" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:133 msgctxt "@text" msgid "Place enter your printer's IP address." -msgstr "" +msgstr "Введите IP-адрес своего принтера." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:158 msgctxt "@button" msgid "Add" -msgstr "" +msgstr "Добавить" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:204 msgctxt "@label" msgid "Could not connect to device." -msgstr "" +msgstr "Не удалось подключиться к устройству." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:208 msgctxt "@label" msgid "The printer at this address has not responded yet." -msgstr "" +msgstr "От принтера с этим адресом еще не поступал ответ." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:240 msgctxt "@label" msgid "This printer cannot be added because it's an unknown printer or it's not the host of a group." -msgstr "" +msgstr "Этот принтер невозможно добавить, поскольку это неизвестный принтер либо он не управляет группой." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:329 msgctxt "@button" msgid "Back" -msgstr "" +msgstr "Назад" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:342 msgctxt "@button" msgid "Connect" -msgstr "" +msgstr "Подключить" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/FirstStartMachineActionsContent.qml:77 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:123 msgctxt "@button" msgid "Next" -msgstr "" +msgstr "Следующий" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:23 msgctxt "@label" msgid "User Agreement" -msgstr "" +msgstr "Пользовательское соглашение" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:56 msgctxt "@button" msgid "Agree" -msgstr "" +msgstr "Принимаю" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:70 msgctxt "@button" msgid "Decline and close" -msgstr "" +msgstr "Отклонить и закрыть" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:24 msgctxt "@label" msgid "Help us to improve Ultimaker Cura" -msgstr "" +msgstr "Помогите нам улучшить Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:57 msgctxt "@text" msgid "Ultimaker Cura collects anonymous data to improve print quality and user experience, including:" -msgstr "" +msgstr "Ultimaker Cura собирает анонимные данные для повышения качества печати и улучшения взаимодействия с пользователем, включая перечисленные ниже:" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:71 msgctxt "@text" msgid "Machine types" -msgstr "" +msgstr "Типы принтера" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:77 msgctxt "@text" msgid "Material usage" -msgstr "" +msgstr "Использование материала" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:83 msgctxt "@text" msgid "Number of slices" -msgstr "" +msgstr "Количество слоев" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:89 msgctxt "@text" msgid "Print settings" -msgstr "" +msgstr "Параметры печати" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:102 msgctxt "@text" msgid "Data collected by Ultimaker Cura will not contain any personal information." -msgstr "" +msgstr "Данные, собранные Ultimaker Cura, не содержат каких-либо персональных данных." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:103 msgctxt "@text" msgid "More information" -msgstr "" +msgstr "Дополнительная информация" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WhatsNewContent.qml:24 msgctxt "@label" msgid "What's new in Ultimaker Cura" -msgstr "" +msgstr "Что нового в Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:42 msgctxt "@label" msgid "There is no printer found over your network." -msgstr "" +msgstr "В вашей сети не найден принтер." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:179 msgctxt "@label" msgid "Refresh" -msgstr "" +msgstr "Обновить" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:190 msgctxt "@label" msgid "Add printer by IP" -msgstr "" +msgstr "Добавить принтер по IP-адресу" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:223 msgctxt "@label" msgid "Troubleshooting" -msgstr "" +msgstr "Поиск и устранение неисправностей" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" -msgstr "" +msgstr "Имя принтера" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" -msgstr "" +msgstr "Присвойте имя принтеру" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:36 msgctxt "@label" @@ -4972,37 +4896,37 @@ msgstr "Ultimaker Cloud" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:77 msgctxt "@text" msgid "The next generation 3D printing workflow" -msgstr "" +msgstr "Рабочий процесс трехмерной печати следующего поколения" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:94 msgctxt "@text" msgid "- Send print jobs to Ultimaker printers outside your local network" -msgstr "" +msgstr "- Отправляйте задания печати на принтеры Ultimaker за пределами вашей локальной сети" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:97 msgctxt "@text" msgid "- Store your Ultimaker Cura settings in the cloud for use anywhere" -msgstr "" +msgstr "- Храните параметры Ultimaker Cura в облаке, чтобы применять их из любого места" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:100 msgctxt "@text" msgid "- Get exclusive access to print profiles from leading brands" -msgstr "" +msgstr "- Получайте эксклюзивный доступ к профилям печати от ведущих брендов" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:119 msgctxt "@button" msgid "Finish" -msgstr "" +msgstr "Завершить" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:128 msgctxt "@button" msgid "Create an account" -msgstr "" +msgstr "Создать учетную запись" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:29 msgctxt "@label" msgid "Welcome to Ultimaker Cura" -msgstr "" +msgstr "Приветствуем в Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:47 msgctxt "@text" @@ -5010,26 +4934,13 @@ msgid "" "Please follow these steps to set up\n" "Ultimaker Cura. This will only take a few moments." msgstr "" +"Выполните указанные ниже действия для настройки\n" +"Ultimaker Cura. Это займет немного времени." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:58 msgctxt "@button" msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "Показывать только текущий рабочий стол" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "Выровнять для всех рабочих столов" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "Выровнять текущий рабочий стол" +msgstr "Приступить" #: MachineSettingsAction/plugin.json msgctxt "description" @@ -5114,12 +5025,22 @@ msgstr "Средство обновления прошивки" #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattened quality changes profile." -msgstr "" +msgstr "Создание нормализованного профиля с изменениями качества." #: ProfileFlattener/plugin.json msgctxt "name" msgid "Profile Flattener" -msgstr "" +msgstr "Нормализатор профиля" + +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "Обеспечивает поддержку чтения файлов AMF." + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "Средство чтения AMF" #: USBPrinting/plugin.json msgctxt "description" @@ -5131,16 +5052,6 @@ msgctxt "name" msgid "USB printing" msgstr "Печать через USB" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "Разрешить сохранение результирующего слоя в формате X3G для поддержки принтеров, считывающих этот формат (Malyan, Makerbot и другие принтеры на базе Sailfish)." - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "X3GWriter" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5183,23 +5094,13 @@ msgstr "Плагин для работы с внешним носителем" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Управляет сетевыми соединениями с принтерами Ultimaker 3." +msgid "Manages network connections to Ultimaker networked printers." +msgstr "Управляет сетевыми соединениями с сетевыми принтерами Ultimaker 3." #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "Соединение с сетью UM3" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" -msgstr "" +msgid "Ultimaker Network Connection" +msgstr "Соединение с сетью Ultimaker" #: MonitorStage/plugin.json msgctxt "description" @@ -5264,12 +5165,12 @@ msgstr "Средство стирания элемента поддержки" #: UFPReader/plugin.json msgctxt "description" msgid "Provides support for reading Ultimaker Format Packages." -msgstr "" +msgstr "Предоставляет поддержку для чтения пакетов формата Ultimaker." #: UFPReader/plugin.json msgctxt "name" msgid "UFP Reader" -msgstr "" +msgstr "Средство считывания UFP" #: SliceInfoPlugin/plugin.json msgctxt "description" @@ -5354,12 +5255,12 @@ msgstr "Обновление версии 2.7 до 3.0" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.5 to Cura 4.0." -msgstr "" +msgstr "Обновляет конфигурации Cura 3.5 до Cura 4.0." #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "name" msgid "Version Upgrade 3.5 to 4.0" -msgstr "" +msgstr "Обновление версии 3.5 до 4.0" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" @@ -5374,12 +5275,12 @@ msgstr "Обновление версии 3.4 до 3.5" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 4.0 to Cura 4.1." -msgstr "" +msgstr "Обновляет конфигурации Cura 4.0 до Cura 4.1." #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "name" msgid "Version Upgrade 4.0 to 4.1" -msgstr "" +msgstr "Обновление версии 4.0 до 4.1" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" @@ -5391,6 +5292,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "Обновление версии 3.0 до 3.1" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "Обновляет конфигурации Cura 4.1 до Cura 4.2." + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "Обновление версии 4.1 до 4.2" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5421,6 +5332,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "Обновление версии 2.2 до 2.4" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "Обновляет конфигурации Cura 4.2 до Cura 4.3." + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "Обновление версии 4.2 до 4.3" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5431,6 +5352,16 @@ msgctxt "name" msgid "Image Reader" msgstr "Чтение изображений" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "Предоставляет поддержку для чтения файлов моделей." + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "Средство чтения Trimesh" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5461,16 +5392,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "Чтение 3MF" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5494,12 +5415,12 @@ msgstr "Чтение G-code" #: CuraDrive/plugin.json msgctxt "description" msgid "Backup and restore your configuration." -msgstr "" +msgstr "Резервное копирование и восстановление конфигурации." #: CuraDrive/plugin.json msgctxt "name" msgid "Cura Backups" -msgstr "" +msgstr "Резервные копии Cura" #: CuraProfileWriter/plugin.json msgctxt "description" @@ -5534,12 +5455,12 @@ msgstr "Запись 3MF" #: PreviewStage/plugin.json msgctxt "description" msgid "Provides a preview stage in Cura." -msgstr "" +msgstr "Обеспечивает действия на этапе предварительного просмотра в Cura." #: PreviewStage/plugin.json msgctxt "name" msgid "Preview Stage" -msgstr "" +msgstr "Этап предварительного просмотра" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -5561,6 +5482,297 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Чтение профиля Cura" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "Подключен по сети." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "Подключен по сети. Пожалуйста, подтвердите запрос на принтере." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "Подключен по сети. Нет доступа к управлению принтером." + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "Запрошен доступ к принтеру. Пожалуйста, подтвердите запрос на принтере" + +#~ msgctxt "@info:title" +#~ msgid "Authentication status" +#~ msgstr "Состояние аутентификации" + +#~ msgctxt "@info:title" +#~ msgid "Authentication Status" +#~ msgstr "Состояние аутентификации" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "Послать запрос доступа ещё раз" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "Доступ к принтеру получен" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "Нет доступа к использованию этого принтера. Невозможно отправить задачу на печать." + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "Запросить доступ" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "Отправить запрос на доступ к принтеру" + +#~ msgctxt "@label" +#~ msgid "Unable to start a new print job." +#~ msgstr "Не удалось начать новое задание печати." + +#~ msgctxt "@label" +#~ msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." +#~ msgstr "Возникла проблема конфигурации Ultimaker, из-за которой невозможно начать печать. Перед продолжением работы решите возникшую проблему." + +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "Несовпадение конфигурации" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "Вы уверены, что желаете печатать с использованием выбранной конфигурации?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Есть несовпадение между конфигурацией или калибровкой принтера и Cura. Для лучшего результата, всегда производите слайсинг для PrintCore и материала, которые установлены в вашем принтере." + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "Отправка новых заданий (временно) заблокирована, идёт отправка предыдущего задания." + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "Отправка данных на принтер" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "Отправка данных" + +#~ msgctxt "@info:status" +#~ msgid "No Printcore loaded in slot {slot_number}" +#~ msgstr "Модуль экструдера PrintCore не загружен в слот {slot_number}" + +#~ msgctxt "@info:status" +#~ msgid "No material loaded in slot {slot_number}" +#~ msgstr "Материал не загружен в слот {slot_number}" + +#~ msgctxt "@label" +#~ msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" +#~ msgstr "Другой модуль экструдера PrintCore (Cura: {cura_printcore_name}, принтер: {remote_printcore_name}) выбран для экструдера {extruder_id}" + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "Разный материал (Cura: {0}, Принтер: {1}) выбран для экструдера {2}" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "Синхронизация с вашим принтером" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "Желаете использовать текущую конфигурацию принтера в Cura?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Модуль PrintCore и/или материал в вашем принтере отличается от тех, что вы используете в текущем проекте. Для наилучшего результата всегда указывайте правильный модуль PrintCore и материалы, которые вставлены в ваш принтер." + +#~ msgctxt "@action:button" +#~ msgid "View in Monitor" +#~ msgstr "Просмотр на мониторе" + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "{printer_name} завершил печать '{job_name}'." + +#~ msgctxt "@info:status" +#~ msgid "The print job '{job_name}' was finished." +#~ msgstr "Задание печати '{job_name}' выполнено." + +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "Печать завершена" + +#~ msgctxt "@label:material" +#~ msgid "Empty" +#~ msgstr "Пусто" + +#~ msgctxt "@label:material" +#~ msgid "Unknown" +#~ msgstr "Неизвестн" + +#~ msgctxt "@info:title" +#~ msgid "Cloud error" +#~ msgstr "Ошибка облака" + +#~ msgctxt "@info:status" +#~ msgid "Could not export print job." +#~ msgstr "Облако не экспортировало задание печати." + +#~ msgctxt "@info:description" +#~ msgid "There was an error connecting to the cloud." +#~ msgstr "При подключении к облаку возникла ошибка." + +#~ msgctxt "@info:status" +#~ msgid "Uploading via Ultimaker Cloud" +#~ msgstr "Заливка через облако Ultimaker Cloud" + +#~ msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." +#~ msgid "Connect to Ultimaker Cloud" +#~ msgstr "Подключиться к облаку Ultimaker Cloud" + +#~ msgctxt "@action" +#~ msgid "Don't ask me again for this printer." +#~ msgstr "Не спрашивать меня снова для этого принтера." + +#~ msgctxt "@info:status" +#~ msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." +#~ msgstr "Теперь вы можете отправлять и отслеживать задания печати из любого места с помощью вашей учетной записи Ultimaker." + +#~ msgctxt "@info:status" +#~ msgid "Connected!" +#~ msgstr "Подключено!" + +#~ msgctxt "@action" +#~ msgid "Review your connection" +#~ msgstr "Проверьте свое подключение" + +#~ msgctxt "@info:status Don't translate the XML tags !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "Принтер, заданный в профиле {0} ({1}), не совпадает с вашим текущим принтером ({2}), поэтому его невозможно импортировать." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "Failed to import profile from {0}:" +#~ msgstr "Не удалось импортировать профиль из {0}:" + +#~ msgctxt "@window:title" +#~ msgid "Existing Connection" +#~ msgstr "Текущее подключение" + +#~ msgctxt "@message:text" +#~ msgid "This printer/group is already added to Cura. Please select another printer/group." +#~ msgstr "Этот принтер/группа уже добавлен (-а) в Cura. Выберите другой (-ую) принтер/группу." + +#~ msgctxt "@label" +#~ msgid "Enter the IP address or hostname of your printer on the network." +#~ msgstr "Введите IP-адрес принтера или его имя в сети." + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "Подключение к принтеру" + +#~ msgctxt "@title" +#~ msgid "Cura Settings Guide" +#~ msgstr "Руководство по параметрам Cura" + +#~ msgctxt "@info:tooltip" +#~ msgid "Zooming towards the mouse is not supported in the orthogonal perspective." +#~ msgstr "В ортогональной проекции изменение масштаба мышью не поддерживается." + +#~ msgid "Orthogonal" +#~ msgstr "Ортогональная" + +#~ msgctxt "description" +#~ msgid "Manages network connections to Ultimaker 3 printers." +#~ msgstr "Управляет сетевыми соединениями с принтерами Ultimaker 3." + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "Соединение с сетью UM3" + +#~ msgctxt "description" +#~ msgid "Provides extra information and explanations about settings in Cura, with images and animations." +#~ msgstr "Предоставляет дополнительную информацию и пояснения относительно параметров Cura с изображениями и анимацией." + +#~ msgctxt "name" +#~ msgid "Settings Guide" +#~ msgstr "Руководство по параметрам" + +#~ msgctxt "@item:inmenu" +#~ msgid "Cura Settings Guide" +#~ msgstr "Руководство по параметрам Cura" + +#~ msgctxt "@info:generic" +#~ msgid "Settings have been changed to match the current availability of extruders: [%s]" +#~ msgstr "Настройки изменены в соответствии с текущей доступностью экструдеров: [%s]" + +#~ msgctxt "@title:groupbox" +#~ msgid "User description" +#~ msgstr "Описание пользователя" + +#~ msgctxt "@info" +#~ msgid "These options are not available because you are monitoring a cloud printer." +#~ msgstr "Указанные опции недоступны, поскольку вы отслеживаете облачный принтер." + +#~ msgctxt "@label link to connect manager" +#~ msgid "Go to Cura Connect" +#~ msgstr "Перейти к Cura Connect" + +#~ msgctxt "@info" +#~ msgid "All jobs are printed." +#~ msgstr "Все задания печати выполнены." + +#~ msgctxt "@label link to connect manager" +#~ msgid "View print history" +#~ msgstr "Просмотреть архив печати" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "Для печати на вашем принтере через сеть, пожалуйста, удостоверьтесь, что ваш принтер подключен к сети с помощью кабеля или через WiFi. Если вы не подключили Cura к вашему принтеру, вы по-прежнему можете использовать USB флешку для переноса G-Code файлов на ваш принтер.\n" +#~ "\n" +#~ "Укажите ваш принтер в списке ниже:" + +#~ msgctxt "@info" +#~ msgid "" +#~ "Please make sure your printer has a connection:\n" +#~ "- Check if the printer is turned on.\n" +#~ "- Check if the printer is connected to the network." +#~ msgstr "" +#~ "Проверьте наличие подключения к принтеру:\n" +#~ "- Убедитесь, что принтер включен.\n" +#~ "- Проверьте, подключен ли принтер к сети." + +#~ msgctxt "@option:check" +#~ msgid "See only current build plate" +#~ msgstr "Показывать только текущий рабочий стол" + +#~ msgctxt "@action:button" +#~ msgid "Arrange to all build plates" +#~ msgstr "Выровнять для всех рабочих столов" + +#~ msgctxt "@action:button" +#~ msgid "Arrange current build plate" +#~ msgstr "Выровнять текущий рабочий стол" + +#~ msgctxt "description" +#~ msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." +#~ msgstr "Разрешить сохранение результирующего слоя в формате X3G для поддержки принтеров, считывающих этот формат (Malyan, Makerbot и другие принтеры на базе Sailfish)." + +#~ msgctxt "name" +#~ msgid "X3GWriter" +#~ msgstr "X3GWriter" + +#~ msgctxt "description" +#~ msgid "Reads SVG files as toolpaths, for debugging printer movements." +#~ msgstr "Считывает файлы SVG как пути инструментов для отладки движений принтера." + +#~ msgctxt "name" +#~ msgid "SVG Toolpath Reader" +#~ msgstr "Средство считывания путей инструментов SVG" + #~ msgctxt "@item:inmenu" #~ msgid "Changelog" #~ msgstr "Журнал изменений" diff --git a/resources/i18n/ru_RU/fdmextruder.def.json.po b/resources/i18n/ru_RU/fdmextruder.def.json.po index 23df03f728..3fa794c4b4 100644 --- a/resources/i18n/ru_RU/fdmextruder.def.json.po +++ b/resources/i18n/ru_RU/fdmextruder.def.json.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" "PO-Revision-Date: 2019-03-13 14:00+0200\n" "Last-Translator: Bothof \n" "Language-Team: Ruslan Popov , Russian \n" diff --git a/resources/i18n/ru_RU/fdmprinter.def.json.po b/resources/i18n/ru_RU/fdmprinter.def.json.po index 7b032cf612..cc7cf8f5f9 100644 --- a/resources/i18n/ru_RU/fdmprinter.def.json.po +++ b/resources/i18n/ru_RU/fdmprinter.def.json.po @@ -5,12 +5,12 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" -"PO-Revision-Date: 2019-03-13 14:00+0200\n" -"Last-Translator: Bothof \n" -"Language-Team: Ruslan Popov , Russian \n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" +"PO-Revision-Date: 2019-07-29 15:51+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Russian , Ruslan Popov , Russian \n" "Language: ru_RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -216,6 +216,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "Имеет ли принтер подогреваемый стол." +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "Есть стабилизация температуры для объема печати" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "Имеет ли принтер возможность стабилизации температуры для объема печати." + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -239,7 +249,7 @@ msgstr "Количество экструдеров. Экструдер - это #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders That Are Enabled" -msgstr "" +msgstr "Количество включенных экструдеров" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -249,7 +259,7 @@ msgstr "Количество включенных экструдеров; это #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer Nozzle Diameter" -msgstr "" +msgstr "Внешний диаметр сопла" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter description" @@ -259,7 +269,7 @@ msgstr "Внешний диаметр кончика сопла." #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle Length" -msgstr "" +msgstr "Длина сопла" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance description" @@ -269,7 +279,7 @@ msgstr "Высота между кончиком сопла и нижней ча #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle Angle" -msgstr "" +msgstr "Угол сопла" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle description" @@ -279,7 +289,7 @@ msgstr "Угол между горизонтальной плоскостью и #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat Zone Length" -msgstr "" +msgstr "Длина зоны нагрева" #: fdmprinter.def.json msgctxt "machine_heat_zone_length description" @@ -309,7 +319,7 @@ msgstr "Следует ли управлять температурой из Cur #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat Up Speed" -msgstr "" +msgstr "Скорость нагрева" #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed description" @@ -319,7 +329,7 @@ msgstr "Скорость (°C/сек.), с которой сопло греет, #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool Down Speed" -msgstr "" +msgstr "Скорость охлаждения" #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed description" @@ -338,8 +348,8 @@ msgstr "Минимальное время, которое экструдер д #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" -msgstr "" +msgid "G-code Flavor" +msgstr "Вариант G-кода" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" @@ -404,7 +414,7 @@ msgstr "Определяет, использовать ли команды от #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed Areas" -msgstr "" +msgstr "Запрещенные области" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" @@ -424,7 +434,7 @@ msgstr "Список полигонов с областями, в которые #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine Head Polygon" -msgstr "" +msgstr "Полигон головки принтера" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -434,7 +444,7 @@ msgstr "2D контур головы принтера (исключая крыш #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine Head & Fan Polygon" -msgstr "" +msgstr "Полигон головки принтера и вентилятора" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -444,7 +454,7 @@ msgstr "2D контур головы принтера (включая крышк #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry Height" -msgstr "" +msgstr "Высота портала" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -474,7 +484,7 @@ msgstr "Внутренний диаметр сопла. Измените это #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset with Extruder" -msgstr "" +msgstr "Смещение с экструдером" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -1271,6 +1281,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "Острейший угол" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "Позиция Z шва" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "Позиция, рядом с которой следует начинать путь на каждом слое." + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "Сзади слева" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "Назад" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "Сзади справа" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "Справа" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "Спереди справа" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "Спереди" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "Спереди слева" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "Слева" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1298,8 +1358,8 @@ msgstr "Настройки угла шва" #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "Управляет влиянием углов на контуре модели на позицию шва. Нет означает отсутствие влияния. Спрятать шов означает по возможности перенести шов внутрь угла. Показать шов означает по возможности перенести шов наружу. Спрятать или показать означает выбор по ситуации." +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "Управляет влиянием углов на контуре модели на позицию шва. «Нет» означает отсутствие влияния. «Спрятать шов» означает размещение шва с наибольшей вероятностью внутри угла. «Показать шов» означает размещение шва с наибольшей вероятностью снаружи угла. «Спрятать или показать» означает выбор варианта в зависимости от ситуации. Функция «Интеллектуальное скрытие» допускает размещение швов как внутри, так и снаружи углов, но чаще размещает их внутри." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1321,6 +1381,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "Спрятать или показать" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "Интеллектуальное скрытие" + #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" @@ -1333,13 +1398,13 @@ msgstr "Когда включено, координаты Z шва привяз #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "Игнорирование Z зазоров" +msgid "No Skin in Z Gaps" +msgstr "Нет оболочки в Z-зазорах" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "Когда модель имеет небольшие вертикальные зазоры, около 5% дополнительного времени будет потрачено на вычисления верхних и нижних оболочек в этих узких пространствах. В этом случае, отключите данный параметр." +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "Если у модели имеются небольшие вертикальные зазоры, состоящие всего из нескольких слоев, вокруг этих слоев в узком пространстве, как правило, присутствует оболочка. Выбор данного параметра предотвратит создание оболочки в ситуациях, когда вертикальные зазоры очень маленькие. Это позволит сократить время печати и нарезки, но с технической точки зрения область заполнения останется открытой." #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1358,8 +1423,9 @@ msgstr "Разрешить разглаживание" #: fdmprinter.def.json 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 "Проходить по верхней оболочке ещё раз, но без выдавливания материала. Это приводит к плавлению пластика, что создаёт более гладкую поверхность." +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 "Проходить по верхней оболочке еще раз, но на этот раз выдавливая очень мало материала. Это приводит к плавлению пластика, что создает более гладкую поверхность." +" Давление в камере сопла поддерживается на высоком уровне, благодаря чему складки на поверхности заполняются материалом." #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1451,6 +1517,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "Изменение максимальной мгновенной скорости, с которой выполняется разглаживание." +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "Процент перекрытия оболочек" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Настройте величину перекрытия между стенками и центральными линиями оболочки (конечными точками) в виде процентного отношения значений ширины линии для линий оболочки и внутренней стенки. Небольшое перекрытие позволяет стенкам надежно соединяться с оболочкой. Обратите внимание, что при одинаковой толщине оболочки и ширине линии стенки любое процентное значение, превышающее 50%, может привести к размещению любой оболочки за пределами стенки. Это обусловлено тем, что в этот момент расположение сопла экструдера оболочки может сместиться за середину стенки." + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "Перекрытие оболочек" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Настройте величину перекрытия между стенками и центральными линиями оболочки (конечными точками). Небольшое перекрытие позволяет стенкам надежно соединяться с оболочкой. Обратите внимание, что при одинаковой толщине оболочки и ширине линии стенки любое значение, превышающее половину ширины стенки, может привести к размещению любой оболочки за пределами стенки. Это обусловлено тем, что в этот момент расположение сопла экструдера оболочки может сместиться за середину стенки." + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1616,6 +1702,17 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Расстояние перемещения шаблона заполнения по оси Y." +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +msgstr "Рандомизация начала заполнения" + +#: 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 "Рандомизировать, какая линия заполнения печатается первой. Это препятствует тому, чтобы один сегмент стал самым сильным, но делает это за счет дополнительного" +" перемещения." + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1670,26 +1767,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "Величина перекрытия между заполнением и стенками. Небольшое перекрытие позволяет стенкам плотно соединиться с заполнением." -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "Процент перекрытия оболочек" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Настройте величину перекрытия между стенками и центральными линиями оболочки (конечными точками) в виде процентного отношения значений ширины линии для линий оболочки и внутренней стенки. Небольшое перекрытие позволяет стенкам надежно соединяться с оболочкой. Обратите внимание, что при одинаковой толщине оболочки и ширине линии стенки любое процентное значение, превышающее 50%, может привести к размещению любой оболочки за пределами стенки. Это обусловлено тем, что в этот момент расположение сопла экструдера оболочки может сместиться за середину стенки." - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "Перекрытие оболочек" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Настройте величину перекрытия между стенками и центральными линиями оболочки (конечными точками). Небольшое перекрытие позволяет стенкам надежно соединяться с оболочкой. Обратите внимание, что при одинаковой толщине оболочки и ширине линии стенки любое значение, превышающее половину ширины стенки, может привести к размещению любой оболочки за пределами стенки. Это обусловлено тем, что в этот момент расположение сопла экструдера оболочки может сместиться за середину стенки." - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1873,12 +1950,12 @@ msgstr "Стандартная температура сопла, использ #: fdmprinter.def.json msgctxt "build_volume_temperature label" msgid "Build Volume Temperature" -msgstr "" +msgstr "Температура для объема печати" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." -msgstr "" +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." +msgstr "Температура среды печати. Если это значение равно 0, температура для объема печати не будет регулироваться." #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1990,6 +2067,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "Коэффициент усадки в процентах." +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "Кристаллический материал" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "Это материал, который при нагревании легко ломается по четким линиям (кристаллический) или образует длинные сплетающиеся полимерные цепочки (некристаллический)?" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "Положение отката для защиты от капель" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "Насколько далеко необходимо убрать материал, чтобы он перестал капать." + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "Скорость отката для защиты от капель" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "Насколько быстро необходимо убрать материал во время его замены, чтобы не допустить появления капель." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "Положение отката для подготовки к отламыванию" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "Насколько сильно можно растянуть материал при нагревании, до тех пор пока он не отломится." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "Скорость отката для подготовки к отламыванию" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "Насколько быстро следует убирать материал, чтобы он отломился." + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "Положение отката для отламывания" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "Насколько далеко следует убрать материал, чтобы он отломился чисто." + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "Скорость отката для отламывания" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "Скорость, при которой убираемый материал отломится чисто." + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "Температура отламывания" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "Температура, при которой материал отломится чисто." + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -2000,6 +2157,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "Компенсация потока: объём выдавленного материала умножается на этот коэффициент." +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "Поток для стенки" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "Компенсация потока на линиях стенки." + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "Поток для внешней стенки" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "Компенсация потока на внешней линии стенки." + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "Поток для внутренних стенок" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "Компенсация потока на линиях стенки для всех линий, за исключением внешней." + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "Поток для верхних/нижних линий" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "Компенсация потока на верхних/нижних линиях." + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "Поток для верхней оболочки" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "Компенсация потока на линиях наверху печатаемой детали." + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "Поток для заполнения" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "Компенсация потока на линиях заполнения." + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "Поток для юбки/каймы" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "Компенсация потока на линиях юбки или каймы." + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "Поток для поддержек" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "Компенсация потока на линиях структуры поддержек." + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "Поток для связующего слоя поддержек" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "Компенсация потока на линиях крыши или низа поддержек." + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "Поток для крыши поддержек" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "Компенсация потока на линиях крыши поддержек." + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "Поток для низа поддержек" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "Компенсация потока на линиях низа поддержек." + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "Поток черновой башни" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "Компенсация потока на линиях черновой башни." + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2063,7 +2340,7 @@ msgstr "Скорость с которой нить будет извлечен #: fdmprinter.def.json msgctxt "retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "Скорость возврата в начале печати" +msgstr "Скорость заправки при откате" #: fdmprinter.def.json msgctxt "retraction_prime_speed description" @@ -2117,8 +2394,8 @@ msgstr "Ограничить откаты поддержки" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." -msgstr "Избежание отката при перемещении от поддержки к поддержке по прямой. Активация этой настройки сокращает время печати, однако может привести к излишней строчности в поддерживающей структуре." +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." +msgstr "Пропустить откат при переходе от поддержки к поддержке по прямой линии. Включение этого параметра обеспечивает экономию времени печати, но может привести к чрезмерной строчности структуры поддержек." #: fdmprinter.def.json msgctxt "material_standby_temperature label" @@ -2170,6 +2447,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "Скорость, с которой материал будет возвращён обратно при смене экструдера." +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "Дополнительно заполняемый объем при смене экструдера" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "Дополнительный объем материала для заполнения после смены экструдера." + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2361,14 +2648,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "Скорость, на которой происходит печать юбки и каймы. Обычно, их печать происходит на скорости печати первого слоя, но иногда вам может потребоваться печатать юбку или кайму на другой скорости." #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "Максимальная скорость по оси Z" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "Скорость поднятия оси Z" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "Максимальная скорость, с которой движется ось Z. Установка нуля в качестве значения, приводит к использованию скорости прописанной в прошивке." +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "Скорость вертикального движения по оси Z. Обычно она ниже, чем скорость печати, поскольку рабочий стол или портал машины тяжелее сдвинуть." #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2870,16 +3157,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "Дистанция между соплом и уже напечатанными частями, выдерживаемая при перемещении." -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "Начинать печать в одном месте" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "На каждом слое печать начинается вблизи одной и той же точки, таким образом, мы не начинаем новый слой на том месте, где завершилась печать предыдущего слоя. Это улучшает печать нависаний и мелких частей, но увеличивает длительность процесса." - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -2943,12 +3220,12 @@ msgstr "При переключении принтера на другой эк #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height label" msgid "Z Hop After Extruder Switch Height" -msgstr "" +msgstr "Высота поднятия оси Z после смены экструдера" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height description" msgid "The height difference when performing a Z Hop after extruder switch." -msgstr "" +msgstr "Высота, на которую приподнимается ось Z после смены экструдера." #: fdmprinter.def.json msgctxt "cooling label" @@ -3223,7 +3500,7 @@ msgstr "Крест" #: fdmprinter.def.json msgctxt "support_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "Гироид" #: fdmprinter.def.json msgctxt "support_wall_count label" @@ -3286,14 +3563,16 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "Дистанция между напечатанными линиями структуры поддержек первого слоя. Этот параметр вычисляется по плотности поддержек." #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "Направление линии заполнения поддержек" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." -msgstr "Ориентация шаблона заполнения для поддержек. Шаблон заполнения поддержек вращается в горизонтальной плоскости." +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 "Список целочисленных направлений линии. Элементы списка используются последовательно по мере печати слоев, и, когда конец списка будет достигнут, он начнется" +" сначала. Элементы списка отделяются запятыми, и сам список заключен в квадратные скобки. По умолчанию список пустой, что означает использование стандартного" +" угла 0 градусов." #: fdmprinter.def.json msgctxt "support_brim_enable label" @@ -3422,8 +3701,8 @@ msgstr "Расстояние объединения поддержки" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." -msgstr "Максимальное расстояние между структурами поддержки по осям X/Y. Если отдельные структуры находятся ближе, чем определено данным значением, то такие структуры объединяются в одну." +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." +msgstr "Максимальное расстояние между структурами поддержек по осям X/Y. Если отдельные структуры находятся ближе, чем определено данным значением, они объединяются в одну." #: fdmprinter.def.json msgctxt "support_offset label" @@ -3760,6 +4039,42 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "Величина смещения, применяемая к нижней части поддержек." +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +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 "Список целочисленных направлений линии. Элементы списка используются последовательно по мере печати слоев, и, когда конец списка будет достигнут, он начнется" +" сначала. Элементы списка отделяются запятыми, и сам список заключен в квадратные скобки. По умолчанию список пустой, что означает использование стандартных" +" углов (45 либо 135 градусов, если связующий слой довольно толстый, или 90 градусов)." + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +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 "Список целочисленных направлений линии. Элементы списка используются последовательно по мере печати слоев, и, когда конец списка будет достигнут, он начнется" +" сначала. Элементы списка отделяются запятыми, и сам список заключен в квадратные скобки. По умолчанию список пустой, что означает использование стандартных" +" углов (45 либо 135 градусов, если связующий слой довольно толстый, или 90 градусов)." + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +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 "Список целочисленных направлений линии. Элементы списка используются последовательно по мере печати слоев, и, когда конец списка будет достигнут, он начнется" +" сначала. Элементы списка отделяются запятыми, и сам список заключен в квадратные скобки. По умолчанию список пустой, что означает использование стандартных" +" углов (45 либо 135 градусов, если связующий слой довольно толстый, или 90 градусов)." + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3801,14 +4116,14 @@ msgid "The diameter of a special tower." msgstr "Диаметр специальных башен." #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "Минимальный диаметр" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "Максимальный диаметр, поддерживаемый башней" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." -msgstr "Минимальный диаметр по осям X/Y небольшой области, которая будет поддерживаться с помощью специальных башен." +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "Максимальный диаметр по осям X/Y небольшой области, который должен поддерживаться определенной башней." #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" @@ -4022,7 +4337,7 @@ msgstr "Z наложение первого слоя" #: fdmprinter.def.json msgctxt "layer_0_z_overlap description" msgid "Make the first and second layer of the model overlap in the Z direction to compensate for the filament lost in the airgap. All models above the first model layer will be shifted down by this amount." -msgstr "Приводит к наложению первого и второго слоёв модели по оси Z для компенсации потерь материала в воздушном зазоре. Все слои модели выше первого будут смешены чуть ниже на указанное значение." +msgstr "Приводит к наложению первого и второго слоёв модели по оси Z для компенсации потерь материала в воздушном зазоре. Все слои модели выше первого будут смещены чуть ниже на указанное значение." #: fdmprinter.def.json msgctxt "raft_surface_layers label" @@ -4304,16 +4619,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "Печатает башню перед печатью модели, чем помогает выдавить старый материал после смены экструдера." -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "Цилиндрическая черновая башня" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "Делает черновую башню цилиндрической формы." - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4354,16 +4659,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "Y координата позиции черновой башни." -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "Поток черновой башни" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "Компенсация потока: объём выдавленного материала умножается на этот коэффициент." - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4377,12 +4672,12 @@ msgstr "После печати черновой башни одним сопл #: fdmprinter.def.json msgctxt "prime_tower_brim_enable label" msgid "Prime Tower Brim" -msgstr "" +msgstr "Кайма черновой башни" #: fdmprinter.def.json msgctxt "prime_tower_brim_enable description" msgid "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type." -msgstr "" +msgstr "Для черновых башен может потребоваться дополнительная адгезия с помощью каймы, даже если для модели это не требуется. В данный момент не может использоваться с типом адгезии с подложкой." #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4666,8 +4961,8 @@ msgstr "Сглаживать спиральные контуры" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." -msgstr "Сглаживает спиральные контуры для уменьшения видимости шва по оси Z (такой шов должен быть едва виден при печати, но по-прежнему виден при послойном просмотре). Следует отметить, что сглаживание ведёт к размыванию мелких деталей поверхности." +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgstr "Сглаживает спиральные контуры для уменьшения видимости шва по оси Z (такой шов должен быть едва виден при печати, но виден при послойном просмотре). Следует отметить, что сглаживание ведет к размыванию мелких деталей поверхности." #: fdmprinter.def.json msgctxt "relative_extrusion label" @@ -4902,12 +5197,14 @@ msgstr "Минимальный размер сегмента линии пере #: fdmprinter.def.json msgctxt "meshfix_maximum_deviation label" msgid "Maximum Deviation" -msgstr "" +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." -msgstr "" +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" @@ -5166,8 +5463,8 @@ msgstr "Конические поддержки" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "Экспериментальная возможность: Нижняя часть поддержек становится меньше, чем верхняя." +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "Нижняя часть поддержек становится меньше, чем верхняя." #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5511,7 +5808,7 @@ msgstr "Зазор между соплом и горизонтально нис #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled label" msgid "Use Adaptive Layers" -msgstr "" +msgstr "Использовать адаптивные слои" #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled description" @@ -5521,7 +5818,7 @@ msgstr "В случае адаптивных слоев расчет высот #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation label" msgid "Adaptive Layers Maximum Variation" -msgstr "" +msgstr "Максимальная вариация адаптивных слоев" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" @@ -5531,7 +5828,7 @@ msgstr "Максимальная разрешенная высота по сра #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" msgid "Adaptive Layers Variation Step Size" -msgstr "" +msgstr "Размер шага вариации адаптивных слоев" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step description" @@ -5541,7 +5838,7 @@ msgstr "Разница между высотой следующего слоя #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold label" msgid "Adaptive Layers Threshold" -msgstr "" +msgstr "Порог для адаптивных слоев" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" @@ -5761,152 +6058,194 @@ msgstr "Скорость вентилятора в процентах, с кот #: fdmprinter.def.json msgctxt "clean_between_layers label" msgid "Wipe Nozzle Between Layers" -msgstr "" +msgstr "Очистка сопла между слоями" #: fdmprinter.def.json msgctxt "clean_between_layers description" msgid "Whether to include nozzle wipe G-Code between layers. Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working." -msgstr "" +msgstr "Следует ли добавлять G-код очистки сопла между слоями. Включение этого параметра может повлиять на ход отката при смене слоя. Используйте параметры отката с очисткой для управления откатом на слоях, для которых используется скрипт очистки." #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe label" msgid "Material Volume Between Wipes" -msgstr "" +msgstr "Объем материала между очистками" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe description" msgid "Maximum material, that can be extruded before another nozzle wipe is initiated." -msgstr "" +msgstr "Максимальный объем материала, который можно выдавить перед очередной очисткой сопла." #: fdmprinter.def.json msgctxt "wipe_retraction_enable label" msgid "Wipe Retraction Enable" -msgstr "" +msgstr "Включение отката с очисткой" #: fdmprinter.def.json msgctxt "wipe_retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area." -msgstr "" +msgstr "Откат нити при движении сопла вне зоны печати." #: fdmprinter.def.json msgctxt "wipe_retraction_amount label" msgid "Wipe Retraction Distance" -msgstr "" +msgstr "Расстояние отката с очисткой" #: fdmprinter.def.json msgctxt "wipe_retraction_amount description" msgid "Amount to retract the filament so it does not ooze during the wipe sequence." -msgstr "" +msgstr "Величина отката нити, предотвращающего просачивание во время последовательности очистки." #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount label" msgid "Wipe Retraction Extra Prime Amount" -msgstr "" +msgstr "Дополнительно заполняемый объем при откате с очисткой" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount description" msgid "Some material can ooze away during a wipe travel moves, which can be compensated for here." -msgstr "" +msgstr "Небольшое количество материала может просочиться при перемещении во время очистки, что можно скомпенсировать с помощью данного параметра." #: fdmprinter.def.json msgctxt "wipe_retraction_speed label" msgid "Wipe Retraction Speed" -msgstr "" +msgstr "Скорость отката с очисткой" #: fdmprinter.def.json msgctxt "wipe_retraction_speed description" msgid "The speed at which the filament is retracted and primed during a wipe retraction move." -msgstr "" +msgstr "Скорость, с которой нить будет втягиваться и заправляться при откате с очисткой." #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed label" msgid "Wipe Retraction Retract Speed" -msgstr "" +msgstr "Скорость отката при откате с очисткой" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed description" msgid "The speed at which the filament is retracted during a wipe retraction move." -msgstr "" +msgstr "Скорость, с которой нить будет втягиваться при откате с очисткой." #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "Скорость заправки при откате" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed description" msgid "The speed at which the filament is primed during a wipe retraction move." -msgstr "" +msgstr "Скорость, с которой нить заправляется при откате с очисткой." #: fdmprinter.def.json msgctxt "wipe_pause label" msgid "Wipe Pause" -msgstr "" +msgstr "Приостановка очистки" #: fdmprinter.def.json msgctxt "wipe_pause description" msgid "Pause after the unretract." -msgstr "" +msgstr "Приостановка после отмены отката." #: fdmprinter.def.json msgctxt "wipe_hop_enable label" msgid "Wipe Z Hop When Retracted" -msgstr "" +msgstr "Поднятие оси Z с очисткой при откате" #: fdmprinter.def.json msgctxt "wipe_hop_enable description" msgid "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." -msgstr "" +msgstr "При каждом откате рабочий стол опускается для создания зазора между соплом и печатаемой деталью. Это предотвращает соударение сопла и печатаемой детали во время движений, снижая вероятность смещения печатаемой детали на рабочем столе." #: fdmprinter.def.json msgctxt "wipe_hop_amount label" msgid "Wipe Z Hop Height" -msgstr "" +msgstr "Высота поднятия оси Z при очистке" #: fdmprinter.def.json msgctxt "wipe_hop_amount description" msgid "The height difference when performing a Z Hop." -msgstr "" +msgstr "Расстояние, на которое приподнимается ось Z." #: fdmprinter.def.json msgctxt "wipe_hop_speed label" msgid "Wipe Hop Speed" -msgstr "" +msgstr "Скорость поднятия при очистке" #: fdmprinter.def.json msgctxt "wipe_hop_speed description" msgid "Speed to move the z-axis during the hop." -msgstr "" +msgstr "Скорость перемещения оси Z во время поднятия." #: fdmprinter.def.json msgctxt "wipe_brush_pos_x label" msgid "Wipe Brush X Position" -msgstr "" +msgstr "Позиция X очистной щетки" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x description" msgid "X location where wipe script will start." -msgstr "" +msgstr "Расположение X, в котором запустится скрипт очистки." #: fdmprinter.def.json msgctxt "wipe_repeat_count label" msgid "Wipe Repeat Count" -msgstr "" +msgstr "Количество повторов очистки" #: fdmprinter.def.json msgctxt "wipe_repeat_count description" msgid "Number of times to move the nozzle across the brush." -msgstr "" +msgstr "Количество перемещений сопла поперек щетки." #: fdmprinter.def.json msgctxt "wipe_move_distance label" msgid "Wipe Move Distance" -msgstr "" +msgstr "Расстояние перемещения при очистке" #: fdmprinter.def.json msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." -msgstr "" +msgstr "Расстояние перемещения головки назад и вперед поперек щетки." + +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "Максимальный размер малого отверстия" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "Отверстия и контуры деталей с диаметром меньше этого значения будут напечатаны с использованием функции «Скорость для малых элементов»." + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "Максимальная длина малого элемента" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "Контуры элементов с длиной меньше этого значения будут напечатаны с использованием функции «Скорость для малых элементов»." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +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 "Малые элементы будут напечатаны со скоростью, составляющей этот процент от их нормальной скорости печати. Более медленная печать может улучшить адгезию" +" и точность." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor_0 label" +msgid "First 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 "Малые элементы на первом слое будут напечатаны со скоростью, составляющей этот процент от их нормальной скорости печати. Более медленная печать может улучшить" +" адгезию и точность." #: fdmprinter.def.json msgctxt "command_line_settings label" @@ -5968,6 +6307,90 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." 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 "Проходить по верхней оболочке ещё раз, но без выдавливания материала. Это приводит к плавлению пластика, что создаёт более гладкую поверхность." + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "Начинать печать в одном месте" + +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "На каждом слое печать начинается вблизи одной и той же точки, таким образом, мы не начинаем новый слой на том месте, где завершилась печать предыдущего слоя. Это улучшает печать нависаний и мелких частей, но увеличивает длительность процесса." + +#~ msgctxt "support_infill_angles description" +#~ msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +#~ msgstr "Ориентация шаблона заполнения для поддержек. Шаблон заполнения поддержек вращается в горизонтальной плоскости." + +#~ 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." +#~ msgstr "Максимальное допустимое отклонение при снижении разрешения для параметра максимального разрешения. Увеличение этого значения уменьшит точность печати и значение G-кода." + +#~ msgctxt "machine_gcode_flavor label" +#~ msgid "G-code Flavour" +#~ msgstr "Вариант G-кода" + +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "Управляет влиянием углов на контуре модели на позицию шва. Нет означает отсутствие влияния. Спрятать шов означает по возможности перенести шов внутрь угла. Показать шов означает по возможности перенести шов наружу. Спрятать или показать означает выбор по ситуации." + +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "Игнорирование Z зазоров" + +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "Когда модель имеет небольшие вертикальные зазоры, около 5% дополнительного времени будет потрачено на вычисления верхних и нижних оболочек в этих узких пространствах. В этом случае, отключите данный параметр." + +#~ msgctxt "build_volume_temperature description" +#~ msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +#~ msgstr "Температура, используемая для объема печати. Если значение равно 0, температура для объема печати не будет регулироваться." + +#~ msgctxt "limit_support_retractions description" +#~ msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +#~ msgstr "Избежание отката при перемещении от поддержки к поддержке по прямой. Активация этой настройки сокращает время печати, однако может привести к излишней строчности в поддерживающей структуре." + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "Максимальная скорость по оси Z" + +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "Максимальная скорость, с которой движется ось Z. Установка нуля в качестве значения, приводит к использованию скорости прописанной в прошивке." + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "Максимальное расстояние между структурами поддержки по осям X/Y. Если отдельные структуры находятся ближе, чем определено данным значением, то такие структуры объединяются в одну." + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "Минимальный диаметр" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "Минимальный диаметр по осям X/Y небольшой области, которая будет поддерживаться с помощью специальных башен." + +#~ msgctxt "prime_tower_circular label" +#~ msgid "Circular Prime Tower" +#~ msgstr "Цилиндрическая черновая башня" + +#~ msgctxt "prime_tower_circular description" +#~ msgid "Make the prime tower as a circular shape." +#~ msgstr "Делает черновую башню цилиндрической формы." + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "Компенсация потока: объём выдавленного материала умножается на этот коэффициент." + +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "Сглаживает спиральные контуры для уменьшения видимости шва по оси Z (такой шов должен быть едва виден при печати, но по-прежнему виден при послойном просмотре). Следует отметить, что сглаживание ведёт к размыванию мелких деталей поверхности." + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "Экспериментальная возможность: Нижняя часть поддержек становится меньше, чем верхняя." + #~ msgctxt "extruders_enabled_count label" #~ msgid "Number of Extruders that are enabled" #~ msgstr "Количество включенных экструдеров" diff --git a/resources/i18n/tr_TR/cura.po b/resources/i18n/tr_TR/cura.po index c861482044..51be61add2 100644 --- a/resources/i18n/tr_TR/cura.po +++ b/resources/i18n/tr_TR/cura.po @@ -5,12 +5,12 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" -"PO-Revision-Date: 2019-03-13 14:00+0200\n" -"Last-Translator: Bothof \n" -"Language-Team: Turkish\n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" +"PO-Revision-Date: 2019-07-29 15:51+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Turkish , Turkish \n" "Language: tr_TR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\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:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "Makine Ayarları" @@ -85,36 +85,45 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "Profil düzleştirilmiş ve aktifleştirilmiştir." -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "AMF Dosyası" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USB yazdırma" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "USB ile yazdır" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "USB ile yazdır" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "USB ile bağlı" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "USB’den yazdırma devam ediyor, Cura’yı kapatmanız bu yazdırma işlemini durduracak. Emin misiniz?" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 -msgctxt "X3G Writer File Description" -msgid "X3G File" -msgstr "X3G Dosyası" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "Devam eden bir baskı var. Cura, önceki baskı tamamlanmadan USB aracılığıyla başka bir baskı işi başlatamaz." + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "Print in Progress" +msgstr "Baskı Sürüyor" #: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16 msgctxt "X3g Writer Plugin Description" @@ -126,6 +135,11 @@ msgctxt "X3g Writer File Description" msgid "X3g File" msgstr "X3g Dosyası" +#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 +msgctxt "X3G Writer File Description" +msgid "X3G File" +msgstr "X3G Dosyası" + #: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17 #: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17 msgctxt "@item:inlistbox" @@ -160,7 +174,7 @@ msgid "Save to Removable Drive {0}" msgstr "Çıkarılabilir Sürücüye Kaydediliyor {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "Yazılacak dosya biçimleri mevcut değil!" @@ -197,10 +211,9 @@ msgid "Could not save to removable drive {0}: {1}" msgstr "Çıkarılabilir aygıta {0} kaydedilemedi: {1}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:137 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "Hata" @@ -229,9 +242,9 @@ msgstr "Çıkarılabilir aygıtı çıkar {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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "Uyarı" @@ -258,347 +271,150 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "Çıkarılabilir Sürücü" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "Ağ üzerinden yazdır" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "Ağ üzerinden yazdır" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "Ağ üzerinden bağlandı." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "Ağ üzerinden bağlandı. Lütfen yazıcıya erişim isteğini onaylayın." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "Ağ üzerinden bağlandı. Yazıcıyı kontrol etmek için erişim yok." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "İstenen yazıcıya erişim. Lütfen yazıcı isteğini onaylayın" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "Kimlik doğrulama durumu" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "Kimlik Doğrulama Durumu" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "Yeniden dene" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "Erişim talebini yeniden gönder" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "Kabul edilen yazıcıya erişim" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "Bu yazıcıyla yazdırmaya erişim yok. Yazdırma işi gönderilemedi." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "Erişim Talep Et" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "Yazıcıya erişim talebi gönder" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "Yeni bir yazdırma işi başlatılamıyor." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "Ultimaker’ın yapılandırmasında yazdırmayı başlatmayı imkansız kılan bir sorun var. Devam etmeden önce lütfen bu sorunu çözün." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "Uyumsuz yapılandırma" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "Seçilen yapılandırma ile yazdırmak istediğinizden emin misiniz?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Yazıcı yapılandırması veya kalibrasyonu ile Cura arasında eşleşme sorunu var. En iyi sonucu almak istiyorsanız her zaman PrintCore ve yazıcıya eklenen malzemeler için dilimleme yapın." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "Yeni işlerin gönderilmesi (geçici olarak) engellenmiştir, hala bir önceki yazdırma işi gönderiliyor." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "Veriler yazıcıya gönderiliyor" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "Veri gönderiliyor" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "İptal Et" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "{slot_number} yuvasına Printcore yüklenmedi" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "{slot_number} yuvasına malzeme yüklenmedi" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "Farklı PrintCore (Cura: {cura_printcore_name}, Yazıcı: ekstruder {extruder_id} için {remote_printcore_name}) seçildi" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "Farklı malzeme (Cura: {0}, Yazıcı: {1}), ekstrüder {2} için seçildi" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "Yazıcınız ile eşitleyin" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "Cura’da geçerli yazıcı yapılandırmanızı kullanmak istiyor musunuz?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "Yazıcınızda bulunan PrintCore’lar ve/veya malzemeler geçerli projenizde bulunandan farklı. En iyi sonucu almak istiyorsanız, her zaman PrintCore ve yazıcıya eklenen malzemeler için dilimleme yapın." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "Ağ üzerinden bağlandı" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "Yazdırma işi yazıcıya başarıyla gönderildi." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "Veri Gönderildi" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "Monitörde Görüntüle" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "{printer_name}, '{job_name}' yazdırmayı tamamladı." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "Yazdırma işi '{job_name}' tamamlandı." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "Baskı tamamlandı" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "Boş" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "Bilinmiyor" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "Bulut üzerinden yazdır" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "Bulut üzerinden yazdır" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "Bulut üzerinden bağlı" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "Bulut hatası" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "Yazdırma görevi dışa aktarılamadı." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "Veri yazıcıya yüklenemedi." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "yarın" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "bugün" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "Buluta bağlanırken hata oluştu." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Ultimaker hesabınızı kullanarak yazdırma görevlerini dilediğiniz yerden gönderin ve görüntüleyin." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "Bu yazıcı için bir daha sorma." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "Başlayın" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "Artık, Ultimaker hesabınızı kullanarak yazdırma görevlerini dilediğiniz yerden gönderebilir ve görüntüleyebilirsiniz." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "Bağlı!" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "Bağlantınızı inceleyin" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "Ağ ile Bağlan" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" -msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +msgctxt "@action:button Preceded by 'Ready to'." +msgid "Print over network" +msgstr "Ağ üzerinden yazdır" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "Ağ üzerinden yazdır" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "Ağ üzerinden bağlandı" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "Mevcut iş gönderilene kadar bekleyin." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "Baskı hatası" + +#: /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 "{0} ile bağlantı kurmayı deniyorsunuz ancak cihaz bir grubun ana makinesi değil. Bu cihazı grup ana makinesi olarak yapılandırmak için web sayfasını ziyaret" +" edebilirsiniz." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "Grup ana makinesi değil" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "Grubu yapılandır" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "Ultimaker hesabınızı kullanarak yazdırma görevlerini dilediğiniz yerden gönderin ve görüntüleyin." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "Ultimaker Cloud Platformuna Bağlan" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "Başlayın" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "Yazdırma İşi Gönderiliyor" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "Baskı işi yazıcıya yükleniyor." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "Yazdırma işi yazıcıya başarıyla gönderildi." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "Veri Gönderildi" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "Ultimaker Connect çalıştırmayan bir yazıcıya bağlanmaya çalışıyorsunuz. Lütfen yazıcının donanım yazılımını son sürüme güncelleyin." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "Yazıcınızı güncelleyin" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "Cura, henüz {0} grubunun ana yazıcısına yüklenmemiş malzeme profilleri tespit etti." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "Malzemeler yazıcıya gönderiliyor" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "Veri yazıcıya yüklenemedi." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "Ağ hatası" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "yarın" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "bugün" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "Bulut üzerinden yazdır" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "Bulut üzerinden yazdır" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" +msgstr "Bulut üzerinden bağlı" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 msgctxt "@item:inmenu" msgid "Monitor" msgstr "Görüntüle" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "Güncelleme bilgilerine erişilemedi." @@ -625,12 +441,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "Katman görünümü" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "Tel Yazma etkinleştirildiğinde, Cura katmanları doğru olarak görüntülemez" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "Simülasyon Görünümü" @@ -685,6 +501,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF Resmi" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "Open Compressed Triangle Mesh" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "COLLADA Digital Asset Exchange" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "glTF Binary" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "glTF Embedded JSON" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "Stanford Triangle Format" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "Compressed COLLADA Digital Asset Exchange" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -765,19 +611,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF Dosyası" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "Nozül" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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 "Proje dosyası {0} bilinmeyen bir makine tipi içeriyor: {1}. Makine alınamıyor. Bunun yerine modeller alınacak." -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "Proje Dosyası Aç" @@ -792,18 +638,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G Dosyası" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "G-code ayrıştırma" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "G-code Ayrıntıları" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "Dosya göndermeden önce g-code’un yazıcınız ve yazıcı yapılandırmanız için uygun olduğundan emin olun. G-code temsili doğru olmayabilir." @@ -906,16 +752,16 @@ msgstr "Giriş başarısız" #: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33 msgctxt "@info:not supported profile" msgid "Not supported" -msgstr "" +msgstr "Desteklenmiyor" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 msgctxt "@title:window" msgid "File Already Exists" msgstr "Dosya Zaten Mevcut" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:204 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -928,116 +774,109 @@ msgid "Invalid file URL:" msgstr "Geçersiz dosya URL’si:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" -msgstr "Ayarlar, ekstruderlerin mevcut kullanılabilirliğine uyacak şekilde değiştirildi: [%s]" +msgctxt "@info:message Followed by a list of settings." +msgid "Settings have been changed to match the current availability of extruders:" +msgstr "Ayarlar, ekstrüderlerin mevcut kullanılabilirliğine uyacak şekilde değiştirildi:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:926 msgctxt "@info:title" msgid "Settings updated" msgstr "Ayarlar güncellendi" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "Ekstrüder(ler) Devre Dışı Bırakıldı" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, python-brace-format msgctxt "@info:status Don't translate the XML tags or !" msgid "Failed to export profile to {0}: {1}" msgstr "Profilin {0} dosyasına aktarımı başarısız oldu: {1}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to export profile to {0}: Writer plugin reported failure." msgstr "Profilin {0} dosyasına aktarımı başarısız oldu: Yazıcı eklentisinde rapor edilen hata." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, python-brace-format msgctxt "@info:status Don't translate the XML tag !" msgid "Exported profile to {0}" msgstr "Profil {0} dosyasına aktarıldı" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "Dışa aktarma başarılı" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "Failed to import profile from {0}: {1}" msgstr "{0} dosyasından profil içe aktarımı başarısız oldu: {1}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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 "Yazıcı eklenmeden önce profil, {0} dosyasından içe aktarılamaz." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "No custom profile to import in file {0}" msgstr "{0} dosyasında içe aktarılabilecek özel profil yok" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "Failed to import profile from {0}:" msgstr "{0} dosyasından profil içe aktarımı başarısız oldu:" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, python-brace-format msgctxt "@info:status Don't translate the XML tags !" msgid "This profile {0} contains incorrect data, could not import it." msgstr "Bu {0} profili yanlış veri içeriyor, içeri aktarılamadı." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "{0} ({1}) profilinde tanımlanan makine, mevcut makineniz ({2}) ile eşleşmiyor, içe aktarılamadı." - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +msgctxt "@info:status Don't translate the XML tag !" msgid "Failed to import profile from {0}:" msgstr "{0} dosyasından profil içe aktarımı başarısız oldu:" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "Profil başarıyla içe aktarıldı {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, python-brace-format msgctxt "@info:status" msgid "File {0} does not contain any valid profile." msgstr "Dosya {0} geçerli bir profil içermemekte." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, python-brace-format msgctxt "@info:status" msgid "Profile {0} has an unknown file type or is corrupted." msgstr "Profil {0} öğesinde bilinmeyen bir dosya türü var veya profil bozuk." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "Özel profil" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "Profilde eksik bir kalite tipi var." -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1086,7 +925,7 @@ msgstr "Etek" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:84 msgctxt "@tooltip" msgid "Prime Tower" -msgstr "" +msgstr "Astarlama Direği" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:85 msgctxt "@tooltip" @@ -1115,7 +954,7 @@ msgctxt "@action:button" msgid "Next" msgstr "Sonraki" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1123,22 +962,36 @@ msgstr "Grup #{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/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "Kapat" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" msgstr "Ekle" +#: /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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "İptal Et" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1155,23 +1008,22 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "Tüm Dosyalar (*)" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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 "Bilinmiyor" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" -msgstr "" +msgstr "Aşağıdaki yazıcı(lar) bir grubun parçası olmadıkları için bağlanamıyor" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" -msgstr "" +msgstr "Mevcut ağ yazıcıları" #: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689 msgctxt "@label" @@ -1184,12 +1036,12 @@ msgctxt "@label" msgid "Custom" msgstr "Özel" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "Portalın yazdırılan modeller ile çarpışmasını önlemek için yapı hacmi yüksekliği “Sıralamayı Yazdır” ayarı nedeniyle azaltıldı." -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "Yapı Disk Bölümü" @@ -1207,46 +1059,51 @@ msgstr "Uygun veri veya meta veri olmadan Cura yedeği geri yüklenmeye çalış #: /home/ruben/Projects/Cura/cura/Backups/Backup.py:125 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that is higher than the current version." -msgstr "" +msgstr "Geçerli sürümünüzden yüksek bir sürüme sahip bir Cura yedeği geri yüklenmeye çalışıldı." #: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationHelpers.py:79 msgctxt "@message" msgid "Could not read response." -msgstr "" +msgstr "Yanıt okunamadı." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 msgctxt "@info" msgid "Unable to reach the Ultimaker account server." msgstr "Ultimaker hesabı sunucusuna ulaşılamadı." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:66 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:202 +msgctxt "@action:button" +msgid "Retry" +msgstr "Yeniden dene" + +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:70 msgctxt "@message" msgid "Please give the required permissions when authorizing this application." -msgstr "" +msgstr "Lütfen bu başvuruya yetki verirken gerekli izinleri verin." -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "Oturum açmaya çalışırken beklenmeyen bir sorun oluştu, lütfen tekrar deneyin." -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "Nesneler çoğaltılıyor ve yerleştiriliyor" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "Nesneler Yerleştiriliyor" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "Yapılan hacim içinde tüm nesneler için konum bulunamadı" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "Nesne Yerleştiriliyor" @@ -1395,48 +1252,48 @@ msgstr "Günlükler" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" -msgstr "Kullanıcı açıklaması" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" +msgstr "Kullanıcı açıklaması (Not: Geliştiriciler dilinizi konuşamıyor olabilir, lütfen mümkünse İngilizce kullanın)" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "Rapor gönder" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "Makineler yükleniyor..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "Görünüm ayarlanıyor..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "Arayüz yükleniyor..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, python-brace-format msgctxt "@info:status" msgid "Only one G-code file can be loaded at a time. Skipped importing {0}" msgstr "Aynı anda yalnızca bir G-code dosyası yüklenebilir. {0} içe aktarma atlandı" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, python-brace-format msgctxt "@info:status" msgid "Can't open any other file if G-code is loading. Skipped importing {0}" msgstr "G-code yüklenirken başka bir dosya açılamaz. {0} içe aktarma atlandı" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "Seçilen model yüklenemeyecek kadar küçüktü." @@ -1444,103 +1301,108 @@ msgstr "Seçilen model yüklenemeyecek kadar küçüktü." #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58 msgctxt "@title:label" msgid "Printer Settings" -msgstr "" +msgstr "Yazıcı Ayarları" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X (Genişlik)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (Derinlik)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (Yükseklik)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "Yapı levhası şekli" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" -msgstr "" +msgstr "Merkez nokta" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" -msgstr "" +msgstr "Isıtılmış yatak" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "Isıtılmış yapı hacmi" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "G-code türü" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" -msgstr "" +msgstr "Yazıcı Başlığı Ayarları" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y min" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "X maks" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "Y maks" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" -msgstr "" +msgstr "Portal Yüksekliği" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "Ekstrüder Sayısı" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" -msgstr "" +msgstr "G-code’u Başlat" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" -msgstr "" +msgstr "G-code’u Sonlandır" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:42 msgctxt "@title:tab" @@ -1550,7 +1412,7 @@ msgstr "Yazıcı" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:63 msgctxt "@title:label" msgid "Nozzle Settings" -msgstr "" +msgstr "Nozül Ayarları" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:75 msgctxt "@label" @@ -1567,25 +1429,25 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "Nozül X ofseti" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "Nozül Y ofseti" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "Soğutma Fanı Numarası" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" -msgstr "" +msgstr "Ekstruder G-Code'u Başlatma" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" -msgstr "" +msgstr "Ekstruder G-Code'u Sonlandırma" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 msgctxt "@action:button" @@ -1593,7 +1455,7 @@ msgid "Install" msgstr "Yükle" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "Yüklü" @@ -1608,16 +1470,16 @@ msgctxt "@label" msgid "ratings" msgstr "derecelendirmeler" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "Eklentiler" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "Malzemeler" @@ -1627,49 +1489,49 @@ msgctxt "@label" msgid "Your rating" msgstr "Derecelendirmeniz" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "Sürüm" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "Son güncelleme" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "Yazar" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "İndirmeler" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "Yükleme ve güncelleme yapabilmek için oturum açın" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" -msgstr "" +msgstr "Malzeme makarası satın al" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "Güncelle" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "Güncelleniyor" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1730,17 +1592,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "Cura’dan Çıkın" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "Topluluk Katkıları" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "Topluluk Eklentileri" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "Genel Materyaller" @@ -1801,27 +1663,52 @@ msgctxt "@label" msgid "Featured" msgstr "Öne Çıkan" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "Uyumluluk" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +msgctxt "@label:table_header" +msgid "Machine" +msgstr "Makine" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:131 +msgctxt "@label:table_header" +msgid "Print Core" +msgstr "Baskı Hücresi" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137 +msgctxt "@label:table_header" +msgid "Build Plate" +msgstr "Baskı tepsisi" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "Destek" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "Kalite" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "Teknik Veri Sayfası" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "Güvenlik Veri Sayfası" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "Yazdırma Talimatları" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "Web sitesi" @@ -1921,70 +1808,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "Eksik aygıt yazılımı nedeniyle aygıt yazılımı güncellemesi başarısız oldu." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "Yazıcıyı yönet" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "Cam" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." -msgstr "Görüntülediğiniz yazıcı bulut yazıcısı olduğundan bu seçenekleri kullanamazsınız." +msgid "Please update your printer's firmware to manage the queue remotely." +msgstr "Kuyruğu uzaktan yönetmek için lütfen yazıcının donanım yazılımını güncelleyin." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "Görüntülediğiniz yazıcı bulut yazıcısı olduğundan web kamerasını kullanamazsınız." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "Yükleniyor..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "Mevcut değil" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "Ulaşılamıyor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "Boşta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "Başlıksız" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "Anonim" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "Yapılandırma değişiklikleri gerekiyor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "Detaylar" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "Kullanım dışı yazıcı" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "İlk kullanılabilen" @@ -1994,197 +1887,180 @@ msgctxt "@label" msgid "Queued" msgstr "Kuyrukta" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" -msgstr "Cura Connect’e git" +msgid "Manage in browser" +msgstr "Tarayıcıda yönet" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "Kuyrukta baskı işi yok. Bir iş eklemek için dilimleme yapın ve gönderin." + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "Yazdırma görevleri" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "Toplam yazdırma süresi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "Bekleniyor" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "Yazdırma geçmişini görüntüle" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "Mevcut Bağlantı" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "Bu yazıcı/grup Cura’ya zaten eklenmiş. Lütfen başka bir yazıcı/grup seçin." - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "Ağ Yazıcısına Bağlan" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" -msgstr "" -"Yazıcınıza ağ üzerinden doğrudan bağlamak için, lütfen yazıcınızın ağ kablosu kullanan bir ağa bağlı olduğundan emin olun veya yazıcınızı WiFi ağına bağlayın. Cura'ya yazıcınız ile bağlanamıyorsanız g-code dosyalarını yazıcınıza aktarmak için USB sürücüsü kullanabilirsiniz.\n" -"\n" -"Aşağıdaki listeden yazıcınızı seçin:" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." +msgstr "Yazıcınıza ağ üzerinden doğrudan baskı göndermek için lütfen yazıcınızın ağ kablosuyla ağa bağlı olduğundan veya yazıcınızı WiFi ağınıza bağladığınızdan emin olun. Yazıcınız ile Cura'ya bağlanamıyorsanız g-code dosyalarını yazıcınıza aktarmak için USB sürücüsü kullanabilirsiniz." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "Aşağıdaki listeden yazıcınızı seçin:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "Düzenle" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "Kaldır" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "Yenile" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "Yazıcınız listede yoksa ağ yazdırma sorun giderme kılavuzunu okuyun" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "Tür" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:274 msgctxt "@label" msgid "Firmware version" msgstr "Üretici yazılımı sürümü" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /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:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 msgctxt "@label" msgid "This printer is not set up to host a group of printers." msgstr "Bu yazıcı, bir yazıcı grubunu barındırmak için ayarlı değildir." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 msgctxt "@label" msgid "This printer is the host for a group of %1 printers." msgstr "Bu yazıcı, %1 yazıcı grubunun ana makinesidir." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "Bu adresteki yazıcı henüz yanıt vermedi." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "Bağlan" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" -msgstr "" +msgstr "Geçersiz IP adresi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146 msgctxt "@text" msgid "Please enter a valid IP address." -msgstr "" +msgstr "Lütfen geçerli bir IP adresi girin." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "Yazıcı Adresi" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." -msgstr "" +msgid "Enter the IP address of your printer on the network." +msgstr "Ağdaki yazıcınızın IP adresini girin." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "Tamam" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "Durduruldu" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "Tamamlandı" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "Hazırlanıyor..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "İptal ediliyor..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "Duraklatılıyor..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "Duraklatıldı" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "Devam ediliyor..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "Eylem gerekli" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "%1 bitiş tarihi: %2" @@ -2288,73 +2164,65 @@ msgctxt "@action:button" msgid "Override" msgstr "Geçersiz kıl" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" msgstr[0] "Atanan yazıcı %1, şu yapılandırma değişikliğini gerektiriyor:" msgstr[1] "Atanan yazıcı %1, şu yapılandırma değişikliklerini gerektiriyor:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "Yazıcı %1 atandı, fakat iş bilinmeyen bir malzeme yapılandırması içeriyor." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "%2 olan %1 malzemesini %3 yapın." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "%3 malzemesini %1 malzemesi olarak yükleyin (Bu işlem geçersiz kılınamaz)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." msgstr "%2 olan %1 print core'u %3 yapın." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "Baskı tablasını %1 olarak değiştirin (Bu işlem geçersiz kılınamaz)." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "Geçersiz kıl seçeneği mevcut yazıcı yapılandırmasındaki ayarları kullanacaktır. Yazdırma işlemi başarısız olabilir." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "Alüminyum" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "Yazıcıya Bağlan" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" -"Lütfen yazıcınızın bağlı olduğunu kontrol edin:\n" -"- Yazıcının açık olduğunu kontrol edin.\n" -"- Yazıcının ağa bağlı olduğunu kontrol edin." +"Lütfen yazıcınızda bağlantı olduğundan emin olun:\n" +"- Yazıcının açık olup olmadığını kontrol edin.\n" +"- Yazıcının ağa bağlı olup olmadığını kontrol edin.\n" +"- Buluta bağlı yazıcıları keşfetmek için giriş yapıp yapmadığınızı kontrol edin." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 msgctxt "@info" msgid "Please connect your printer to the network." -msgstr "" +msgstr "Lütfen yazıcınızı ağa bağlayın." #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:156 msgctxt "@label link to technical assistance" @@ -2476,17 +2344,17 @@ msgstr "Anonim veri toplama hakkında daha fazla bilgi" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:74 msgctxt "@text:window" msgid "Ultimaker Cura collects anonymous data in order to improve the print quality and user experience. Below is an example of all the data that is shared:" -msgstr "" +msgstr "Ultimaker Cura, yazdırma kalitesini ve kullanıcı deneyimini iyileştirmek için anonim veri toplar. Aşağıda, paylaşılan tüm verilerin bir örneği verilmiştir:" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:109 msgctxt "@text:window" msgid "I don't want to send anonymous data" -msgstr "" +msgstr "Anonim veri göndermek istemiyorum" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:118 msgctxt "@text:window" msgid "Allow sending anonymous data" -msgstr "" +msgstr "Anonim veri gönderilmesine izin ver" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2536,7 +2404,7 @@ msgstr "Derinlik (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 msgctxt "@info:tooltip" msgid "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model." -msgstr "" +msgstr "Litofanlar için, daha fazla ışığın girmesini engellemek amacıyla koyu renk pikseller daha kalın olan bölgelere denk gelmelidir. Yükseklik haritaları için daha açık renk pikseller daha yüksek araziyi ifade eder; bu nedenle daha açık renk piksellerin oluşturulan 3D modelde daha kalın bölgelere denk gelmesi gerekir." #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 msgctxt "@item:inlistbox" @@ -2661,7 +2529,7 @@ msgid "Printer Group" msgstr "Yazıcı Grubu" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "Profil ayarları" @@ -2674,19 +2542,19 @@ msgstr "Profildeki çakışma nasıl çözülmelidir?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 msgctxt "@action:label" msgid "Name" msgstr "İsim" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 msgctxt "@action:label" msgid "Not in profile" msgstr "Profilde değil" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:236 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2858,18 +2726,24 @@ msgid "Previous" msgstr "Önceki" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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 "Dışa Aktar" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "İpucu" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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 "Genel" + +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:160 msgctxt "@label" msgid "Print experiment" msgstr "Yazdırma denemesi" @@ -2989,155 +2863,155 @@ 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 "Yeni filaman çapı %1 mm olarak ayarlandı ve bu değer, geçerli ekstrüder ile uyumlu değil. Devam etmek istiyor musunuz?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "Görünen Ad" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "Marka" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "Malzeme Türü" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "Renk" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "Özellikler" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "Yoğunluk" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "Çap" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "Filaman masrafı" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "Filaman ağırlığı" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "Filaman uzunluğu" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "Metre başına maliyet" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 msgctxt "@label" msgid "This material is linked to %1 and shares some of its properties." msgstr "Bu malzeme %1’e bağlıdır ve özelliklerinden bazılarını paylaşır." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "Malzemeyi Ayır" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "Tanım" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "Yapışma Bilgileri" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelector.qml:19 msgctxt "@label" msgid "Print settings" msgstr "Yazdırma ayarları" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "Etkinleştir" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "Oluştur" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "Çoğalt" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "İçe Aktar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "Yazıcı" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "Kaldırmayı Onayla" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 msgctxt "@label (%1 is object name)" msgid "Are you sure you wish to remove %1? This cannot be undone!" msgstr "%1’i kaldırmak istediğinizden emin misiniz? Bu eylem geri alınamaz!" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "Malzemeyi İçe Aktar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 msgctxt "@info:status Don't translate the XML tags or !" msgid "Could not import material %1: %2" msgstr "Malzeme %1 dosyasına içe aktarılamadı: %2" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully imported material %1" msgstr "Malzeme %1 dosyasına başarıyla içe aktarıldı" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "Malzemeyi Dışa Aktar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 msgctxt "@info:status Don't translate the XML tags and !" msgid "Failed to export material to %1: %2" msgstr "Malzemenin %1 dosyasına dışa aktarımı başarısız oldu: %2" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "Malzeme %1 dosyasına başarıyla dışa aktarıldı" @@ -3178,388 +3052,411 @@ msgid "Unit" msgstr "Birim" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "Genel" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "Arayüz" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "Dil:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "Para Birimi:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "Tema:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "Bu değişikliklerinin geçerli olması için uygulamayı yeniden başlatmanız gerekecektir." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "Ayarlar değiştirilirken otomatik olarak dilimle." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "Otomatik olarak dilimle" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "Görünüm şekli" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 msgctxt "@info:tooltip" msgid "Highlight unsupported areas of the model in red. Without support these areas will not print properly." msgstr "Modelin desteklenmeyen alanlarını kırmızı ile gösterin. Destek alınmadan bu alanlar düzgün bir şekilde yazdırılmayacaktır." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "Dışarıda kalan alanı göster" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 msgctxt "@info:tooltip" msgid "Moves the camera so the model is in the center of the view when a model is selected" msgstr "Bir model seçildiğinde bu model görüntünün ortasında kalacak şekilde kamera hareket eder" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "Öğeyi seçince kamerayı ortalayın" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "Cura’nın varsayılan yakınlaştırma davranışı tersine çevrilsin mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "Kamera yakınlaştırma yönünü ters çevir." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "Yakınlaştırma farenin hareket yönüne uygun olsun mu?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +msgctxt "@info:tooltip" +msgid "Zooming towards the mouse is not supported in the orthographic perspective." +msgstr "Fareye doğru yakınlaştırma yapılması ortografik perspektifte desteklenmez." + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:376 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "Farenin hareket yönüne göre yakınlaştır" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 msgctxt "@info:tooltip" msgid "Should models on the platform be moved so that they no longer intersect?" msgstr "Platformun üzerindeki öğeler kesişmemeleri için hareket ettirilmeli mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "Modellerin birbirinden ayrı olduğundan emin olduğundan emin olun" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 msgctxt "@info:tooltip" msgid "Should models on the platform be moved down to touch the build plate?" msgstr "Platformun üzerindeki modeller yapı levhasına değmeleri için indirilmeli mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "Modelleri otomatik olarak yapı tahtasına indirin" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "G-code okuyucuda uyarı mesajı göster." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "G-code okuyucuda uyarı mesajı" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "Katman, uyumluluk moduna zorlansın mı?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "Katman görünümünü uyumluluk moduna zorla (yeniden başlatma gerekir)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +msgctxt "@info:tooltip" +msgid "What type of camera rendering should be used?" +msgstr "Ne tür bir kamera oluşturma işlemi kullanılmalıdır?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "Kamera oluşturma: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "Perspektif" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "Ortografik" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "Dosyaların açılması ve kaydedilmesi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 msgctxt "@info:tooltip" msgid "Should models be scaled to the build volume if they are too large?" msgstr "Modeller çok büyükse yapı hacmine göre ölçeklendirilmeli mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "Büyük modelleri ölçeklendirin" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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 "Bir modelin birimi milimetre değil de metre ise oldukça küçük görünebilir. Bu modeller ölçeklendirilmeli mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "Çok küçük modelleri ölçeklendirin" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "Yüklendikten sonra modeller seçilsin mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@option:check" msgid "Select models when loaded" msgstr "Yüklendiğinde modelleri seç" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 msgctxt "@info:tooltip" msgid "Should a prefix based on the printer name be added to the print job name automatically?" msgstr "Yazıcı adına bağlı bir ön ek otomatik olarak yazdırma işinin adına eklenmeli mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "Makine ön ekini iş adına ekleyin" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "Bir proje dosyasını kaydederken özet gösterilmeli mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "Projeyi kaydederken özet iletişim kutusunu göster" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "Bir proje dosyası açıldığında varsayılan davranış" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "Bir proje dosyası açıldığında varsayılan davranış: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "Her zaman sor" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "Her zaman proje olarak aç" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "Her zaman modelleri içe aktar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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 "Bir profil üzerinde değişiklik yapıp farklı bir profile geçtiğinizde, değişikliklerin kaydedilmesini isteyip istemediğinizi soran bir iletişim kutusu açılır. Alternatif olarak bu işleve yönelik varsayılan bir davranış seçebilir ve bu iletişim kutusunun bir daha görüntülenmemesini tercih edebilirsiniz." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "Profiller" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 msgctxt "@window:text" msgid "Default behavior for changed setting values when switching to a different profile: " msgstr "Farklı bir profile geçerken değişen ayar değerleriyle ilgili varsayılan davranış: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml:157 msgctxt "@option:discardOrKeep" msgid "Always ask me this" msgstr "Her zaman sor" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "Değiştirilen ayarları her zaman at" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:discardOrKeep" msgid "Always transfer changed settings to new profile" msgstr "Değiştirilen ayarları her zaman yeni profile taşı" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "Gizlilik" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 msgctxt "@info:tooltip" msgid "Should Cura check for updates when the program is started?" msgstr "Cura, program başladığında güncellemeleri kontrol etmeli mi?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 msgctxt "@option:check" msgid "Check for updates on start" msgstr "Başlangıçta güncellemeleri kontrol edin" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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 "Yazdırmanızdaki anonim veriler Ultimaker’a gönderilmeli mi? Unutmayın; hiçbir model, IP adresi veya diğer kişiye özgü bilgiler gönderilmez veya saklanmaz." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(Anonim) yazdırma bilgisi gönder" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "Daha fazla bilgi" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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 "Deneysel" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:715 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:781 msgctxt "@info:tooltip" msgid "Use multi build plate functionality" msgstr "Çok yapılı levha fonksiyonelliğini kullan" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:786 msgctxt "@option:check" msgid "Use multi build plate functionality (restart required)" msgstr "Çok yapılı levha fonksiyonelliğini kullan (yeniden başlatma gerektirir)" #: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:16 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "Yazıcılar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "Yeniden adlandır" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419 msgctxt "@title:tab" msgid "Profiles" msgstr "Profiller" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "Oluştur" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "Çoğalt" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "Profil Oluştur" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 msgctxt "@info" msgid "Please provide a name for this profile." msgstr "Bu profil için lütfen bir ad girin." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "Profili Çoğalt" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "Profili Yeniden Adlandır" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "Profili İçe Aktar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "Profili Dışa Aktar" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "Yazıcı: %1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420 msgctxt "@label" msgid "Default profiles" msgstr "Varsayılan profiller" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:420 msgctxt "@label" msgid "Custom profiles" msgstr "Özel profiller" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "Profili geçerli ayarlar/geçersiz kılmalar ile güncelle" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "Geçerli değişiklikleri iptal et" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 msgctxt "@action:label" msgid "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below." msgstr "Bu profil yazıcının belirlediği varsayılan ayarları kullanır; dolayısıyla aşağıdaki listede bulunan ayarları/geçersiz kılmaları içermez." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "Geçerli ayarlarınız seçilen profille uyumlu." -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "Küresel Ayarlar" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "Mağaza" @@ -3622,33 +3519,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "arama ayarları" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "Değeri tüm ekstruderlere kopyala" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "Tüm değiştirilmiş değerleri tüm ekstruderlere kopyala" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide this setting" msgstr "Bu ayarı gizle" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:525 msgctxt "@action:menu" msgid "Don't show this setting" msgstr "Bu ayarı gösterme" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "Bu ayarı görünür yap" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "Görünürlük ayarını yapılandır..." @@ -3664,32 +3561,32 @@ msgstr "" "\n" "Bu ayarları görmek için tıklayın." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." -msgstr "" +msgstr "Etkilediği tüm ayarlar geçersiz kılındığı için bu ayar kullanılmamaktadır." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "Etkileri" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr ".........den etkilenir" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 msgctxt "@label" msgid "This setting is always shared between all extruders. Changing it here will change the value for all extruders." msgstr "Bu ayar her zaman, tüm ekstrüderler arasında paylaşılır. Buradan değiştirildiğinde tüm ekstrüderler için değer değiştirir." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "Değer, her bir ekstruder değerinden alınır. " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3700,7 +3597,7 @@ msgstr "" "\n" "Profil değerini yenilemek için tıklayın." -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3716,7 +3613,7 @@ msgctxt "@button" msgid "Recommended" msgstr "Önerilen" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "Özel" @@ -3741,12 +3638,12 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "Modellerin askıda kalan kısımlarını destekleyen yapılar oluşturun. Bu yapılar olmadan, yazdırma sırasında söz konusu kısımlar düşebilir." -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "Yapıştırma" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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 "Bir kenar veya radye yazdırın. Bu nesnenizin etrafına veya altına daha sonra kesilmesi kolay olan düz bir alan sağlayacak." @@ -3764,7 +3661,7 @@ msgstr "Bazı profil ayarlarını değiştirdiniz. Bunları değişiklikleri kay #: /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 "" +msgstr "Bu kalite profili mevcut malzemeniz ve nozül yapılandırması için kullanılamaz. Bu kalite profilini etkinleştirmek için lütfen bu öğeleri değiştirin." #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449 msgctxt "@tooltip" @@ -3800,7 +3697,7 @@ 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." -msgstr "" +msgstr "Yazıcı kurulumu devre dışı bırakıldı. G-code dosyası düzenlenemez." #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:52 msgctxt "@label" @@ -3832,59 +3729,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "G-code Gönder" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "Bağlı yazıcıya özel bir G-code komutu gönderin. Komutu göndermek için 'enter' tuşuna basın." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "Ekstrüder" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "Sıcak ucun hedef sıcaklığı. Sıcak uç, bu sıcaklığa doğru ısıtılır veya soğutulur. Bu ayar 0 olarak belirlenirse sıcak uç ısıtma kapatılır." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "Bu sıcak ucun geçerli sıcaklığı." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "Sıcak ucun ön ısıtma sıcaklığı." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "İptal Et" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "Ön ısıtma" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "Yazdırma öncesinde sıcak ucu ısıt. Isıtma sırasında yazdırma işinizi ayarlamaya devam edebilirsiniz. Böylece yazdırmaya hazır olduğunuzda sıcak ucun ısınmasını beklemeniz gerekmez." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "Bu ekstruderdeki malzemenin rengi." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "Bu ekstruderdeki malzeme." -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "Bu ekstrudere takılan nozül." @@ -3929,11 +3826,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "Favoriler" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -msgctxt "@label:category menu label" -msgid "Generic" -msgstr "Genel" - #: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25 msgctxt "@label:category menu label" msgid "Network enabled printers" @@ -3949,32 +3841,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "&Yazıcı" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "&Malzeme" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "Etkin Ekstruder olarak ayarla" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "Ekstruderi Etkinleştir" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "Ekstruderi Devre Dışı Bırak" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:63 msgctxt "@title:menu" msgid "&Build plate" msgstr "&Yapı levhası" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "&Profil" @@ -3984,7 +3876,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "&Kamera konumu" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "Kamera görüşü" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "Perspektif" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "Ortografik" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "&Yapı levhası" @@ -4004,17 +3911,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "Ayar Görünürlüğünü Yönet..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "&Kaydet..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "&Dışa Aktar..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "Seçimi Dışa Aktar..." @@ -4103,22 +4010,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "En Son Öğeyi Aç" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "Geçerli yazdırma" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "İşin Adı" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "Yazdırma süresi" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "Kalan tahmini süre" @@ -4126,12 +4033,17 @@ msgstr "Kalan tahmini süre" #: /home/ruben/Projects/Cura/resources/qml/ViewsSelector.qml:50 msgctxt "@label" msgid "View type" -msgstr "" +msgstr "Görüntüleme tipi" + +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "Nesne listesi" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" -msgstr "" +msgstr "Merhaba %1" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:33 msgctxt "@button" @@ -4160,6 +4072,9 @@ msgid "" "- Store your Ultimaker Cura settings in the cloud for use anywhere\n" "- Get exclusive access to print profiles from leading brands" msgstr "" +"- Yerel ağınız dışındaki Ultimaker yazıcılarına yazdırma görevleri gönderin\n" +"- Dilediğiniz yerde kullanmak üzere Ultimaker Cura ayarlarınızı bulutta depolayın\n" +"- Lider markalardan yazdırma profillerine özel erişim sağlayın" #: /home/ruben/Projects/Cura/resources/qml/Account/GeneralOperations.qml:78 msgctxt "@button" @@ -4176,32 +4091,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "Maliyet tahmini yok" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "Önizleme" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "Dilimleniyor..." -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" -msgstr "" +msgstr "Dilimlenemedi" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "İşleme" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "Dilimle" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "Dilimleme sürecini başlat" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "İptal" @@ -4209,12 +4129,12 @@ msgstr "İptal" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:31 msgctxt "@label" msgid "Time estimation" -msgstr "" +msgstr "Süre tahmini" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:114 msgctxt "@label" msgid "Material estimation" -msgstr "" +msgstr "Malzeme tahmini" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:164 msgctxt "@label m for meter" @@ -4236,233 +4156,238 @@ msgctxt "@label" msgid "Preset printers" msgstr "Önayarlı yazıcılar" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "Yazıcı ekle" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "Yazıcıları yönet" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "Çevrimiçi Sorun Giderme Kılavuzunu" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "Tam Ekrana Geç" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "Tam Ekrandan Çık" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "&Geri Al" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "&Yinele" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "&Çıkış" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "3 Boyutlu Görünüm" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "Önden Görünüm" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "Yukarıdan Görünüm" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "Sol Taraftan Görünüm" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "Sağ Taraftan Görünüm" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "Cura’yı yapılandır..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "&Yazıcı Ekle..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "Yazıcıları Yönet..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "Malzemeleri Yönet..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "&Profili geçerli ayarlar/geçersiz kılmalar ile güncelle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "&Geçerli değişiklikleri iptal et" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "G&eçerli ayarlardan/geçersiz kılmalardan profil oluştur..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "Profilleri Yönet..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "Çevrimiçi Belgeleri Göster" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "Hata Bildir" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" -msgstr "" +msgstr "Yenilikler" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "Hakkında..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "Seçili Modeli Sil" msgstr[1] "Seçili Modelleri Sil" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "Seçili Modeli Ortala" msgstr[1] "Seçili Modelleri Ortala" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "Seçili Modeli Çoğalt" msgstr[1] "Seçili Modelleri Çoğalt" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "Modeli Sil" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "Modeli Platformda Ortala" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "Modelleri Gruplandır" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "Model Grubunu Çöz" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "&Modelleri Birleştir" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "&Modeli Çoğalt..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "Tüm modelleri Seç" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "Yapı Levhasını Temizle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "Tüm Modelleri Yeniden Yükle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "Tüm Modelleri Tüm Yapı Levhalarına Yerleştir" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "Tüm Modelleri Düzenle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "Seçimi Düzenle" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "Tüm Model Konumlarını Sıfırla" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "Tüm Model ve Dönüşümleri Sıfırla" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "&Dosya Aç..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "&Yeni Proje..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "Yapılandırma Klasörünü Göster" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "&Mağazayı Göster" @@ -4477,52 +4402,52 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "Bu paket yeniden başlatmanın ardından kurulacak." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "Ayarlar" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "Cura Kapatılıyor" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 msgctxt "@label" msgid "Are you sure you want to exit Cura?" msgstr "Cura’dan çıkmak istediğinizden emin misiniz?" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:19 msgctxt "@title:window" msgid "Open file(s)" msgstr "Dosya aç" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "Paketi Kur" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "Dosya Aç" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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 "Seçtiğiniz dosyalar arasında bir veya daha fazla G-code dosyası bulduk. Tek seferde sadece bir G-code dosyası açabilirsiniz. Bir G-code dosyası açmak istiyorsanız, sadece birini seçiniz." -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "Yazıcı Ekle" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" -msgstr "" +msgstr "Yenilikler" #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 msgctxt "@label %1 is filled in with the name of an extruder" @@ -4744,32 +4669,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "Projeyi Kaydet" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:149 msgctxt "@action:label" msgid "Build plate" msgstr "Baskı tepsisi" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "Ekstruder %1" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & malzeme" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" -msgstr "" +msgstr "Malzeme" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "Kaydederken proje özetini bir daha gösterme" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "Kaydet" @@ -4802,158 +4727,158 @@ msgstr "Modelleri içe aktar" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DropDownWidget.qml:93 msgctxt "@label" msgid "Empty" -msgstr "" +msgstr "Boş" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:24 msgctxt "@label" msgid "Add a printer" -msgstr "" +msgstr "Bir yazıcı ekleyin" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:39 msgctxt "@label" msgid "Add a networked printer" -msgstr "" +msgstr "Bir ağ yazıcısı ekleyin" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:81 msgctxt "@label" msgid "Add a non-networked printer" -msgstr "" +msgstr "Ağ dışı bir yazıcı ekleyin" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:70 msgctxt "@label" msgid "Add printer by IP address" -msgstr "" +msgstr "IP adresine göre bir yazıcı ekleyin" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:133 msgctxt "@text" msgid "Place enter your printer's IP address." -msgstr "" +msgstr "Lütfen yazıcınızın IP adresini girin." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:158 msgctxt "@button" msgid "Add" -msgstr "" +msgstr "Ekle" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:204 msgctxt "@label" msgid "Could not connect to device." -msgstr "" +msgstr "Cihaza bağlanılamadı." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:208 msgctxt "@label" msgid "The printer at this address has not responded yet." -msgstr "" +msgstr "Bu adresteki yazıcı henüz yanıt vermedi." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:240 msgctxt "@label" msgid "This printer cannot be added because it's an unknown printer or it's not the host of a group." -msgstr "" +msgstr "Bu yazıcı bilinmeyen bir yazıcı olduğu veya bir grubun ana makinesi olmadığı için eklenemiyor." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:329 msgctxt "@button" msgid "Back" -msgstr "" +msgstr "Geri" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:342 msgctxt "@button" msgid "Connect" -msgstr "" +msgstr "Bağlan" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/FirstStartMachineActionsContent.qml:77 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:123 msgctxt "@button" msgid "Next" -msgstr "" +msgstr "Sonraki" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:23 msgctxt "@label" msgid "User Agreement" -msgstr "" +msgstr "Kullanıcı Anlaşması" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:56 msgctxt "@button" msgid "Agree" -msgstr "" +msgstr "Kabul ediyorum" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:70 msgctxt "@button" msgid "Decline and close" -msgstr "" +msgstr "Reddet ve kapat" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:24 msgctxt "@label" msgid "Help us to improve Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura'yı geliştirmemiz yardım edin" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:57 msgctxt "@text" msgid "Ultimaker Cura collects anonymous data to improve print quality and user experience, including:" -msgstr "" +msgstr "Ultimaker Cura, yazdırma kalitesini ve kullanıcı deneyimini iyileştirmek için anonim veri toplar. Bu veriler aşağıdakileri içerir:" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:71 msgctxt "@text" msgid "Machine types" -msgstr "" +msgstr "Makine türleri" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:77 msgctxt "@text" msgid "Material usage" -msgstr "" +msgstr "Malzeme kullanımı" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:83 msgctxt "@text" msgid "Number of slices" -msgstr "" +msgstr "Dilim sayısı" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:89 msgctxt "@text" msgid "Print settings" -msgstr "" +msgstr "Yazdırma ayarları" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:102 msgctxt "@text" msgid "Data collected by Ultimaker Cura will not contain any personal information." -msgstr "" +msgstr "Ultimaker Cura tarafından toplanan veriler herhangi bir kişisel bilgi içermeyecektir." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:103 msgctxt "@text" msgid "More information" -msgstr "" +msgstr "Daha fazla bilgi" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WhatsNewContent.qml:24 msgctxt "@label" msgid "What's new in Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura'daki yenilikler" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:42 msgctxt "@label" msgid "There is no printer found over your network." -msgstr "" +msgstr "Ağınızda yazıcı bulunamadı." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:179 msgctxt "@label" msgid "Refresh" -msgstr "" +msgstr "Yenile" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:190 msgctxt "@label" msgid "Add printer by IP" -msgstr "" +msgstr "IP'ye göre bir yazıcı ekleyin" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:223 msgctxt "@label" msgid "Troubleshooting" -msgstr "" +msgstr "Sorun giderme" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" -msgstr "" +msgstr "Yazıcı adı" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" -msgstr "" +msgstr "Lütfen yazıcınıza bir isim verin" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:36 msgctxt "@label" @@ -4963,37 +4888,37 @@ msgstr "Ultimaker Cloud" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:77 msgctxt "@text" msgid "The next generation 3D printing workflow" -msgstr "" +msgstr "Yeni nesil 3D yazdırma iş akışı" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:94 msgctxt "@text" msgid "- Send print jobs to Ultimaker printers outside your local network" -msgstr "" +msgstr "- Yerel ağınızın dışındaki Ultimaker yazıcılara yazdırma işi gönderin" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:97 msgctxt "@text" msgid "- Store your Ultimaker Cura settings in the cloud for use anywhere" -msgstr "" +msgstr "- Ultimaker Cura ayarlarınızı her yerde kullanabilmek için bulutta saklayın" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:100 msgctxt "@text" msgid "- Get exclusive access to print profiles from leading brands" -msgstr "" +msgstr "- Lider markalara ait yazdırma profillerine özel erişim sağlayın" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:119 msgctxt "@button" msgid "Finish" -msgstr "" +msgstr "Bitir" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:128 msgctxt "@button" msgid "Create an account" -msgstr "" +msgstr "Bir hesap oluşturun" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:29 msgctxt "@label" msgid "Welcome to Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura'ya hoş geldiniz" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:47 msgctxt "@text" @@ -5001,26 +4926,13 @@ msgid "" "Please follow these steps to set up\n" "Ultimaker Cura. This will only take a few moments." msgstr "" +"Ultimaker Cura'yı kurmak\n" +" için lütfen aşağıdaki adımları izleyin. Bu sadece birkaç saniye sürecektir." #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:58 msgctxt "@button" msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "Sadece mevcut yapı levhasını görüntüle" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "Tüm yapı levhalarına yerleştir" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "Sadece mevcut yapı levhasına yerleştir" +msgstr "Başlayın" #: MachineSettingsAction/plugin.json msgctxt "description" @@ -5105,12 +5017,22 @@ msgstr "Aygıt Yazılımı Güncelleyici" #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattened quality changes profile." -msgstr "" +msgstr "Düzleştirilmiş kalitede değiştirilmiş bir profil oluşturun." #: ProfileFlattener/plugin.json msgctxt "name" msgid "Profile Flattener" -msgstr "" +msgstr "Profil Düzleştirici" + +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "AMF dosyalarının okunması için destek sağlar." + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "AMF Okuyucu" #: USBPrinting/plugin.json msgctxt "description" @@ -5122,16 +5044,6 @@ msgctxt "name" msgid "USB printing" msgstr "USB yazdırma" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "Bu formatı okuyan yazıcıları (Malyan, Makerbot ve diğer Sailfish tabanlı yazıcılar) desteklemek için Ortaya çıkacak parçanın X3G dosyası olarak kaydedilmesine izin verir." - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "X3GWriter" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5174,23 +5086,13 @@ msgstr "Çıkarılabilir Sürücü Çıkış Cihazı Eklentisi" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." -msgstr "Ultimaker 3 yazıcıları için ağ bağlantılarını yönetir." +msgid "Manages network connections to Ultimaker networked printers." +msgstr "Ultimaker ağındaki yazıcılar için ağ bağlantılarını yönetir." #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "UM3 Ağ Bağlantısı" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" -msgstr "" +msgid "Ultimaker Network Connection" +msgstr "Ultimaker Ağ Bağlantısı" #: MonitorStage/plugin.json msgctxt "description" @@ -5255,12 +5157,12 @@ msgstr "Destek Silici" #: UFPReader/plugin.json msgctxt "description" msgid "Provides support for reading Ultimaker Format Packages." -msgstr "" +msgstr "Ultimaker Biçim Paketlerinin okunması için destek sağlar." #: UFPReader/plugin.json msgctxt "name" msgid "UFP Reader" -msgstr "" +msgstr "UFP Okuyucu" #: SliceInfoPlugin/plugin.json msgctxt "description" @@ -5345,12 +5247,12 @@ msgstr "2.7’den 3.0’a Sürüm Yükseltme" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.5 to Cura 4.0." -msgstr "" +msgstr "Yapılandırmaları Cura 3.5’ten Cura 4.0’a yükseltir." #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "name" msgid "Version Upgrade 3.5 to 4.0" -msgstr "" +msgstr "3.5’ten 4.0’a Sürüm Yükseltme" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" @@ -5365,12 +5267,12 @@ msgstr "3.4’ten 3.5’e Sürüm Yükseltme" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 4.0 to Cura 4.1." -msgstr "" +msgstr "Yapılandırmaları Cura 4.0’dan Cura 4.1’e yükseltir." #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "name" msgid "Version Upgrade 4.0 to 4.1" -msgstr "" +msgstr "4.0’dan 4.1’e Sürüm Yükseltme" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" @@ -5382,6 +5284,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "3.0'dan 3.1'e Sürüm Yükseltme" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "Yapılandırmaları Cura 4.1'den Cura 4.2'ye yükseltir." + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "Sürüm 4.1'den 4.2'ye Yükseltme" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5412,6 +5324,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "2.2’den 2.4’e Sürüm Yükseltme" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "Yapılandırmaları Cura 4.2'den Cura 4.3'e yükseltir." + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "4.2'den 4.3'e Sürüm Yükseltme" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5422,6 +5344,16 @@ msgctxt "name" msgid "Image Reader" msgstr "Resim Okuyucu" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "Model dosyalarını okuma desteği sağlar." + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "Trimesh Okuyucu" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5452,16 +5384,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "3MF Okuyucu" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5485,12 +5407,12 @@ msgstr "G-code Okuyucu" #: CuraDrive/plugin.json msgctxt "description" msgid "Backup and restore your configuration." -msgstr "" +msgstr "Yapılandırmanızı yedekleyin ve geri yükleyin." #: CuraDrive/plugin.json msgctxt "name" msgid "Cura Backups" -msgstr "" +msgstr "Cura Yedeklemeleri" #: CuraProfileWriter/plugin.json msgctxt "description" @@ -5525,12 +5447,12 @@ msgstr "3MF Yazıcı" #: PreviewStage/plugin.json msgctxt "description" msgid "Provides a preview stage in Cura." -msgstr "" +msgstr "Cura’da ön izleme aşaması sunar." #: PreviewStage/plugin.json msgctxt "name" msgid "Preview Stage" -msgstr "" +msgstr "Öz İzleme Aşaması" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -5552,6 +5474,297 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura Profil Okuyucu" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "Ağ üzerinden bağlandı." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "Ağ üzerinden bağlandı. Lütfen yazıcıya erişim isteğini onaylayın." + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "Ağ üzerinden bağlandı. Yazıcıyı kontrol etmek için erişim yok." + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "İstenen yazıcıya erişim. Lütfen yazıcı isteğini onaylayın" + +#~ msgctxt "@info:title" +#~ msgid "Authentication status" +#~ msgstr "Kimlik doğrulama durumu" + +#~ msgctxt "@info:title" +#~ msgid "Authentication Status" +#~ msgstr "Kimlik Doğrulama Durumu" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "Erişim talebini yeniden gönder" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "Kabul edilen yazıcıya erişim" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "Bu yazıcıyla yazdırmaya erişim yok. Yazdırma işi gönderilemedi." + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "Erişim Talep Et" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "Yazıcıya erişim talebi gönder" + +#~ msgctxt "@label" +#~ msgid "Unable to start a new print job." +#~ msgstr "Yeni bir yazdırma işi başlatılamıyor." + +#~ msgctxt "@label" +#~ msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." +#~ msgstr "Ultimaker’ın yapılandırmasında yazdırmayı başlatmayı imkansız kılan bir sorun var. Devam etmeden önce lütfen bu sorunu çözün." + +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "Uyumsuz yapılandırma" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "Seçilen yapılandırma ile yazdırmak istediğinizden emin misiniz?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Yazıcı yapılandırması veya kalibrasyonu ile Cura arasında eşleşme sorunu var. En iyi sonucu almak istiyorsanız her zaman PrintCore ve yazıcıya eklenen malzemeler için dilimleme yapın." + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "Yeni işlerin gönderilmesi (geçici olarak) engellenmiştir, hala bir önceki yazdırma işi gönderiliyor." + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "Veriler yazıcıya gönderiliyor" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "Veri gönderiliyor" + +#~ msgctxt "@info:status" +#~ msgid "No Printcore loaded in slot {slot_number}" +#~ msgstr "{slot_number} yuvasına Printcore yüklenmedi" + +#~ msgctxt "@info:status" +#~ msgid "No material loaded in slot {slot_number}" +#~ msgstr "{slot_number} yuvasına malzeme yüklenmedi" + +#~ msgctxt "@label" +#~ msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" +#~ msgstr "Farklı PrintCore (Cura: {cura_printcore_name}, Yazıcı: ekstruder {extruder_id} için {remote_printcore_name}) seçildi" + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "Farklı malzeme (Cura: {0}, Yazıcı: {1}), ekstrüder {2} için seçildi" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "Yazıcınız ile eşitleyin" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "Cura’da geçerli yazıcı yapılandırmanızı kullanmak istiyor musunuz?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "Yazıcınızda bulunan PrintCore’lar ve/veya malzemeler geçerli projenizde bulunandan farklı. En iyi sonucu almak istiyorsanız, her zaman PrintCore ve yazıcıya eklenen malzemeler için dilimleme yapın." + +#~ msgctxt "@action:button" +#~ msgid "View in Monitor" +#~ msgstr "Monitörde Görüntüle" + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "{printer_name}, '{job_name}' yazdırmayı tamamladı." + +#~ msgctxt "@info:status" +#~ msgid "The print job '{job_name}' was finished." +#~ msgstr "Yazdırma işi '{job_name}' tamamlandı." + +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "Baskı tamamlandı" + +#~ msgctxt "@label:material" +#~ msgid "Empty" +#~ msgstr "Boş" + +#~ msgctxt "@label:material" +#~ msgid "Unknown" +#~ msgstr "Bilinmiyor" + +#~ msgctxt "@info:title" +#~ msgid "Cloud error" +#~ msgstr "Bulut hatası" + +#~ msgctxt "@info:status" +#~ msgid "Could not export print job." +#~ msgstr "Yazdırma görevi dışa aktarılamadı." + +#~ msgctxt "@info:description" +#~ msgid "There was an error connecting to the cloud." +#~ msgstr "Buluta bağlanırken hata oluştu." + +#~ msgctxt "@info:status" +#~ msgid "Uploading via Ultimaker Cloud" +#~ msgstr "Ultimaker Cloud İle Yükleniyor" + +#~ msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." +#~ msgid "Connect to Ultimaker Cloud" +#~ msgstr "Ultimaker Cloud Platformuna Bağlan" + +#~ msgctxt "@action" +#~ msgid "Don't ask me again for this printer." +#~ msgstr "Bu yazıcı için bir daha sorma." + +#~ msgctxt "@info:status" +#~ msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." +#~ msgstr "Artık, Ultimaker hesabınızı kullanarak yazdırma görevlerini dilediğiniz yerden gönderebilir ve görüntüleyebilirsiniz." + +#~ msgctxt "@info:status" +#~ msgid "Connected!" +#~ msgstr "Bağlı!" + +#~ msgctxt "@action" +#~ msgid "Review your connection" +#~ msgstr "Bağlantınızı inceleyin" + +#~ msgctxt "@info:status Don't translate the XML tags !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "{0} ({1}) profilinde tanımlanan makine, mevcut makineniz ({2}) ile eşleşmiyor, içe aktarılamadı." + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "Failed to import profile from {0}:" +#~ msgstr "{0} dosyasından profil içe aktarımı başarısız oldu:" + +#~ msgctxt "@window:title" +#~ msgid "Existing Connection" +#~ msgstr "Mevcut Bağlantı" + +#~ msgctxt "@message:text" +#~ msgid "This printer/group is already added to Cura. Please select another printer/group." +#~ msgstr "Bu yazıcı/grup Cura’ya zaten eklenmiş. Lütfen başka bir yazıcı/grup seçin." + +#~ msgctxt "@label" +#~ msgid "Enter the IP address or hostname of your printer on the network." +#~ msgstr "IP adresini veya yazıcınızın ağ üzerindeki ana bilgisayar adını girin." + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "Yazıcıya Bağlan" + +#~ msgctxt "@title" +#~ msgid "Cura Settings Guide" +#~ msgstr "Cura Ayarlar Kılavuzu" + +#~ msgctxt "@info:tooltip" +#~ msgid "Zooming towards the mouse is not supported in the orthogonal perspective." +#~ msgstr "Fareye doğru yakınlaştırma yapılması ortografik perspektifte desteklenmez." + +#~ msgid "Orthogonal" +#~ msgstr "Ortografik" + +#~ msgctxt "description" +#~ msgid "Manages network connections to Ultimaker 3 printers." +#~ msgstr "Ultimaker 3 yazıcıları için ağ bağlantılarını yönetir." + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "UM3 Ağ Bağlantısı" + +#~ msgctxt "description" +#~ msgid "Provides extra information and explanations about settings in Cura, with images and animations." +#~ msgstr "Resim ve animasyonlar yardımıyla Cura'daki ayarlarla ilgili ekstra bilgi ve açıklama sunar." + +#~ msgctxt "name" +#~ msgid "Settings Guide" +#~ msgstr "Ayarlar Kılavuzu" + +#~ msgctxt "@item:inmenu" +#~ msgid "Cura Settings Guide" +#~ msgstr "Cura Ayarlar Kılavuzu" + +#~ msgctxt "@info:generic" +#~ msgid "Settings have been changed to match the current availability of extruders: [%s]" +#~ msgstr "Ayarlar, ekstruderlerin mevcut kullanılabilirliğine uyacak şekilde değiştirildi: [%s]" + +#~ msgctxt "@title:groupbox" +#~ msgid "User description" +#~ msgstr "Kullanıcı açıklaması" + +#~ msgctxt "@info" +#~ msgid "These options are not available because you are monitoring a cloud printer." +#~ msgstr "Görüntülediğiniz yazıcı bulut yazıcısı olduğundan bu seçenekleri kullanamazsınız." + +#~ msgctxt "@label link to connect manager" +#~ msgid "Go to Cura Connect" +#~ msgstr "Cura Connect’e git" + +#~ msgctxt "@info" +#~ msgid "All jobs are printed." +#~ msgstr "Tüm işler yazdırıldı." + +#~ msgctxt "@label link to connect manager" +#~ msgid "View print history" +#~ msgstr "Yazdırma geçmişini görüntüle" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "Yazıcınıza ağ üzerinden doğrudan bağlamak için, lütfen yazıcınızın ağ kablosu kullanan bir ağa bağlı olduğundan emin olun veya yazıcınızı WiFi ağına bağlayın. Cura'ya yazıcınız ile bağlanamıyorsanız g-code dosyalarını yazıcınıza aktarmak için USB sürücüsü kullanabilirsiniz.\n" +#~ "\n" +#~ "Aşağıdaki listeden yazıcınızı seçin:" + +#~ msgctxt "@info" +#~ msgid "" +#~ "Please make sure your printer has a connection:\n" +#~ "- Check if the printer is turned on.\n" +#~ "- Check if the printer is connected to the network." +#~ msgstr "" +#~ "Lütfen yazıcınızın bağlı olduğunu kontrol edin:\n" +#~ "- Yazıcının açık olduğunu kontrol edin.\n" +#~ "- Yazıcının ağa bağlı olduğunu kontrol edin." + +#~ msgctxt "@option:check" +#~ msgid "See only current build plate" +#~ msgstr "Sadece mevcut yapı levhasını görüntüle" + +#~ msgctxt "@action:button" +#~ msgid "Arrange to all build plates" +#~ msgstr "Tüm yapı levhalarına yerleştir" + +#~ msgctxt "@action:button" +#~ msgid "Arrange current build plate" +#~ msgstr "Sadece mevcut yapı levhasına yerleştir" + +#~ msgctxt "description" +#~ msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." +#~ msgstr "Bu formatı okuyan yazıcıları (Malyan, Makerbot ve diğer Sailfish tabanlı yazıcılar) desteklemek için Ortaya çıkacak parçanın X3G dosyası olarak kaydedilmesine izin verir." + +#~ msgctxt "name" +#~ msgid "X3GWriter" +#~ msgstr "X3GWriter" + +#~ msgctxt "description" +#~ msgid "Reads SVG files as toolpaths, for debugging printer movements." +#~ msgstr "Yazıcı hareketlerinde hata ayıklaması yapmak için takım yolu olarak SVG dosyalarını okur." + +#~ msgctxt "name" +#~ msgid "SVG Toolpath Reader" +#~ msgstr "SVG Takım Yolu Okuyucu" + #~ msgctxt "@item:inmenu" #~ msgid "Changelog" #~ msgstr "Değişiklik Günlüğü" diff --git a/resources/i18n/tr_TR/fdmextruder.def.json.po b/resources/i18n/tr_TR/fdmextruder.def.json.po index fb4a041bd8..b5c615bc1f 100644 --- a/resources/i18n/tr_TR/fdmextruder.def.json.po +++ b/resources/i18n/tr_TR/fdmextruder.def.json.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" "PO-Revision-Date: 2019-03-13 14:00+0200\n" "Last-Translator: Bothof \n" "Language-Team: Turkish\n" diff --git a/resources/i18n/tr_TR/fdmprinter.def.json.po b/resources/i18n/tr_TR/fdmprinter.def.json.po index bc78e87b01..2cfa52a184 100644 --- a/resources/i18n/tr_TR/fdmprinter.def.json.po +++ b/resources/i18n/tr_TR/fdmprinter.def.json.po @@ -5,12 +5,12 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" -"PO-Revision-Date: 2019-03-14 14:47+0100\n" -"Last-Translator: Bothof \n" -"Language-Team: Turkish\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" +"PO-Revision-Date: 2019-07-29 15:51+0100\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Turkish , Turkish \n" "Language: tr_TR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -215,6 +215,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "Makinenin mevcut yapı levhasını ısıtıp ısıtmadığı." +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "Yapı Hacmi Sıcaklığı Dengesi Mevcut" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "Makinenin yapı hacmi sıcaklığını dengeleyip dengelemediği." + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -238,7 +248,7 @@ msgstr "Ekstruder dişli çarklarının sayısı. Ekstruder dişli çarkı besle #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders That Are Enabled" -msgstr "" +msgstr "Etkinleştirilmiş Ekstruder Sayısı" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -248,7 +258,7 @@ msgstr "Etkinleştirilmiş ekstruder dişli çarklarının sayısı; yazılımda #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer Nozzle Diameter" -msgstr "" +msgstr "Dış Nozül Çapı" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter description" @@ -258,7 +268,7 @@ msgstr "Nozül ucunun dış çapı." #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle Length" -msgstr "" +msgstr "Nozül Uzunluğu" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance description" @@ -268,7 +278,7 @@ msgstr "Nozül ucu ve yazıcı başlığının en alt parçası arasındaki yük #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle Angle" -msgstr "" +msgstr "Nozül Açısı" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle description" @@ -278,7 +288,7 @@ msgstr "Yatay düzlem ve nozül ucunun sağ üzerinde bulunan konik parça aras #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat Zone Length" -msgstr "" +msgstr "Isı Bölgesi Uzunluğu" #: fdmprinter.def.json msgctxt "machine_heat_zone_length description" @@ -308,7 +318,7 @@ msgstr "Cura üzerinden sıcaklığın kontrol edilip edilmeme ayarı. Nozül s #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat Up Speed" -msgstr "" +msgstr "Isınma Hızı" #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed description" @@ -318,7 +328,7 @@ msgstr "Ortalama nozül ısınmasının normal yazdırma sıcaklıkları ve bekl #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool Down Speed" -msgstr "" +msgstr "Soğuma hızı" #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed description" @@ -337,8 +347,8 @@ msgstr "Nozül soğumadan önce ekstruderin etkin olmaması gerektiği minimum s #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" -msgstr "" +msgid "G-code Flavor" +msgstr "G-code türü" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" @@ -403,7 +413,7 @@ msgstr "Malzemeyi geri çekmek için G1 komutlarında E özelliği yerine aygıt #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed Areas" -msgstr "" +msgstr "İzin Verilmeyen Alanlar" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" @@ -423,7 +433,7 @@ msgstr "Nozülün girmesine izin verilmeyen alanlara sahip poligon listesi." #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine Head Polygon" -msgstr "" +msgstr "Makinenin Ana Poligonu" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -433,7 +443,7 @@ msgstr "Yazıcı başlığının 2B taslağı (fan başlıkları hariç)." #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine Head & Fan Polygon" -msgstr "" +msgstr "Makinenin Başlığı ve Fan Poligonu" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -443,7 +453,7 @@ msgstr "Yazıcı başlığının 2B taslağı (fan başlıkları dahil)." #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry Height" -msgstr "" +msgstr "Portal Yüksekliği" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -473,7 +483,7 @@ msgstr "Nozül iç çapı. Standart olmayan nozül boyutu kullanırken bu ayarı #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset with Extruder" -msgstr "" +msgstr "Ekstruder Ofseti" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -1270,6 +1280,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "En Keskin Köşe" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "Z Dikişi Konumu" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "Bir katmandaki her kısmın basılmaya başlanacağı yere yakın konum." + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "Sol Arka" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "Geri" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "Sağ Arka" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "Sağ" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "Sağ Ön" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "Ön" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "Sol Ön" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "Sol" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1297,8 +1357,8 @@ msgstr "Dikiş Köşesi Tercihi" #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "Modelin ana hatlarında yer alan köşelerin dikişin konumunu etkileyip etkilemediğini kontrol edin. Hiçbiri, köşelerin dikişin konumunu etkilemediği anlamına gelir. Dikişi Gizle, dikişin daha büyük olasılıkla bir iç köşe üzerinde oluşmasını sağlar. Dikişi Açığa Çıkar, dikişin daha büyük olasılıkla bir dış köşe üzerinde oluşmasını sağlar. Dikişi Gizle veya Açığa Çıkar, dikişin daha büyük olasılıkla bir iç veya dış köşe üzerinde oluşmasını sağlar." +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "Modelin ana hatlarında yer alan köşelerin dikişin konumunu etkileyip etkilemediğini kontrol edin. Hiçbiri, köşelerin dikişin konumunu etkilemediği anlamına gelir. Dikişi Gizle, dikişin daha büyük olasılıkla bir iç köşe üzerinde oluşmasını sağlar. Dikişi Açığa Çıkar, dikişin daha büyük olasılıkla bir dış köşe üzerinde oluşmasını sağlar. Dikişi Gizle veya Açığa Çıkar, dikişin daha büyük olasılıkla bir iç veya dış köşe üzerinde oluşmasını sağlar. Akıllı Gizleme, hem iç hem de dış köşelere izin verir ancak uygun olduğu durumlarda iç köşeleri daha sık seçer." #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1320,6 +1380,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "Dikişi Gizle veya Açığa Çıkar" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "Akıllı Gizleme" + #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" @@ -1332,13 +1397,13 @@ msgstr "Etkin olduğunda, z dikişi koordinatları her parçanın merkezine gör #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "Küçük Z Açıklıklarını Yoksay" +msgid "No Skin in Z Gaps" +msgstr "Z Boşluklarında Dış Katman Oluşturma" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "Modelde küçük dikey açıklıklar varsa bu dar yerlerdeki üst ve alt yüzeyleri oluşturmak için %5 oranında ek hesaplama süresi verilebilir. Bu gibi bir durumda ayarı devre dışı bırakın." +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "Modelde yalnızca birkaç katmanda küçük dikey boşluklar varsa normal şartlarda dar alandaki bu katmanların etrafında dış bir katman olmalıdır. Dikey boşluğun çok küçük olduğu durumlarda dış katman oluşturulmaması için bu ayarı etkinleştirin. Böylece baskı ve dilimleme süresi kısalır ancak teknik olarak bakıldığında havayla temasa açık dolgular kalır." #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1357,8 +1422,9 @@ msgstr "Ütülemeyi Etkinleştir" #: fdmprinter.def.json 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 "Malzeme ekstrude edilmeden önce üst yüzey üzerinden bir kere daha geçilir. Bu işlem en üstte bulunan plastiği eriterek daha pürüzsüz bir yüzey elde etmek için kullanılır." +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 "Üst yüzey üzerinden bir kere daha geçilir, ancak bu defa çok küçük malzeme ekstrüde edilir. Bu işlem en üstte bulunan plastiği eriterek daha pürüzsüz bir" +" yüzey oluşturur. Nozül haznesindeki baskı yüksek tutularak yüzeydeki kıvrımların malzemeyle dolması sağlanır." #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1450,6 +1516,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "Ütüleme sırasında oluşan maksimum anlık hız değişimi." +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "Yüzey Çakışma Oranı" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Duvarlar ile yüzey ekseni (uçları) arasındaki çakışma miktarını yüzey hatlarının hat genişliği ile en içteki duvarın bir yüzdesi olarak ayarlayın. Az miktar çakışma duvarların yüzeye sıkıca bağlanmasını sağlar. Eşit yüzey ve duvar hattı genişliği söz konusu olduğunda, %50’nin üstündeki yüzdelerde bu noktada yüzey ekstrüderinin nozül konumu halihazırda duvarın ortasına ulaşmış olacağından yüzeyin duvarı geçmiş olabileceğini unutmayın." + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "Yüzey Çakışması" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "Duvarlar ile yüzey ekseni (uçları) arasındaki çakışma miktarını ayarlayın. Az miktar çakışma duvarların yüzeye sıkıca bağlanmasını sağlar. Eşit yüzey ve duvar hattı genişliği söz konusu olduğunda, duvar kalınlığının yarısından fazla değerlerde bu noktada yüzey ekstrüderinin nozül konumu halihazırda duvarın ortasına ulaşmış olacağından yüzeyin duvarı geçmiş olabileceğini unutmayın." + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1615,6 +1701,17 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "Dolgu şekli Y ekseni boyunca bu mesafe kadar kaydırılır." +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +msgstr "Rastgele Boşluk Doldurma Başlat" + +#: 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 "Önce hangi boşluk doldurma hattının yapılacağını rastgele belirler. Böylece tek bir segmentin en güçlü yapıda olması önlenir ancak bu işlem ilave gezinti" +" hamlelerine neden olabilir." + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1669,26 +1766,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "Dolgu ve duvarlar arasındaki çakışma miktarı. Hafif bir çakışma duvarların dolguya sıkıca bağlanmasını sağlar." -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "Yüzey Çakışma Oranı" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Duvarlar ile yüzey ekseni (uçları) arasındaki çakışma miktarını yüzey hatlarının hat genişliği ile en içteki duvarın bir yüzdesi olarak ayarlayın. Az miktar çakışma duvarların yüzeye sıkıca bağlanmasını sağlar. Eşit yüzey ve duvar hattı genişliği söz konusu olduğunda, %50’nin üstündeki yüzdelerde bu noktada yüzey ekstrüderinin nozül konumu halihazırda duvarın ortasına ulaşmış olacağından yüzeyin duvarı geçmiş olabileceğini unutmayın." - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "Yüzey Çakışması" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "Duvarlar ile yüzey ekseni (uçları) arasındaki çakışma miktarını ayarlayın. Az miktar çakışma duvarların yüzeye sıkıca bağlanmasını sağlar. Eşit yüzey ve duvar hattı genişliği söz konusu olduğunda, duvar kalınlığının yarısından fazla değerlerde bu noktada yüzey ekstrüderinin nozül konumu halihazırda duvarın ortasına ulaşmış olacağından yüzeyin duvarı geçmiş olabileceğini unutmayın." - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1872,12 +1949,12 @@ msgstr "Yazdırma için kullanılan varsayılan sıcaklık. Bu sıcaklık malzem #: fdmprinter.def.json msgctxt "build_volume_temperature label" msgid "Build Volume Temperature" -msgstr "" +msgstr "Yapı Disk Bölümü Sıcaklığı" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." -msgstr "" +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." +msgstr "Baskı yapılacak ortamın sıcaklığı. Bu değer 0 ise yapı hacminin sıcaklığı ayarlanmaz." #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1989,6 +2066,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "Yüzde cinsinden çekme oranı." +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "Kristalli Malzeme" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "Bu malzeme ısıtıldığında temiz bir şekilde parçalanan tür de mi (kristalli) yoksa uzun iç içe polimer zincirler (kristal olmayan) oluşturan türde mi?" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "Sızma Önleme Geri Çekme Mesafesi" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "Malzemenin sızma yapmaması için gereken geri çekilme mesafesidir." + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "Sızma Önleme Geri Çekme Hızı" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "Filament değişimi sırasında malzemenin sızma yapmaması için gereken geri çekilme hızıdır." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "Geri Çekme Pozisyonunda Durma Mesafesi" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "Filamentin ısıtıldığında kopmadan esneyebileceği mesafedir." + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "Durma Payına Uygun Geri Çekme Hızı" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "Filamentin kopmadan ne kadar hızlı geri çekilmesi gerektiğidir." + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "Kopma Geri Çekme Mesafesi" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "Sorunsuz kopması için filamentin geri çekilmesi gereken mesafedir." + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "Kopma Geri Çekme Hızı" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "Sorunsuz kopması için filamentin geri çekilmesi gereken hızdır." + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "Kopma Sıcaklığı" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "Sorunsuz kopması için filament koptuğundaki sıcaklık değeridir." + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -1999,6 +2156,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "Akış dengeleme: sıkıştırılan malzeme miktarı bu değerle çoğaltılır." +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "Duvar Akışı" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "Duvar hatlarının akış telafisidir." + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "Dış Duvar Akışı" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "En dıştaki duvar hattının akış telafisidir." + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "İç Duvar Akışı" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "En dıştaki duvar hattı hariç diğer duvar hatlarının akış telafisidir." + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "Üst/Alt Akış" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "Üst/alt hatların akış telafisidir." + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "Üst Yüzeyin Dış Katman Akışı" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "Baskının üst bölümlerindeki hatların akış telafisidir." + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "Dolgu Akışı" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "Dolgu hatlarının akış telafisidir." + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "Etek/Kenar Akışı" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "Etek veya kenar hatlarının akış telafisidir." + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "Destek Akışı" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "Destek yapı hatlarının akış telafisidir." + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "Destek Ara Yüzeyi Akışı" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "Destek çatı ve zemin hatlarının akış telafisidir." + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "Destek Çatı Akışı" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "Destek çatı hatlarının akış telafisidir." + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "Destek Zemin Akışı" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "Destek zemin hatlarının akış telafisidir." + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "İlk Direk Akışı" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "Temel kule hatlarının akış telafisidir." + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2116,8 +2393,8 @@ msgstr "Destek Geri Çekmelerini Sınırlandır" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." -msgstr "Düz çizgi üzerinde destekler arasında hareket ederken geri çekmeyi atla. Bu ayarın etkinleştirilmesi yazdırma süresi tasarrufu sağlar ancak destek yapısı içinde aşırı dizilime yol açabilir." +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." +msgstr "Düz hat üzerinde destekler arasında hareket ederken geri çekmeyi atlayın. Bu ayarın etkinleştirilmesi baskı süresini kısaltır ancak destek yapısında ölçüsüz dizilime yol açabilir." #: fdmprinter.def.json msgctxt "material_standby_temperature label" @@ -2169,6 +2446,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "Nozül değişiminin çekmesi sonucunda filamanın geriye doğru itildiği hız." +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "Nozül Değişimiyle Çalışmaya Hazırlanacak Ek Miktar" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "Nozül değişiminin ardından çalışmaya hazırlanacak ek malzemedir." + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2360,14 +2647,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "Etek ve kenarın yazdırıldığı hız. Bu işlem normalde ilk katman hızında yapılır, ama etek ve kenarı farklı hızlarda yazdırmak isteyebilirsiniz." #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "Maksimum Z Hızı" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "Z Atlama Hızı" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "Yapı levhasının hareket ettiği maksimum hız. Bu hızı 0’a ayarlamak yazdırmanın maksimum z hızı için aygıt yazılımı kullanmasına neden olur." +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "Z Atlamaları için yapılan dikey Z hareketinin gerçekleştirileceği hızdır. Yapı plakasının veya makine tezgahının hareket etmesi daha zor olduğundan genelde baskı hızından daha düşüktür." #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2869,16 +3156,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "Hareket esnasında atlama yaparken nozül ve daha önce yazdırılmış olan bölümler arasındaki mesafe." -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "Katmanları Aynı Bölümle Başlatın" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "Bir önceki katmanın bitirdiği bir parçayı yeni bir katmanla tekrar yazdırmamak için, her bir katmanda nesneyi yazdırmaya aynı noktanın yakınından başlayın. Bu şekilde daha iyi çıkıntılar ve küçük parçalar oluşturulur, ancak yazdırma süresi uzar." - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -2942,12 +3219,12 @@ msgstr "Makine bir ekstruderden diğerine geçtikten sonra, nozül ve baskı ara #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height label" msgid "Z Hop After Extruder Switch Height" -msgstr "" +msgstr "Ekstruder Yüksekliği Değişimi Sonrasındaki Z Sıçraması" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height description" msgid "The height difference when performing a Z Hop after extruder switch." -msgstr "" +msgstr "Ekstruder değişiminden sonra Z Sıçraması yapılırken oluşan yükseklik farkı." #: fdmprinter.def.json msgctxt "cooling label" @@ -3222,7 +3499,7 @@ msgstr "Çapraz" #: fdmprinter.def.json msgctxt "support_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "Gyroid" #: fdmprinter.def.json msgctxt "support_wall_count label" @@ -3285,14 +3562,15 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "Yazdırılan ilk katman destek yapı hatları arasındaki mesafedir. Bu ayar destek yoğunluğuna göre hesaplanır." #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "Destek Dolgu Hattı Yönü" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." -msgstr "Destekler için dolgu şeklinin döndürülmesi. Destek dolgu şekli yatay düzlemde döndürülür." +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 "Kullanılacak tam hat yönlerinin listesi. Katmanlar ilerledikçe listedeki öğeler sırayla kullanılır ve listenin sonuna gelindiğinde tekrar baştan başlanır." +" Liste öğeleri virgülle ayrılır ve listenin tamamı köşeli paranteze alınır. Varsayılan ayar listenin boş olmasıdır ve bu durumda varsayılan açı 0'dır." #: fdmprinter.def.json msgctxt "support_brim_enable label" @@ -3421,8 +3699,8 @@ msgstr "Destek Birleşme Mesafesi" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." -msgstr "X/Y yönündeki destek yapıları arasındaki maksimum mesafe. Ayrı yapılar birbirlerine bu değerden daha yakınsa yapılar birleşip tek olur." +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." +msgstr "X/Y yönlerinde destek yapıları arasındaki maksimum mesafedir. Ayrı yapılar birbirlerine bu değerden daha yakınsa yapılar birleşerek tek bir yapı haline gelir." #: fdmprinter.def.json msgctxt "support_offset label" @@ -3759,6 +4037,42 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "Destek zeminlerine uygulanan ofset miktarı." +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +msgstr "Destek Arabirim Hattı Yönleri" + +#: 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 "Kullanılacak tam hat yönlerinin listesi. Katmanlar ilerledikçe listedeki öğeler sırayla kullanılır ve listenin sonuna gelindiğinde tekrar baştan başlanır." +" Liste öğeleri virgülle ayrılır ve listenin tamamı köşeli paranteze alınır. Varsayılan ayar, varsayılan açıların kullanıldığı (ara birimler biraz kalınsa" +" 45 ile 135 derece arasında değişir veya 90 derecedir) boş listedir." + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +msgstr "Destek Çatı Hattı Yönleri" + +#: 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 "Kullanılacak tam hat yönlerinin listesi. Katmanlar ilerledikçe listedeki öğeler sırayla kullanılır ve listenin sonuna gelindiğinde tekrar baştan başlanır." +" Liste öğeleri virgülle ayrılır ve listenin tamamı köşeli paranteze alınır. Varsayılan ayar, varsayılan açıların kullanıldığı (ara birimler biraz kalınsa" +" 45 ile 135 derece arasında değişir veya 90 derecedir) boş listedir." + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +msgstr "Destek Zemin Hattı Yönleri" + +#: 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 "Kullanılacak tam hat yönlerinin listesi. Listedeki öğeler katmanlar ilerledikçe sırayla kullanılır ve listenin sonuna gelindiğinde tekrar baştan başlanır." +" Liste öğeleri virgülle ayrılır ve listenin tamamı köşeli paranteze alınır. Varsayılan ayar, varsayılan açıların kullanıldığı (ara birimler biraz kalınsa" +" 45 ile 135 derece arasında değişir veya 90 derecedir) boş listedir." + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3800,14 +4114,14 @@ msgid "The diameter of a special tower." msgstr "Özel bir direğin çapı." #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "Minimum Çap" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "Kule Destekli Maksimum Çap" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." -msgstr "Özel bir destek direği ile desteklenecek küçük bir alanın X/Y yönündeki minimum çapı." +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "Özel bir destek kulesiyle desteklenecek küçük bir alanın X/Y yönlerindeki maksimum çapıdır." #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" @@ -4303,16 +4617,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "Malzemenin hazırlanmasına yardımcı olan yazıcının yanındaki direği her nozül değişiminden sonra yazdırın." -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "Dairesel İlk Direk" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "İlk direği dairesel bir şekil olarak yapın." - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4353,16 +4657,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "İlk direk konumunun y koordinatı." -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "İlk Direk Akışı" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "Akış dengeleme: sıkıştırılan malzeme miktarı bu değerle çoğaltılır." - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4376,12 +4670,12 @@ msgstr "Bir nozül ile ilk direği yazdırdıktan sonra, diğer nozülden ilk di #: fdmprinter.def.json msgctxt "prime_tower_brim_enable label" msgid "Prime Tower Brim" -msgstr "" +msgstr "Astarlama Direği Kenarı" #: fdmprinter.def.json msgctxt "prime_tower_brim_enable description" msgid "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type." -msgstr "" +msgstr "Model ihtiyaç duymasa da astarlama direkleri bir kenarın sağladığı ekstra yapışkanlığa ihtiyaç duyabilir. Şu anda \"radye\" yapışma tipi ile birlikte kullanılamamaktadır." #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4665,8 +4959,8 @@ msgstr "Helezon Şeklinde Düzeltme" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." -msgstr "Z dikişinin görünürlüğünü azaltmak için helezon şeklinde konturları düzeltin (Z-dikişi yazdırma durumunda çok az görünür olmalı, ancak tabaka görünümünde halen görünür olmalıdır). Düzeltme işleminin ince yüzey detaylarında bulanıklığa neden olabileceğini unutmayınız." +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgstr "Z dikişinin görünürlüğünü azaltmak için helezon şeklindeki konturları düzeltin (Z dikişi baskıda zor görünmeli ancak katman görünümünde görünür olmalıdır). Düzeltme işleminin ince yüzey detaylarında bulanıklığa neden olabileceğini göz önünde bulundurun." #: fdmprinter.def.json msgctxt "relative_extrusion label" @@ -4901,12 +5195,13 @@ msgstr "Bir hareket çizgisinin dilimlemeden sonraki minimum boyutu. Bunu artır #: fdmprinter.def.json msgctxt "meshfix_maximum_deviation label" msgid "Maximum Deviation" -msgstr "" +msgstr "Maksimum Sapma" #: 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." -msgstr "" +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 "Maksimum Çözünürlük ayarı için çözünürlük azaltıldığında izin verilen maksimum sapma. Bu değeri artırırsanız baskının doğruluğu azalacak ancak g kodu daha" +" küçük olacaktır. Maksimum Sapma, Maksimum Çözünürlük için sınırdır, dolayısıyla iki değer çelişirse Maksimum Sapma her zaman doğru kabul edilir." #: fdmprinter.def.json msgctxt "support_skip_some_zags label" @@ -5165,8 +5460,8 @@ msgstr "Konik Desteği Etkinleştir" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "Deneysel Özellik: Destek alanlarını alt kısımlarda çıkıntılardakinden daha küçük yapar." +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "Alttaki destek alanlarını çıkıntıda olanlardan daha küçük yapın." #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5510,7 +5805,7 @@ msgstr "Nozül ve aşağı yöndeki hatlar arasındaki mesafe. Daha büyük aç #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled label" msgid "Use Adaptive Layers" -msgstr "" +msgstr "Uyarlanabilir Katmanların Kullanımı" #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled description" @@ -5520,7 +5815,7 @@ msgstr "Uyarlanabilir katmanlar modelin şekline bağlı olarak katman yüksekli #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation label" msgid "Adaptive Layers Maximum Variation" -msgstr "" +msgstr "Uyarlanabilir Katmanların Azami Değişkenliği" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" @@ -5530,7 +5825,7 @@ msgstr "Taban katmanı yüksekliğine göre izin verilen azami yükseklik." #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" msgid "Adaptive Layers Variation Step Size" -msgstr "" +msgstr "Uyarlanabilir Katmanların Değişkenlik Adım Boyu" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step description" @@ -5540,7 +5835,7 @@ msgstr "Bir önceki ve bir sonraki katman yüksekliği arasındaki yükseklik fa #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold label" msgid "Adaptive Layers Threshold" -msgstr "" +msgstr "Uyarlanabilir Katman Eşiği" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" @@ -5760,152 +6055,192 @@ msgstr "Üçüncü köprü yüzey alanı katmanı yazdırılırken kullanılacak #: fdmprinter.def.json msgctxt "clean_between_layers label" msgid "Wipe Nozzle Between Layers" -msgstr "" +msgstr "Katmanlar Arasındaki Sürme Nozülü" #: fdmprinter.def.json msgctxt "clean_between_layers description" msgid "Whether to include nozzle wipe G-Code between layers. Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working." -msgstr "" +msgstr "Katmanlar arasına sürme nozülü G-code'unun dahil edilip edilmeyeceği. Bu ayarın etkinleştirilmesi katman değişiminde geri çekme davranışını etkileyebilir. Sürme komutunun çalıştığı katmanlarda geri çekmeyi kontrol etmek için lütfen Sürme Geri Çekme ayarlarını kullanın." #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe label" msgid "Material Volume Between Wipes" -msgstr "" +msgstr "Sürme Hareketleri Arasındaki Malzeme Hacmi" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe description" msgid "Maximum material, that can be extruded before another nozzle wipe is initiated." -msgstr "" +msgstr "Başka bir sürme nozülü başlatılmadan önce ekstrude edilebilecek maksimum malzeme miktarı." #: fdmprinter.def.json msgctxt "wipe_retraction_enable label" msgid "Wipe Retraction Enable" -msgstr "" +msgstr "Sürme Geri Çekmenin Etkinleştirilmesi" #: fdmprinter.def.json msgctxt "wipe_retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area." -msgstr "" +msgstr "Nozül yazdırılamayan alana doğru hareket ettiğinde filamanı geri çeker." #: fdmprinter.def.json msgctxt "wipe_retraction_amount label" msgid "Wipe Retraction Distance" -msgstr "" +msgstr "Sürme Geri Çekme Mesafesi" #: fdmprinter.def.json msgctxt "wipe_retraction_amount description" msgid "Amount to retract the filament so it does not ooze during the wipe sequence." -msgstr "" +msgstr "Filamanın sürme dizisi sırasında sızıntı yapmaması için filanın geri çekilme miktarı." #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount label" msgid "Wipe Retraction Extra Prime Amount" -msgstr "" +msgstr "Sürme Geri Çekme Sırasındaki İlave Astar Miktarı" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount description" msgid "Some material can ooze away during a wipe travel moves, which can be compensated for here." -msgstr "" +msgstr "Sürme hareketi sırasında bazı malzemeler eksilebilir; bu malzemeler burada telafi edebilir." #: fdmprinter.def.json msgctxt "wipe_retraction_speed label" msgid "Wipe Retraction Speed" -msgstr "" +msgstr "Sürme Geri Çekme Hızı" #: fdmprinter.def.json msgctxt "wipe_retraction_speed description" msgid "The speed at which the filament is retracted and primed during a wipe retraction move." -msgstr "" +msgstr "Filamanın geri çekildiği ve sürme geri çekme hareketi sırasında astarlandığı hız." #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed label" msgid "Wipe Retraction Retract Speed" -msgstr "" +msgstr "Sürme Geri Çekme Sırasındaki Çekim Hızı" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed description" msgid "The speed at which the filament is retracted during a wipe retraction move." -msgstr "" +msgstr "Filamanın sürme geri çekme hareketi sırasında geri çekildiği hız." #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "Geri Çekme Sırasındaki Astar Hızı" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed description" msgid "The speed at which the filament is primed during a wipe retraction move." -msgstr "" +msgstr "Filamanın sürme geri çekme hareketi sırasında astarlandığı hız." #: fdmprinter.def.json msgctxt "wipe_pause label" msgid "Wipe Pause" -msgstr "" +msgstr "Sürmeyi Durdurma" #: fdmprinter.def.json msgctxt "wipe_pause description" msgid "Pause after the unretract." -msgstr "" +msgstr "Geri çekmenin geri alınmasından sonraki duraklama." #: fdmprinter.def.json msgctxt "wipe_hop_enable label" msgid "Wipe Z Hop When Retracted" -msgstr "" +msgstr "Geri Çekildiğinde Sürme Z Sıçraması" #: fdmprinter.def.json msgctxt "wipe_hop_enable description" msgid "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." -msgstr "" +msgstr "Bir geri çekme işlemi yapıldığında baskı tepsisi nozül ve baskı arasında açıklık oluşturmak üzere alçaltılır. Bu, hareket sırasında nozülün baskıya çarpmasını önleyerek baskının devrilip baskı tepsisinden düşmesini önler." #: fdmprinter.def.json msgctxt "wipe_hop_amount label" msgid "Wipe Z Hop Height" -msgstr "" +msgstr "Sürme Z Sıçraması Yüksekliği" #: fdmprinter.def.json msgctxt "wipe_hop_amount description" msgid "The height difference when performing a Z Hop." -msgstr "" +msgstr "Z Sıçraması yapılırken oluşan yükseklik farkı." #: fdmprinter.def.json msgctxt "wipe_hop_speed label" msgid "Wipe Hop Speed" -msgstr "" +msgstr "Sürme Sıçrama Hızı" #: fdmprinter.def.json msgctxt "wipe_hop_speed description" msgid "Speed to move the z-axis during the hop." -msgstr "" +msgstr "Sıçrama sırasında z eksenini hareket ettirmek için gerekli hız." #: fdmprinter.def.json msgctxt "wipe_brush_pos_x label" msgid "Wipe Brush X Position" -msgstr "" +msgstr "Sürme Fırçası X Konumu" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x description" msgid "X location where wipe script will start." -msgstr "" +msgstr "Sürme komutunun başlatılacağı X konumu." #: fdmprinter.def.json msgctxt "wipe_repeat_count label" msgid "Wipe Repeat Count" -msgstr "" +msgstr "Sürme Tekrar Sayısı" #: fdmprinter.def.json msgctxt "wipe_repeat_count description" msgid "Number of times to move the nozzle across the brush." -msgstr "" +msgstr "Nozülün fırçadan geçirilme sayısı." #: fdmprinter.def.json msgctxt "wipe_move_distance label" msgid "Wipe Move Distance" -msgstr "" +msgstr "Sürme Hareket Mesafesi" #: fdmprinter.def.json msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." -msgstr "" +msgstr "Başlığı fırçada ileri ve geri hareket ettirme mesafesi." + +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "Maksimum Küçük Delik Boyutu" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "Bu değerden daha küçük çaptaki delik ve parça ana hatları Küçük Özellik Hızı kullanılarak basılacaktır." + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "Maksimum Küçük Özellik Uzunluğu" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "Bu uzunluktan kısa olan özellik ana hatları Kısa Özellik Hızı kullanılarak basılacaktır." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +msgstr "Küçük Özellik Hızı" + +#: 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 "Küçük özellikler normal baskı hızının bu yüzdesinde basılacaktır. Daha yavaş baskı, yapışma ve doğruluğu artırmaya yardımcı olabilir." + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor_0 label" +msgid "First Layer Speed" +msgstr "İlk Katman Hızı" + +#: 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 "İlk katman üzerindeki küçük özellikler normal baskı hızının bu yüzdesinde basılacaktır. Daha yavaş baskı, yapışma ve doğruluğu artırmaya yardımcı olabilir." #: fdmprinter.def.json msgctxt "command_line_settings label" @@ -5967,6 +6302,90 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." msgstr "Modeli dosyadan indirirken modele uygulanacak olan dönüşüm matrisi." +#~ 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 "Malzeme ekstrude edilmeden önce üst yüzey üzerinden bir kere daha geçilir. Bu işlem en üstte bulunan plastiği eriterek daha pürüzsüz bir yüzey elde etmek için kullanılır." + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "Katmanları Aynı Bölümle Başlatın" + +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "Bir önceki katmanın bitirdiği bir parçayı yeni bir katmanla tekrar yazdırmamak için, her bir katmanda nesneyi yazdırmaya aynı noktanın yakınından başlayın. Bu şekilde daha iyi çıkıntılar ve küçük parçalar oluşturulur, ancak yazdırma süresi uzar." + +#~ msgctxt "support_infill_angles description" +#~ msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +#~ msgstr "Destekler için dolgu şeklinin döndürülmesi. Destek dolgu şekli yatay düzlemde döndürülür." + +#~ 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." +#~ msgstr "Maksimum Çözünürlük ayarı için çözünürlüğü azaltırken izin verilen maksimum sapma. Bunu arttırırsanız baskının doğruluğu azalacak fakat g-code daha küçük olacaktır." + +#~ msgctxt "machine_gcode_flavor label" +#~ msgid "G-code Flavour" +#~ msgstr "G-code Türü" + +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "Modelin ana hatlarında yer alan köşelerin dikişin konumunu etkileyip etkilemediğini kontrol edin. Hiçbiri, köşelerin dikişin konumunu etkilemediği anlamına gelir. Dikişi Gizle, dikişin daha büyük olasılıkla bir iç köşe üzerinde oluşmasını sağlar. Dikişi Açığa Çıkar, dikişin daha büyük olasılıkla bir dış köşe üzerinde oluşmasını sağlar. Dikişi Gizle veya Açığa Çıkar, dikişin daha büyük olasılıkla bir iç veya dış köşe üzerinde oluşmasını sağlar." + +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "Küçük Z Açıklıklarını Yoksay" + +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "Modelde küçük dikey açıklıklar varsa bu dar yerlerdeki üst ve alt yüzeyleri oluşturmak için %5 oranında ek hesaplama süresi verilebilir. Bu gibi bir durumda ayarı devre dışı bırakın." + +#~ msgctxt "build_volume_temperature description" +#~ msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +#~ msgstr "Yapı disk bölümü için kullanılan sıcaklık. Bu 0 olursa yapı disk bölümü sıcaklığı ayarlanmaz." + +#~ msgctxt "limit_support_retractions description" +#~ msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +#~ msgstr "Düz çizgi üzerinde destekler arasında hareket ederken geri çekmeyi atla. Bu ayarın etkinleştirilmesi yazdırma süresi tasarrufu sağlar ancak destek yapısı içinde aşırı dizilime yol açabilir." + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "Maksimum Z Hızı" + +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "Yapı levhasının hareket ettiği maksimum hız. Bu hızı 0’a ayarlamak yazdırmanın maksimum z hızı için aygıt yazılımı kullanmasına neden olur." + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "X/Y yönündeki destek yapıları arasındaki maksimum mesafe. Ayrı yapılar birbirlerine bu değerden daha yakınsa yapılar birleşip tek olur." + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "Minimum Çap" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "Özel bir destek direği ile desteklenecek küçük bir alanın X/Y yönündeki minimum çapı." + +#~ msgctxt "prime_tower_circular label" +#~ msgid "Circular Prime Tower" +#~ msgstr "Dairesel İlk Direk" + +#~ msgctxt "prime_tower_circular description" +#~ msgid "Make the prime tower as a circular shape." +#~ msgstr "İlk direği dairesel bir şekil olarak yapın." + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "Akış dengeleme: sıkıştırılan malzeme miktarı bu değerle çoğaltılır." + +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "Z dikişinin görünürlüğünü azaltmak için helezon şeklinde konturları düzeltin (Z-dikişi yazdırma durumunda çok az görünür olmalı, ancak tabaka görünümünde halen görünür olmalıdır). Düzeltme işleminin ince yüzey detaylarında bulanıklığa neden olabileceğini unutmayınız." + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "Deneysel Özellik: Destek alanlarını alt kısımlarda çıkıntılardakinden daha küçük yapar." + #~ msgctxt "extruders_enabled_count label" #~ msgid "Number of Extruders that are enabled" #~ msgstr "Etkinleştirilmiş Ekstruder sayısı" diff --git a/resources/i18n/zh_CN/cura.po b/resources/i18n/zh_CN/cura.po index a248f99451..a3e525a21c 100644 --- a/resources/i18n/zh_CN/cura.po +++ b/resources/i18n/zh_CN/cura.po @@ -5,12 +5,12 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" -"PO-Revision-Date: 2019-03-14 14:49+0100\n" -"Last-Translator: Bothof \n" -"Language-Team: PCDotFan , Bothof \n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" +"PO-Revision-Date: 2019-07-29 15:51+0100\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Chinese , PCDotFan , Chinese \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 2.1.1\n" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "打印机设置" @@ -85,36 +85,45 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "配置文件已被合并并激活。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "AMF 文件" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USB 联机打印" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "通过 USB 联机打印" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "通过 USB 联机打印" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "通过 USB 连接" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "正在进行 USB 打印,关闭 Cura 将停止此打印。您确定吗?" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 -msgctxt "X3G Writer File Description" -msgid "X3G File" -msgstr "X3G 文件" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "正在进行打印在上一次打印完成之前,Cura 无法通过 USB 启动另一次打印。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +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" @@ -126,6 +135,11 @@ 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" @@ -160,7 +174,7 @@ msgid "Save to Removable Drive {0}" msgstr "保存到可移动磁盘 {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "没有可进行写入的文件格式!" @@ -197,10 +211,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/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "错误" @@ -229,9 +242,9 @@ 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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "警告" @@ -258,347 +271,149 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "可移动磁盘" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "通过网络打印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "通过网络打印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "已通过网络连接。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "已通过网络连接。请在打印机上接受访问请求。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "已通过网络连接,但没有打印机的控制权限。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "已发送打印机访问请求,请在打印机上批准该请求" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "身份验证状态" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "身份验证状态" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "重试" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "重新发送访问请求" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "打印机接受了访问请求" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "无法使用本打印机进行打印,无法发送打印作业。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "请求访问" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "向打印机发送访问请求" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "无法启动新的打印作业。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "Ultimaker 配置存在问题,导致无法开始打印。请解决此问题,然后再继续。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "配置不匹配" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "您确定要使用所选配置进行打印吗?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "打印机的配置或校准与 Cura 之间不匹配。为了获得最佳打印效果,请务必切换打印头和打印机中插入的材料。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "发送新作业(暂时)受阻,仍在发送前一份打印作业。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "向打印机发送数据" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "正在发送数据" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "取消" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "插槽 {slot_number} 中未加载 Printcore" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "插槽 {slot_number} 中未加载材料" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "为挤出机 {extruder_id} 选择了不同的 PrintCore(Cura: {cura_printcore_name},打印机:{remote_printcore_name})" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "您为挤出机 {2} 选择了不同的材料(Cura:{0},打印机:{1})" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "与您的打印机同步" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "您想在 Cura 中使用当前的打印机配置吗?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "打印机上的打印头和/或材料与当前项目中的不同。 为获得最佳打印效果,请始终使用已插入打印机的打印头和材料进行切片。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "已通过网络连接" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "打印作业已成功发送到打印机。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "数据已发送" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "在监控器中查看" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "打印机 '{printer_name}' 完成了打印任务 '{job_name}'。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "打印作业 '{job_name}' 已完成。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "打印完成" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "空" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "未知" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "通过云打印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "通过云打印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "通过云连接" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "云错误" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "无法导出打印作业。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "无法将数据上传到打印机。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "明天" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "今天" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "连接到云时出错。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "使用您的 Ultimaker account 帐户从任何地方发送和监控打印作业。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "对此打印机不再询问。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "开始" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "您现在可以使用您的 Ultimaker account 帐户从任何地方发送和监控打印作业。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "已连接!" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "查看您的连接" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "通过网络连接" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" -msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +msgctxt "@action:button Preceded by 'Ready to'." +msgid "Print over network" +msgstr "通过网络打印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "通过网络打印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "已通过网络连接" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "请等待当前作业完成发送。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "打印错误" + +#: /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 "您正在尝试连接到 {0},但它不是组中的主机。您可以访问网页,将其配置为组主机。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "非组中的主机" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "配置组" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "使用您的 Ultimaker account 帐户从任何地方发送和监控打印作业。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "连接到 Ultimaker Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "开始" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "发送打印作业" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "正在将打印作业上传至打印机。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "打印作业已成功发送到打印机。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "数据已发送" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "您正在尝试连接未运行 Ultimaker Connect 的打印机。请将打印机更新至最新固件。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "请更新升级打印机" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "Cura 已检测到材料配置文件尚未安装到组 {0} 中的主机打印机上。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "正在将材料发送到打印机" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "无法将数据上传到打印机。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "网络错误" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "明天" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "今天" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "通过云打印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "通过云打印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" +msgstr "通过云连接" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 msgctxt "@item:inmenu" msgid "Monitor" msgstr "监控" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "无法获取更新信息。" @@ -625,12 +440,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "分层视图" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "当单线打印(Wire Printing)功能开启时,Cura 将无法准确地显示打印层(Layers)" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "仿真视图" @@ -685,6 +500,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF 图像" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "打开压缩三角网格" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "COLLADA 数据资源交换" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "glTF 二进制" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "glTF 嵌入式 JSON" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "斯坦福三角格式" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "压缩 COLLADA 数据资源交换" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -765,19 +610,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF 文件" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "喷嘴" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "打开项目文件" @@ -792,18 +637,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G 文件" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "解析 G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "G-code 详细信息" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "发送文件之前,请确保 G-code 适用于当前打印机和打印机配置。当前 G-code 文件可能不准确。" @@ -906,16 +751,16 @@ msgstr "登录失败" #: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33 msgctxt "@info:not supported profile" msgid "Not supported" -msgstr "" +msgstr "不支持" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 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:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -928,116 +773,109 @@ msgid "Invalid file URL:" msgstr "文件 URL 无效:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" -msgstr "已根据挤出机的当前可用性更改设置:[%s]" +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 msgctxt "@info:title" msgid "Settings updated" msgstr "设置已更新" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "挤出机已禁用" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, 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:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, 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:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, 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:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "导出成功" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, 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:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, 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:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, 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:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, 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:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "配置文件 {0} ({1}) 中定义的机器与当前机器 ({2}) 不匹配,无法导入。" - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "已成功导入配置文件 {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, 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:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, 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:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "自定义配置文件" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "配置文件缺少打印质量类型定义。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1086,7 +924,7 @@ msgstr "Skirt" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:84 msgctxt "@tooltip" msgid "Prime Tower" -msgstr "" +msgstr "装填塔" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:85 msgctxt "@tooltip" @@ -1115,7 +953,7 @@ msgctxt "@action:button" msgid "Next" msgstr "下一步" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1123,22 +961,36 @@ 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/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "关闭" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" 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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "取消" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1155,23 +1007,22 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "所有文件 (*)" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" -msgstr "" +msgstr "无法连接到下列打印机,因为这些打印机已在组中" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" -msgstr "" +msgstr "可用的网络打印机" #: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689 msgctxt "@label" @@ -1184,12 +1035,12 @@ msgctxt "@label" msgid "Custom" msgstr "自定义" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "由于“打印序列”设置的值,成形空间体积高度已被减少,以防止十字轴与打印模型相冲突。" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "成形空间体积" @@ -1207,46 +1058,51 @@ msgstr "试图在没有适当数据或元数据的情况下恢复Cura备份。" #: /home/ruben/Projects/Cura/cura/Backups/Backup.py:125 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that is higher than the current version." -msgstr "" +msgstr "尝试恢复的 Cura 备份版本高于当前版本。" #: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationHelpers.py:79 msgctxt "@message" msgid "Could not read response." -msgstr "" +msgstr "无法读取响应。" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 msgctxt "@info" msgid "Unable to reach the Ultimaker account server." msgstr "无法连接 Ultimaker 帐户服务器。" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:66 +#: /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." -msgstr "" +msgstr "在授权此应用程序时,须提供所需权限。" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "尝试登录时出现意外情况,请重试。" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "复制并放置模型" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "放置模型" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "无法在成形空间体积内放下全部模型" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "放置模型" @@ -1395,48 +1251,48 @@ msgstr "日志" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" -msgstr "用户说明" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" +msgstr "用户说明(注意:为避免开发人员可能不熟悉您的语言,请尽量使用英语)" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "发送报告" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "正在载入打印机..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "正在设置场景..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "正在载入界面…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, 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:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, 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:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "所选模型过小,无法加载。" @@ -1444,103 +1300,108 @@ msgstr "所选模型过小,无法加载。" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58 msgctxt "@title:label" msgid "Printer Settings" -msgstr "" +msgstr "打印机设置" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X (宽度)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (深度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (高度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "打印平台形状" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" -msgstr "" +msgstr "置中" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" -msgstr "" +msgstr "加热床" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "加热的构建体积" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "G-code 风格" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" -msgstr "" +msgstr "打印头设置" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X 最小值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y 最小值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "X 最大值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "Y 最大值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" -msgstr "" +msgstr "十字轴高度" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "挤出机数目" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" -msgstr "" +msgstr "开始 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" -msgstr "" +msgstr "结束 G-code" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:42 msgctxt "@title:tab" @@ -1550,7 +1411,7 @@ msgstr "打印机" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:63 msgctxt "@title:label" msgid "Nozzle Settings" -msgstr "" +msgstr "喷嘴设置" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:75 msgctxt "@label" @@ -1567,25 +1428,25 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "喷嘴偏移 X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "喷嘴偏移 Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "冷却风扇数量" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" -msgstr "" +msgstr "挤出机的开始 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" -msgstr "" +msgstr "挤出机的结束 G-code" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 msgctxt "@action:button" @@ -1593,7 +1454,7 @@ msgid "Install" msgstr "安装" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "已安装" @@ -1608,16 +1469,16 @@ msgctxt "@label" msgid "ratings" msgstr "评分" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "插件" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "材料" @@ -1627,49 +1488,49 @@ msgctxt "@label" msgid "Your rating" msgstr "您的评分" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "版本" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "更新日期" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "作者" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "下载项" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "安装或更新需要登录" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" -msgstr "" +msgstr "购买材料线轴" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "更新" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "更新" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1730,17 +1591,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "退出 Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "社区贡献" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "社区插件" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "通用材料" @@ -1801,27 +1662,52 @@ msgctxt "@label" msgid "Featured" msgstr "精选" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "兼容性" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +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" +msgstr "打印平台" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "支持" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "质量" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "技术数据表" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "安全数据表" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "打印指南" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "网站" @@ -1921,70 +1807,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "由于固件丢失,导致固件升级失败。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "管理打印机" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "玻璃" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." -msgstr "这些选项不可用,因为您正在监控云打印机。" +msgid "Please update your printer's firmware to manage the queue remotely." +msgstr "请及时更新打印机固件以远程管理打印队列。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "网络摄像头不可用,因为您正在监控云打印机。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "正在加载..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "不可用" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "无法连接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "空闲" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "未命名" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "匿名" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "需要更改配置" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "详细信息" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "不可用的打印机" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "第一个可用" @@ -1994,197 +1886,180 @@ msgctxt "@label" msgid "Queued" msgstr "已排队" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" -msgstr "转到 Cura Connect" +msgid "Manage in browser" +msgstr "请于浏览器中进行管理" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "队列中无打印任务。可通过切片和发送添加任务。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "打印作业" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "总打印时间" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "等待" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "查看打印历史" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "现有连接" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "此打印机/打印机组已添加到 Cura。请选择其他打印机/打印机组。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "连接到网络打印机" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" -msgstr "" -"要通过网络向打印机发送打印请求,请确保您的打印机已通过网线或 WIFI 连接到网络。若您不能连接 Cura 与打印机,您仍然可以使用 USB 设备将 G-code 文件传输到打印机。\n" -"\n" -"从以下列表中选择您的打印机:" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." +msgstr "欲通过网络向打印机发送打印请求,请确保您的打印机已通过网线或 WIFI 连接至网络。若不能连接 Cura 与打印机,亦可通过使用 USB 设备将 G-code 文件传输到打印机。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "请从以下列表中选择您的打印机:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "编辑" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "删除" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "刷新" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "如果您的打印机未列出,请阅读网络打印故障排除指南" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "类型" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /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:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /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:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 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:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 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:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "该网络地址的打印机尚未响应。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "连接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" -msgstr "" +msgstr "IP 地址无效" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146 msgctxt "@text" msgid "Please enter a valid IP address." -msgstr "" +msgstr "请输入有效的 IP 地址。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "打印机网络地址" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." -msgstr "" +msgid "Enter the IP address of your printer on the network." +msgstr "请输入打印机在网络上的 IP 地址。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "确定" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "已中止" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "已完成" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "正在准备..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "正在中止..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "正在暂停..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "已暂停" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "正在恢复..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "需要采取行动" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "完成 %1 于 %2" @@ -2288,72 +2163,64 @@ msgctxt "@action:button" msgid "Override" msgstr "覆盖" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" msgstr[0] "分配的打印机 %1 需要以下配置更改:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "已向打印机 %1 分配作业,但作业包含未知的材料配置。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "将材料 %1 从 %2 更改为 %3。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "将 %3 作为材料 %1 进行加载(此操作无法覆盖)。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." msgstr "将 Print Core %1 从 %2 更改为 %3。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "将打印平台更改为 %1(此操作无法覆盖)。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "覆盖将使用包含现有打印机配置的指定设置。这可能会导致打印失败。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "铝" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "连接到打印机" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" "请确保您的打印机已连接:\n" "- 检查打印机是否已启动。\n" -"- 检查打印机是否连接到网络。" +"- 检查打印机是否连接至网络。\n" +"- 检查您是否已登录查找云连接的打印机。" #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 msgctxt "@info" msgid "Please connect your printer to the network." -msgstr "" +msgstr "请将打印机连接到网络。" #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:156 msgctxt "@label link to technical assistance" @@ -2475,17 +2342,17 @@ msgstr "更多关于匿名数据收集的信息" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:74 msgctxt "@text:window" msgid "Ultimaker Cura collects anonymous data in order to improve the print quality and user experience. Below is an example of all the data that is shared:" -msgstr "" +msgstr "为了改善打印质量和用户体验,Ultimaker Cura 会收集匿名数据。以下是所有数据分享的示例:" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:109 msgctxt "@text:window" msgid "I don't want to send anonymous data" -msgstr "" +msgstr "我不想发送匿名数据" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:118 msgctxt "@text:window" msgid "Allow sending anonymous data" -msgstr "" +msgstr "允许发送匿名数据" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2535,7 +2402,7 @@ msgstr "深度 (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 msgctxt "@info:tooltip" msgid "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model." -msgstr "" +msgstr "在影像浮雕中,为了阻挡更多光源通过,深色像素应对应于较厚的位置。在高度图中,浅色像素代表着更高的地形,因此浅色像素对应于生成的 3D 模型中较厚的位置。" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 msgctxt "@item:inlistbox" @@ -2660,7 +2527,7 @@ msgid "Printer Group" msgstr "打印机组" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "配置文件设置" @@ -2673,19 +2540,19 @@ msgstr "配置文件中的冲突如何解决?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 msgctxt "@action:label" msgid "Name" msgstr "名字" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 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:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2855,18 +2722,24 @@ msgid "Previous" msgstr "上一步" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "提示" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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 "打印试验" @@ -2986,155 +2859,155 @@ 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毫米,这与当前的挤出机不兼容。你想继续吗?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "显示名称" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "品牌" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "材料类型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "颜色" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "属性" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "密度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "直径" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "耗材成本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "耗材重量" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "耗材长度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "每米成本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "解绑材料" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "描述" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "粘附信息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /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:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "激活" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "创建" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "复制" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "导入" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "打印机" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "确认删除" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 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:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "导入配置" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 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:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "导出材料" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 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:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "成功导出材料至: %1" @@ -3175,388 +3048,411 @@ msgid "Unit" msgstr "单位" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "基本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "接口" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "语言:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "币种:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "主题:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "需重新启动 Cura,新的设置才能生效。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "当设置被更改时自动进行切片。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "自动切片" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "视区行为" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "显示悬垂(Overhang)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 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:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "当项目被选中时,自动对中视角" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "需要令 Cura 的默认缩放操作反转吗?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "反转视角变焦方向。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "是否跟随鼠标方向进行缩放?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +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 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "跟随鼠标方向缩放" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 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:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "确保每个模型都保持分离" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 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:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "自动下降模型到打印平台" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "在 G-code 读取器中显示警告信息。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "G-code 读取器中的警告信息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "层视图要强制进入兼容模式吗?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "强制层视图兼容模式(需要重新启动)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +msgctxt "@info:tooltip" +msgid "What type of camera rendering should be used?" +msgstr "应使用哪种类型的摄像头进行渲染?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "摄像头渲染: " + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "透视" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "正交" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "打开并保存文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 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:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "缩小过大模型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "放大过小模型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "模型是否应该在加载后被选中?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@option:check" msgid "Select models when loaded" msgstr "选择模型时加载" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 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:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "将机器前缀添加到作业名称中" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "保存项目文件时是否显示摘要?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "保存项目时显示摘要对话框" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "打开项目文件时的默认行为" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "打开项目文件时的默认行为: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "总是询问" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "始终作为一个项目打开" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "始终导入模型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 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:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /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:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "总是舍失更改的设置" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:discardOrKeep" msgid "Always transfer changed settings to new profile" msgstr "总是将更改的设置传输至新配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "隐私" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 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:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 msgctxt "@option:check" msgid "Check for updates on start" msgstr "启动时检查更新" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(匿名)发送打印信息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "详细信息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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:715 +#: /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:720 +#: /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:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "打印机" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "重命名" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419 msgctxt "@title:tab" msgid "Profiles" msgstr "配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "创建" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "复制" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "创建配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 msgctxt "@info" msgid "Please provide a name for this profile." msgstr "请为此配置文件提供名称。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "复制配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "重命名配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "导入配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "导出配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "打印机:%1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /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:413 +#: /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:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "使用当前设置 / 重写值更新配置文件" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "舍弃当前更改" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 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:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "您当前的设置与选定的配置文件相匹配。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "全局设置" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "市场" @@ -3619,33 +3515,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "搜索设置" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "将值复制到所有挤出机" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "将所有修改值复制到所有挤出机" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide 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 "Don't show this setting" msgstr "不再显示此设置" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "保持此设置可见" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "配置设定可见性..." @@ -3661,32 +3557,32 @@ msgstr "" "\n" "单击以使这些设置可见。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." -msgstr "" +msgstr "未使用此设置,因为受其影响的所有设置均已覆盖。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "影响" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "受影响项目" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 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:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "该值将会根据每一个挤出机的设置而确定 " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3697,7 +3593,7 @@ msgstr "" "\n" "单击以恢复配置文件的值。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3713,7 +3609,7 @@ msgctxt "@button" msgid "Recommended" msgstr "推荐" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "自定义" @@ -3738,12 +3634,12 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "在模型的悬垂(Overhangs)部分生成支撑结构。若不这样做,这些部分在打印时将倒塌。" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "附着" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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 "允许打印 Brim 或 Raft。这将在您的对象周围或下方添加一个容易切断的平面区域。" @@ -3761,7 +3657,7 @@ 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 "" +msgstr "此质量配置文件不适用于当前材料和喷嘴配置。请进行更改以便启用此质量配置文件。" #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449 msgctxt "@tooltip" @@ -3797,7 +3693,7 @@ 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." -msgstr "" +msgstr "打印设置已禁用。无法修改 G code 文件。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:52 msgctxt "@label" @@ -3829,59 +3725,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "发送 G-code" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "向连接的打印机发送自定义 G-code 命令。按“Enter”发送命令。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "挤出机" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "热端的目标温度。 热端将加热或冷却至此温度。 如果目标温度为 0,则热端加热将关闭。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "该热端的当前温度。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "热端的预热温度。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "取消" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "预热" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "打印前请预热热端。您可以在热端加热时继续调整打印机,而不必等待热端加热完毕再做好打印准备。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "该挤出机中材料的颜色。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "该挤出机中的材料。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "该挤出机所使用的喷嘴。" @@ -3926,11 +3822,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "收藏" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -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" @@ -3946,32 +3837,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "打印机(&P)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "材料(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "设为主要挤出机" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "启用挤出机" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "禁用挤出机" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /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:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "配置文件(&P)" @@ -3981,7 +3872,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "摄像头位置(&C)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "摄像头视图" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "透视" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "正交" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "打印平台(&B)" @@ -4001,17 +3907,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "管理设置可见性..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "保存(&S)..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "导出(&E)..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "导出选择..." @@ -4098,22 +4004,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "打开最近使用过的文件(&R)" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "正在打印" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "作业名" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "打印时间" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "预计剩余时间" @@ -4121,12 +4027,17 @@ msgstr "预计剩余时间" #: /home/ruben/Projects/Cura/resources/qml/ViewsSelector.qml:50 msgctxt "@label" msgid "View type" -msgstr "" +msgstr "查看类型" + +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "对象列表" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" -msgstr "" +msgstr "%1,您好" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:33 msgctxt "@button" @@ -4155,6 +4066,9 @@ msgid "" "- Store your Ultimaker Cura settings in the cloud for use anywhere\n" "- Get exclusive access to print profiles from leading brands" msgstr "" +"- 将打印作业发送到局域网外的 Ultimaker 打印机\n" +"- 将 Ultimaker Cura 设置存储到云以便在任何地方使用\n" +"- 获得来自领先品牌的打印配置文件的独家访问权限" #: /home/ruben/Projects/Cura/resources/qml/Account/GeneralOperations.qml:78 msgctxt "@button" @@ -4171,32 +4085,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "无可用成本估计" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "预览" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "正在切片..." -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" -msgstr "" +msgstr "无法切片" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "正在处理中" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "切片" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "开始切片流程" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "取消" @@ -4204,12 +4123,12 @@ msgstr "取消" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:31 msgctxt "@label" msgid "Time estimation" -msgstr "" +msgstr "预计时间" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:114 msgctxt "@label" msgid "Material estimation" -msgstr "" +msgstr "预计材料" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:164 msgctxt "@label m for meter" @@ -4231,230 +4150,235 @@ msgctxt "@label" msgid "Preset printers" msgstr "预设打印机" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "添加打印机" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "管理打印机" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "显示联机故障排除指南" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "切换完整界面" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "退出完整界面" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "撤销(&U)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "重做(&R)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "退出(&Q)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "3D 视图" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "正视图" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "顶视图" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "左视图" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "右视图" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "配置 Cura…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "新增打印机(&A)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "管理打印机(&I)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "管理材料…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "使用当前设置 / 重写值更新配置文件(&U)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "舍弃当前更改(&D)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "从当前设置 / 重写值创建配置文件(&C)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "管理配置文件.." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "显示在线文档(&D)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "BUG 反馈(&B)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" -msgstr "" +msgstr "新增功能" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "关于…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "删除所选模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "居中所选模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "复制所选模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "删除模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "使模型居于平台中央(&N)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "绑定模型(&G)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "拆分模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "合并模型(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "复制模型…(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "选择所有模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "清空打印平台" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "重新载入所有模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "将所有模型编位到所有打印平台" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "编位所有的模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "为所选模型编位" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "复位所有模型的位置" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "复位所有模型的变动" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "打开文件(&O)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "新建项目(&N)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "显示配置文件夹" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "市场(&M)" @@ -4469,52 +4393,52 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "这个包将在重新启动后安装。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "设置" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "关闭 Cura" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 msgctxt "@label" msgid "Are you sure you want to exit Cura?" msgstr "您确定要退出 Cura 吗?" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /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:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "安装包" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "打开文件" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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 文件。您一次只能打开一个 G-Code 文件。若需打开 G-Code 文件,请仅选择一个。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "新增打印机" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" -msgstr "" +msgstr "新增功能" #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 msgctxt "@label %1 is filled in with the name of an extruder" @@ -4735,32 +4659,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "保存项目" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /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:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "挤出机 %1" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & 材料" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" -msgstr "" +msgstr "材料" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "保存时不再显示项目摘要" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "保存" @@ -4793,158 +4717,158 @@ msgstr "导入模型" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DropDownWidget.qml:93 msgctxt "@label" msgid "Empty" -msgstr "" +msgstr "空" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:24 msgctxt "@label" msgid "Add a printer" -msgstr "" +msgstr "添加打印机" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:39 msgctxt "@label" msgid "Add a networked printer" -msgstr "" +msgstr "添加已联网打印机" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:81 msgctxt "@label" msgid "Add a non-networked printer" -msgstr "" +msgstr "添加未联网打印机" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:70 msgctxt "@label" msgid "Add printer by IP address" -msgstr "" +msgstr "按 IP 地址添加打印机" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:133 msgctxt "@text" msgid "Place enter your printer's IP address." -msgstr "" +msgstr "打印机 IP 地址输入栏。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:158 msgctxt "@button" msgid "Add" -msgstr "" +msgstr "添加" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:204 msgctxt "@label" msgid "Could not connect to device." -msgstr "" +msgstr "无法连接到设备。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:208 msgctxt "@label" msgid "The printer at this address has not responded yet." -msgstr "" +msgstr "该网络地址的打印机尚未响应。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:240 msgctxt "@label" msgid "This printer cannot be added because it's an unknown printer or it's not the host of a group." -msgstr "" +msgstr "由于是未知打印机或不是组内主机,无法添加该打印机。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:329 msgctxt "@button" msgid "Back" -msgstr "" +msgstr "返回" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:342 msgctxt "@button" msgid "Connect" -msgstr "" +msgstr "连接" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/FirstStartMachineActionsContent.qml:77 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:123 msgctxt "@button" msgid "Next" -msgstr "" +msgstr "下一步" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:23 msgctxt "@label" msgid "User Agreement" -msgstr "" +msgstr "用户协议" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:56 msgctxt "@button" msgid "Agree" -msgstr "" +msgstr "同意" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:70 msgctxt "@button" msgid "Decline and close" -msgstr "" +msgstr "拒绝并关闭" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:24 msgctxt "@label" msgid "Help us to improve Ultimaker Cura" -msgstr "" +msgstr "帮助我们改进 Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:57 msgctxt "@text" msgid "Ultimaker Cura collects anonymous data to improve print quality and user experience, including:" -msgstr "" +msgstr "为了改善打印质量和用户体验,Ultimaker Cura 会收集匿名数据,这些数据包括:" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:71 msgctxt "@text" msgid "Machine types" -msgstr "" +msgstr "机器类型" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:77 msgctxt "@text" msgid "Material usage" -msgstr "" +msgstr "材料使用" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:83 msgctxt "@text" msgid "Number of slices" -msgstr "" +msgstr "切片数量" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:89 msgctxt "@text" msgid "Print settings" -msgstr "" +msgstr "打印设置" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:102 msgctxt "@text" msgid "Data collected by Ultimaker Cura will not contain any personal information." -msgstr "" +msgstr "Ultimaker Cura 收集的数据不会包含任何个人信息。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:103 msgctxt "@text" msgid "More information" -msgstr "" +msgstr "更多信息" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WhatsNewContent.qml:24 msgctxt "@label" msgid "What's new in Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura 新增功能" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:42 msgctxt "@label" msgid "There is no printer found over your network." -msgstr "" +msgstr "未找到网络内打印机。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:179 msgctxt "@label" msgid "Refresh" -msgstr "" +msgstr "刷新" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:190 msgctxt "@label" msgid "Add printer by IP" -msgstr "" +msgstr "按 IP 添加打印机" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:223 msgctxt "@label" msgid "Troubleshooting" -msgstr "" +msgstr "故障排除" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" -msgstr "" +msgstr "打印机名称" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" -msgstr "" +msgstr "请指定打印机名称" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:36 msgctxt "@label" @@ -4954,37 +4878,37 @@ msgstr "Ultimaker Cloud" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:77 msgctxt "@text" msgid "The next generation 3D printing workflow" -msgstr "" +msgstr "下一代 3D 打印工作流程" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:94 msgctxt "@text" msgid "- Send print jobs to Ultimaker printers outside your local network" -msgstr "" +msgstr "- 将打印作业发送到局域网外的 Ultimaker 打印机" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:97 msgctxt "@text" msgid "- Store your Ultimaker Cura settings in the cloud for use anywhere" -msgstr "" +msgstr "- 将 Ultimaker Cura 设置存储到云以便在任何地方使用" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:100 msgctxt "@text" msgid "- Get exclusive access to print profiles from leading brands" -msgstr "" +msgstr "- 获得来自领先品牌的打印配置文件的独家访问权限" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:119 msgctxt "@button" msgid "Finish" -msgstr "" +msgstr "完成" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:128 msgctxt "@button" msgid "Create an account" -msgstr "" +msgstr "创建帐户" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:29 msgctxt "@label" msgid "Welcome to Ultimaker Cura" -msgstr "" +msgstr "欢迎使用 Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:47 msgctxt "@text" @@ -4992,26 +4916,13 @@ msgid "" "Please follow these steps to set up\n" "Ultimaker Cura. This will only take a few moments." msgstr "" +"请按照以下步骤设置\n" +"Ultimaker Cura。此操作只需要几分钟时间。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:58 msgctxt "@button" msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "只能看到当前的打印平台" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "编位到所有打印平台" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "编位当前打印平台" +msgstr "开始" #: MachineSettingsAction/plugin.json msgctxt "description" @@ -5096,12 +5007,22 @@ msgstr "固件更新程序" #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattened quality changes profile." -msgstr "" +msgstr "创建一份合并质量变化配置文件。" #: ProfileFlattener/plugin.json msgctxt "name" msgid "Profile Flattener" -msgstr "" +msgstr "配置文件合并器" + +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "提供对读取 AMF 文件的支持。" + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "AMF 读取器" #: USBPrinting/plugin.json msgctxt "description" @@ -5113,16 +5034,6 @@ msgctxt "name" msgid "USB printing" msgstr "USB 联机打印" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "允许将产生的切片保存为X3G文件,以支持读取此格式的打印机(Malyan、Makerbot和其他基于sailfish打印机的打印机)。" - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "X3G写" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5165,23 +5076,13 @@ msgstr "可移动磁盘输出设备插件" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." -msgstr "管理与最后的3个打印机的网络连接。" +msgid "Manages network connections to Ultimaker networked printers." +msgstr "管理与 Ultimaker 网络打印机的网络连接。" #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "UM3 网络连接" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" -msgstr "" +msgid "Ultimaker Network Connection" +msgstr "Ultimaker 网络连接" #: MonitorStage/plugin.json msgctxt "description" @@ -5246,12 +5147,12 @@ msgstr "支持橡皮擦" #: UFPReader/plugin.json msgctxt "description" msgid "Provides support for reading Ultimaker Format Packages." -msgstr "" +msgstr "支持读取 Ultimaker 格式包。" #: UFPReader/plugin.json msgctxt "name" msgid "UFP Reader" -msgstr "" +msgstr "UFP 读取器" #: SliceInfoPlugin/plugin.json msgctxt "description" @@ -5336,12 +5237,12 @@ msgstr "版本自 2.7 升级到 3.0" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.5 to Cura 4.0." -msgstr "" +msgstr "将配置从 Cura 3.5 版本升级至 4.0 版本。" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "name" msgid "Version Upgrade 3.5 to 4.0" -msgstr "" +msgstr "版本自 3.5 升级到 4.0" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" @@ -5356,12 +5257,12 @@ msgstr "版本自 3.4 升级到 3.5" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 4.0 to Cura 4.1." -msgstr "" +msgstr "将配置从 Cura 4.0 版本升级至 4.1 版本。" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "name" msgid "Version Upgrade 4.0 to 4.1" -msgstr "" +msgstr "版本自 4.0 升级到 4.1" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" @@ -5373,6 +5274,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "版本自 3.0 升级到 3.1" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "请将配置从 Cura 4.1 升级至 Cura 4.2。" + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "版本自 4.1 升级到 4.2" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5403,6 +5314,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "版本自 2.2 升级到 2.4" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "请将配置从 Cura 4.2 升级至 Cura 4.3。" + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "版本自 4.2 升级至 4.3" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5413,6 +5334,16 @@ msgctxt "name" msgid "Image Reader" msgstr "图像读取器" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "提供对读取模型文件的支持。" + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "Trimesh 阅读器" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5443,16 +5374,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "3MF 读取器" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5476,12 +5397,12 @@ msgstr "G-code 读取器" #: CuraDrive/plugin.json msgctxt "description" msgid "Backup and restore your configuration." -msgstr "" +msgstr "备份和还原配置。" #: CuraDrive/plugin.json msgctxt "name" msgid "Cura Backups" -msgstr "" +msgstr "Cura 备份" #: CuraProfileWriter/plugin.json msgctxt "description" @@ -5516,12 +5437,12 @@ msgstr "3MF 写入器" #: PreviewStage/plugin.json msgctxt "description" msgid "Provides a preview stage in Cura." -msgstr "" +msgstr "在 Cura 中提供预览阶段。" #: PreviewStage/plugin.json msgctxt "name" msgid "Preview Stage" -msgstr "" +msgstr "预览阶段" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -5543,6 +5464,297 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura 配置文件读取器" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "已通过网络连接。" + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "已通过网络连接。请在打印机上接受访问请求。" + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "已通过网络连接,但没有打印机的控制权限。" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "已发送打印机访问请求,请在打印机上批准该请求" + +#~ msgctxt "@info:title" +#~ msgid "Authentication status" +#~ msgstr "身份验证状态" + +#~ msgctxt "@info:title" +#~ msgid "Authentication Status" +#~ msgstr "身份验证状态" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "重新发送访问请求" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "打印机接受了访问请求" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "无法使用本打印机进行打印,无法发送打印作业。" + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "请求访问" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "向打印机发送访问请求" + +#~ msgctxt "@label" +#~ msgid "Unable to start a new print job." +#~ msgstr "无法启动新的打印作业。" + +#~ msgctxt "@label" +#~ msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." +#~ msgstr "Ultimaker 配置存在问题,导致无法开始打印。请解决此问题,然后再继续。" + +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "配置不匹配" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "您确定要使用所选配置进行打印吗?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "打印机的配置或校准与 Cura 之间不匹配。为了获得最佳打印效果,请务必切换打印头和打印机中插入的材料。" + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "发送新作业(暂时)受阻,仍在发送前一份打印作业。" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "向打印机发送数据" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "正在发送数据" + +#~ msgctxt "@info:status" +#~ msgid "No Printcore loaded in slot {slot_number}" +#~ msgstr "插槽 {slot_number} 中未加载 Printcore" + +#~ msgctxt "@info:status" +#~ msgid "No material loaded in slot {slot_number}" +#~ msgstr "插槽 {slot_number} 中未加载材料" + +#~ msgctxt "@label" +#~ msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" +#~ msgstr "为挤出机 {extruder_id} 选择了不同的 PrintCore(Cura: {cura_printcore_name},打印机:{remote_printcore_name})" + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "您为挤出机 {2} 选择了不同的材料(Cura:{0},打印机:{1})" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "与您的打印机同步" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "您想在 Cura 中使用当前的打印机配置吗?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "打印机上的打印头和/或材料与当前项目中的不同。 为获得最佳打印效果,请始终使用已插入打印机的打印头和材料进行切片。" + +#~ msgctxt "@action:button" +#~ msgid "View in Monitor" +#~ msgstr "在监控器中查看" + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "打印机 '{printer_name}' 完成了打印任务 '{job_name}'。" + +#~ msgctxt "@info:status" +#~ msgid "The print job '{job_name}' was finished." +#~ msgstr "打印作业 '{job_name}' 已完成。" + +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "打印完成" + +#~ msgctxt "@label:material" +#~ msgid "Empty" +#~ msgstr "空" + +#~ msgctxt "@label:material" +#~ msgid "Unknown" +#~ msgstr "未知" + +#~ msgctxt "@info:title" +#~ msgid "Cloud error" +#~ msgstr "云错误" + +#~ msgctxt "@info:status" +#~ msgid "Could not export print job." +#~ msgstr "无法导出打印作业。" + +#~ msgctxt "@info:description" +#~ msgid "There was an error connecting to the cloud." +#~ msgstr "连接到云时出错。" + +#~ msgctxt "@info:status" +#~ msgid "Uploading via Ultimaker Cloud" +#~ msgstr "通过 Ultimaker Cloud 上传" + +#~ msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." +#~ msgid "Connect to Ultimaker Cloud" +#~ msgstr "连接到 Ultimaker Cloud" + +#~ msgctxt "@action" +#~ msgid "Don't ask me again for this printer." +#~ msgstr "对此打印机不再询问。" + +#~ msgctxt "@info:status" +#~ msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." +#~ msgstr "您现在可以使用您的 Ultimaker account 帐户从任何地方发送和监控打印作业。" + +#~ msgctxt "@info:status" +#~ msgid "Connected!" +#~ msgstr "已连接!" + +#~ msgctxt "@action" +#~ msgid "Review your connection" +#~ msgstr "查看您的连接" + +#~ msgctxt "@info:status Don't translate the XML tags !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "配置文件 {0} ({1}) 中定义的机器与当前机器 ({2}) 不匹配,无法导入。" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "Failed to import profile from {0}:" +#~ msgstr "无法从 {0} 导入配置文件:" + +#~ msgctxt "@window:title" +#~ msgid "Existing Connection" +#~ msgstr "现有连接" + +#~ msgctxt "@message:text" +#~ msgid "This printer/group is already added to Cura. Please select another printer/group." +#~ msgstr "此打印机/打印机组已添加到 Cura。请选择其他打印机/打印机组。" + +#~ msgctxt "@label" +#~ msgid "Enter the IP address or hostname of your printer on the network." +#~ msgstr "输入打印机在网络上的 IP 地址或主机名。" + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "连接到打印机" + +#~ msgctxt "@title" +#~ msgid "Cura Settings Guide" +#~ msgstr "Cura 设置向导" + +#~ msgctxt "@info:tooltip" +#~ msgid "Zooming towards the mouse is not supported in the orthogonal perspective." +#~ msgstr "正交透视中不支持通过鼠标缩放。" + +#~ msgid "Orthogonal" +#~ msgstr "正交" + +#~ msgctxt "description" +#~ msgid "Manages network connections to Ultimaker 3 printers." +#~ msgstr "管理与最后的3个打印机的网络连接。" + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "UM3 网络连接" + +#~ msgctxt "description" +#~ msgid "Provides extra information and explanations about settings in Cura, with images and animations." +#~ msgstr "提供关于 Cura 设置的额外信息和说明,并附上图片及动画。" + +#~ msgctxt "name" +#~ msgid "Settings Guide" +#~ msgstr "设置向导" + +#~ msgctxt "@item:inmenu" +#~ msgid "Cura Settings Guide" +#~ msgstr "Cura 设置向导" + +#~ msgctxt "@info:generic" +#~ msgid "Settings have been changed to match the current availability of extruders: [%s]" +#~ msgstr "已根据挤出机的当前可用性更改设置:[%s]" + +#~ msgctxt "@title:groupbox" +#~ msgid "User description" +#~ msgstr "用户说明" + +#~ msgctxt "@info" +#~ msgid "These options are not available because you are monitoring a cloud printer." +#~ msgstr "这些选项不可用,因为您正在监控云打印机。" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Go to Cura Connect" +#~ msgstr "转到 Cura Connect" + +#~ msgctxt "@info" +#~ msgid "All jobs are printed." +#~ msgstr "已完成所有打印工作。" + +#~ msgctxt "@label link to connect manager" +#~ msgid "View print history" +#~ msgstr "查看打印历史" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "要通过网络向打印机发送打印请求,请确保您的打印机已通过网线或 WIFI 连接到网络。若您不能连接 Cura 与打印机,您仍然可以使用 USB 设备将 G-code 文件传输到打印机。\n" +#~ "\n" +#~ "从以下列表中选择您的打印机:" + +#~ msgctxt "@info" +#~ msgid "" +#~ "Please make sure your printer has a connection:\n" +#~ "- Check if the printer is turned on.\n" +#~ "- Check if the printer is connected to the network." +#~ msgstr "" +#~ "请确保您的打印机已连接:\n" +#~ "- 检查打印机是否已启动。\n" +#~ "- 检查打印机是否连接到网络。" + +#~ msgctxt "@option:check" +#~ msgid "See only current build plate" +#~ msgstr "只能看到当前的打印平台" + +#~ msgctxt "@action:button" +#~ msgid "Arrange to all build plates" +#~ msgstr "编位到所有打印平台" + +#~ msgctxt "@action:button" +#~ msgid "Arrange current build plate" +#~ msgstr "编位当前打印平台" + +#~ msgctxt "description" +#~ msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." +#~ msgstr "允许将产生的切片保存为X3G文件,以支持读取此格式的打印机(Malyan、Makerbot和其他基于sailfish打印机的打印机)。" + +#~ msgctxt "name" +#~ msgid "X3GWriter" +#~ msgstr "X3G写" + +#~ msgctxt "description" +#~ msgid "Reads SVG files as toolpaths, for debugging printer movements." +#~ msgstr "读取 SVG 文件的刀具路径,调试打印机活动。" + +#~ msgctxt "name" +#~ msgid "SVG Toolpath Reader" +#~ msgstr "SVG 刀具路径读取器" + #~ msgctxt "@item:inmenu" #~ msgid "Changelog" #~ msgstr "更新日志" diff --git a/resources/i18n/zh_CN/fdmextruder.def.json.po b/resources/i18n/zh_CN/fdmextruder.def.json.po index 62bda7bf06..3d45d6c7fd 100644 --- a/resources/i18n/zh_CN/fdmextruder.def.json.po +++ b/resources/i18n/zh_CN/fdmextruder.def.json.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" "PO-Revision-Date: 2019-03-13 14:00+0200\n" "Last-Translator: Bothof \n" "Language-Team: PCDotFan , Bothof \n" diff --git a/resources/i18n/zh_CN/fdmprinter.def.json.po b/resources/i18n/zh_CN/fdmprinter.def.json.po index aedd83b005..be85226206 100644 --- a/resources/i18n/zh_CN/fdmprinter.def.json.po +++ b/resources/i18n/zh_CN/fdmprinter.def.json.po @@ -5,17 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" -"PO-Revision-Date: 2019-03-13 14:00+0200\n" -"Last-Translator: Bothof \n" -"Language-Team: PCDotFan , Bothof \n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" +"PO-Revision-Date: 2019-09-23 14:18+0200\n" +"Last-Translator: Lionbridge \n" +"Language-Team: Chinese , PCDotFan , Chinese \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.6\n" +"X-Generator: Poedit 2.2.1\n" "Plural-Forms: nplurals=1; plural=0;\n" #: fdmprinter.def.json @@ -216,6 +216,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "机器是否有加热打印平台。" +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "具有构建体积温度稳定性" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "机器是否能够稳定构建体积温度。" + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -239,7 +249,7 @@ msgstr "挤出机组数目。 挤出机组是指进料装置、鲍登管和喷 #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders That Are Enabled" -msgstr "" +msgstr "已启用的挤出机数目" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -249,7 +259,7 @@ msgstr "已启用的挤出机组数目;软件自动设置" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer Nozzle Diameter" -msgstr "" +msgstr "喷嘴外径" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter description" @@ -259,7 +269,7 @@ msgstr "喷嘴尖端的外径。" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle Length" -msgstr "" +msgstr "喷嘴长度" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance description" @@ -269,7 +279,7 @@ msgstr "喷嘴尖端与打印头最低部分之间的高度差。" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle Angle" -msgstr "" +msgstr "喷嘴角度" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle description" @@ -279,7 +289,7 @@ msgstr "水平面与喷嘴尖端上部圆锥形之间的角度。" #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat Zone Length" -msgstr "" +msgstr "加热区长度" #: fdmprinter.def.json msgctxt "machine_heat_zone_length description" @@ -309,7 +319,7 @@ msgstr "是否从 Cura 控制温度。 关闭此选项,从 Cura 外部控制 #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat Up Speed" -msgstr "" +msgstr "升温速度" #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed description" @@ -319,7 +329,7 @@ msgstr "喷嘴升温到平均超过正常打印温度和待机温度范围的速 #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool Down Speed" -msgstr "" +msgstr "冷却速度" #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed description" @@ -338,8 +348,8 @@ msgstr "挤出机必须保持不活动以便喷嘴冷却的最短时间。 挤 #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" -msgstr "" +msgid "G-code Flavor" +msgstr "G-code 风格" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" @@ -404,7 +414,7 @@ msgstr "是否使用固件收回命令 (G10/G11) 而不是使用 G1 命令中的 #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed Areas" -msgstr "" +msgstr "不允许区域" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" @@ -424,7 +434,7 @@ msgstr "包含不允许喷嘴进入区域的多边形列表。" #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine Head Polygon" -msgstr "" +msgstr "机器头多边形" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -434,7 +444,7 @@ msgstr "打印头 2D 轮廓图(不包含风扇盖)。" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine Head & Fan Polygon" -msgstr "" +msgstr "机器头和风扇多边形" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -444,7 +454,7 @@ msgstr "打印头 2D 轮廓图(包含风扇盖)。" #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry Height" -msgstr "" +msgstr "十字轴高度" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -474,7 +484,7 @@ msgstr "喷嘴内径,在使用非标准喷嘴尺寸时需更改此设置。" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset with Extruder" -msgstr "" +msgstr "挤出机偏移量" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -1271,6 +1281,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "最尖角" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "Z 缝位置" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "在该位置附近开始打印层中各个部分。" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "左后方" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "返回" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "右后方" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "右侧" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "右前方" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "前方" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "左前方" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "左侧" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1298,8 +1358,8 @@ msgstr "缝隙角偏好设置" #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "控制模型轮廓上的各个角是否影响缝隙的位置。 “无”意味着各个角不影响缝隙位置。 “隐藏缝隙”会使缝隙更可能出现在内侧角上。 “外露缝隙”会使缝隙更可能出现在外侧角上。 “隐藏或外露缝隙”会使缝隙更可能出现在内侧或外侧角上。" +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "控制模型轮廓上的角是否影响缝隙的位置。“无”表示各个角不影响缝隙位置。“隐藏缝隙”会使缝隙更可能出现在内侧角上。“外露缝隙”会使缝隙更可能出现在外侧角上。“隐藏或外露缝隙”会使缝隙更可能出现在内侧或外侧角上。“智能隐藏”允许缝隙出现在内侧和外侧角上,如适当,会更多地出现在内侧角上。" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1321,6 +1381,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "隐藏或外露缝隙" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "智能隐藏" + #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" @@ -1333,13 +1398,13 @@ msgstr "启用时,Z 缝坐标为相对于各个部分中心的值。 禁用时 #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "忽略小 Z 间隙" +msgid "No Skin in Z Gaps" +msgstr "Z 间隙内无表层" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "当模型具有小的垂直间隙时,可能会花费大约 5% 的额外计算时间来生成这些狭窄空间中的顶部和底部皮肤。 这种情况下,禁用该设置。" +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "当模型中只有几个分层有微小垂直间隙时,通常狭窄空间的分层周围应有表层。如果垂直间隙非常小,则启用此设置不生成表层。这缩短了打印时间和切片时间,但从技术方面看,会使填充物暴露在空气中。" #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1358,8 +1423,8 @@ msgstr "启用熨平" #: fdmprinter.def.json 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 "再一次经过顶部表面,但不挤出材料。 这是为了进一步融化顶部的塑料,打造更平滑的表面。" +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 "再次经过顶部表面,但这次挤出的材料非常少。这意味着将进一步熔化顶部的塑料,形成更平滑的表面。喷嘴室中的压力保持很高,确保表面折痕中也能填充材料,以保证细节。" #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1451,6 +1516,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "执行熨平时的最大瞬时速度变化。" +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "皮肤重叠百分比" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "调整壁和皮肤中心线的(端点)之间的重叠量,以皮肤线走线和最内壁的线宽度的百分比表示。稍微重叠可让各个壁与皮肤牢固连接。请注意,对于相等的皮肤和壁线宽度,任何超过 50% 的百分比可能已经导致任何皮肤越过壁,因为在该点,皮肤挤出机的喷嘴位置可能已经达到越过壁中间的位置。" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "皮肤重叠" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "调整壁和皮肤中心线的(端点)之间的重叠量。稍微重叠可让各个壁与皮肤牢固连接。请注意,对于相等的皮肤和壁线宽度,任何超过壁宽度一半的值可能已经导致任何皮肤越过壁,因为在该点,皮肤挤出机的喷嘴位置可能已经达到越过壁中间的位置。" + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1616,6 +1701,16 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "填充图案沿 Y 轴移动此距离。" +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +msgstr "开始随机化填充" + +#: 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 "先随机化打印哪条填充线。这可以防止一个部分变强,但会导致一次额外的空驶。" + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1670,26 +1765,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "填充物和壁之间的重叠量。 稍微重叠可让各个壁与填充物牢固连接。" -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "皮肤重叠百分比" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "调整壁和皮肤中心线的(端点)之间的重叠量,以皮肤线走线和最内壁的线宽度的百分比表示。稍微重叠可让各个壁与皮肤牢固连接。请注意,对于相等的皮肤和壁线宽度,任何超过 50% 的百分比可能已经导致任何皮肤越过壁,因为在该点,皮肤挤出机的喷嘴位置可能已经达到越过壁中间的位置。" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "皮肤重叠" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "调整壁和皮肤中心线的(端点)之间的重叠量。稍微重叠可让各个壁与皮肤牢固连接。请注意,对于相等的皮肤和壁线宽度,任何超过壁宽度一半的值可能已经导致任何皮肤越过壁,因为在该点,皮肤挤出机的喷嘴位置可能已经达到越过壁中间的位置。" - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1873,12 +1948,12 @@ msgstr "用于打印的默认温度。 应为材料的\"基本\"温度。 所有 #: fdmprinter.def.json msgctxt "build_volume_temperature label" msgid "Build Volume Temperature" -msgstr "" +msgstr "打印体积温度" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." -msgstr "" +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." +msgstr "打印环境温度。若为 0,将不会调整构建体积温度。" #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1990,6 +2065,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "百分比收缩率。" +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "晶体材料" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "该材料为受热后脱落干净的类型(晶体),还是会产生长交织状聚合物链的类型(非晶体)?" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "防渗出回抽位置" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "材料在停止渗出前所需的回抽长度。" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "防渗出回抽速度" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "在耗材用于防渗出过程中材料所需的回抽速率。" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "断裂缓冲期回抽位置" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "耗材受热拉伸但不断裂的极限长度。" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "断裂缓冲期回抽速度" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "耗材在回抽过程中恰好折断的回抽速率。" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "断裂回抽位置" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "为完全脱落耗材而抽回耗材的长度。" + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "断裂回抽速度" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "为完全脱落耗材而抽回耗材的速度。" + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "折断温度" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "耗材在完全脱落时的温度。" + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -2000,6 +2155,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "流量补偿:挤出的材料量乘以此值。" +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "壁流量" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "壁走线的流量补偿。" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "外壁流量" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "最外壁走线的流量补偿。" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "内壁流量" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "适用于所有壁走线(最外壁走线除外)的流量补偿。" + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "顶部/底部流量" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "顶部/底部走线的流量补偿。" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "顶部表层流量" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "打印顶部区域走线的流量补偿。" + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "填充流量" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "填充走线的流量补偿。" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "裙边/边缘流量" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "裙边或边缘走线的流量补偿。" + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "支撑流量" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "支撑结构走线的流量补偿。" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "支撑接触面流量" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "支撑顶板或底板走线的流量补偿。" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "支撑顶板流量" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "支撑顶板走线的流量补偿。" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "支撑底板流量" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "支撑底板走线的流量补偿。" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "装填塔流量" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "装填塔走线的流量补偿。" + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2117,8 +2392,8 @@ msgstr "支撑限制被撤销" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." -msgstr "当从支撑移动到支撑直线时,省略撤回。启用这个设置可以节省打印时间,但是可以在支撑结构中产生出色的字符串。" +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." +msgstr "当在各个支撑间直线移动时,省略回抽。启用这个设置可以节省打印时间,但会在支撑结构中产生过多穿线。" #: fdmprinter.def.json msgctxt "material_standby_temperature label" @@ -2170,6 +2445,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "喷嘴切换回抽后耗材被推回的速度。" +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "喷嘴切换额外装填量" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "喷嘴切换后的额外装填材料。" + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2361,14 +2646,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "打印 skirt 和 brim 的速度。 一般情况是以起始层速度打印这些部分,但有时候您可能想要以不同速度来打印 skirt 或 brim。" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "最大 Z 速度" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "Z 抬升速度" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "打印平台移动的最大速度。 将该值设为零会使打印为最大 Z 速度采用固件默认值。" +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "Z 垂直移动实现抬升的速度。一般小于打印速度,因为打印平台或打印机的十字轴较难移动。" #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2870,16 +3155,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "喷嘴和已打印部分之间在空驶时避让的距离。" -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "开始具有相同部分的层" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "每一层都在相同点附近开始打印模型,这样我们就不用在开始新层时打印上一层结束的部分。 这会打印出更好的悬垂和较小的部分,但会增加打印时间。" - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -2943,12 +3218,12 @@ msgstr "当机器从一个挤出机切换到另一个时,打印平台会降低 #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height label" msgid "Z Hop After Extruder Switch Height" -msgstr "" +msgstr "挤出机切换后的 Z 抬升高度" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height description" msgid "The height difference when performing a Z Hop after extruder switch." -msgstr "" +msgstr "挤出机切换后执行 Z 抬升的高度差。" #: fdmprinter.def.json msgctxt "cooling label" @@ -3223,7 +3498,7 @@ msgstr "交叉" #: fdmprinter.def.json msgctxt "support_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "螺旋二十四面体" #: fdmprinter.def.json msgctxt "support_wall_count label" @@ -3286,14 +3561,14 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "已打印起始层支撑结构走线之间的距离。该设置通过支撑密度计算。" #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "支撑填充走线方向" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." -msgstr "用于支撑的填充图案的方向。支撑填充图案在水平面中旋转。" +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 "要使用的整数走线方向列表。列表中的元素随层的进度依次使用,当达到列表末尾时将从头开始。列表项以逗号分隔,整个列表包含在方括号中。“默认“是一个空列表,即意味着使用默认角度 0 度。" #: fdmprinter.def.json msgctxt "support_brim_enable label" @@ -3422,8 +3697,8 @@ msgstr "支撑结合部距离" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." -msgstr "支撑结构间在 X/Y 方向的最大距离。 当分离结构之间的距离小于此值时,这些结构将合并为一个。" +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." +msgstr "支撑结构间在 X/Y 方向的最大距离。当分离结构之间的距离小于此值时,这些结构将合并为一体。" #: fdmprinter.def.json msgctxt "support_offset label" @@ -3760,6 +4035,36 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "应用到支撑底板的偏移量。" +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +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 "要使用的整数走线方向列表。列表中的元素随层的进度依次使用,当达到列表末尾时将从头开始。列表项以逗号分隔,整个列表包含在方括号中。“默认“为一个空列表,即意味着使用默认角度(如果接触面很厚或为 90 度,则在 45 度和 135 度之间交替)。" + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +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 "要使用的整数走线方向列表。列表中的元素随层的进度依次使用,当达到列表末尾时将从头开始。列表项以逗号分隔,整个列表包含在方括号中。“默认“为一个空列表,即意味着使用默认角度(如果接触面很厚或为 90 度,则在 45 度和 135 度之间交替)。" + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +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 "要使用的整数走线方向列表。列表中的元素随层的进度依次使用,当达到列表末尾时将从头开始。列表项以逗号分隔,整个列表包含在方括号中。“默认“为一个空列表,即意味着使用默认角度(如果接触面很厚或为 90 度,则在 45 度和 135 度之间交替)。" + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3801,14 +4106,14 @@ msgid "The diameter of a special tower." msgstr "特殊塔的直径。" #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "最小直径" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "最大塔支撑直径" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." -msgstr "将由专门的支撑塔支撑的小区域 X/Y 轴方向的最小直径。" +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "将由专门的支撑塔支撑的小区域 X/Y 轴方向的最大直径。" #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" @@ -3931,7 +4236,7 @@ msgid "" "The horizontal distance between the skirt and the first layer of the print.\n" "This is the minimum distance. Multiple skirt lines will extend outwards from this distance." msgstr "" -"skirt 和打印第一层之间的水平距离。\n" +"skirt 和打印第一层之间的水平距离。\n" "这是最小距离。多个 skirt 走线将从此距离向外延伸。" #: fdmprinter.def.json @@ -4304,16 +4609,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "在打印品相邻处打印一个塔,用于在每个喷嘴切换后装填材料。" -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "圆形装填塔" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "使装填塔成圆形。" - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4354,16 +4649,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "装填塔位置的 y 坐标。" -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "装填塔流量" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "流量补偿:挤出的材料量乘以此值。" - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4377,12 +4662,12 @@ msgstr "在用一个喷嘴打印装填塔后,从装填塔上的另一个喷嘴 #: fdmprinter.def.json msgctxt "prime_tower_brim_enable label" msgid "Prime Tower Brim" -msgstr "" +msgstr "装填塔 Brim" #: fdmprinter.def.json msgctxt "prime_tower_brim_enable description" msgid "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type." -msgstr "" +msgstr "装填塔可能需要 Brim 提供额外附着力,无论模型是否需要。目前不可与 'Raft' 附着类型配合使用。" #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4666,8 +4951,8 @@ msgstr "平滑螺旋轮廓" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." -msgstr "平滑螺旋轮廓以减少 Z 缝的可见性(Z 缝应在打印品上几乎看不到,但在层视图中仍然可见)。 请注意,平滑操作将倾向于模糊精细的表面细节。" +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgstr "平滑螺旋轮廓以减少 Z 缝的可见性(Z 缝于打印品上几乎不可见,但在层视图中仍然可见)。注意:平滑操作将模糊精细的表面细节。" #: fdmprinter.def.json msgctxt "relative_extrusion label" @@ -4902,12 +5187,12 @@ msgstr "切片后的旅行线路段的最小尺寸。如果你增加了这个, #: fdmprinter.def.json msgctxt "meshfix_maximum_deviation label" msgid "Maximum Deviation" -msgstr "" +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." -msgstr "" +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 将减小。“最大偏移量”是“最大分辨率”的限制,因此如果两者冲突,则“最大偏移量”将始终保持有效。" #: fdmprinter.def.json msgctxt "support_skip_some_zags label" @@ -5166,8 +5451,8 @@ msgstr "启用锥形支撑" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "实验性功能: 让底部的支撑区域小于悬垂处的支撑区域。" +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "使底部的支撑区域小于悬垂处的支撑区域。" #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5511,7 +5796,7 @@ msgstr "喷嘴和水平下行线之间的距离。 较大的间隙会让斜下 #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled label" msgid "Use Adaptive Layers" -msgstr "" +msgstr "使用自适应图层" #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled description" @@ -5521,7 +5806,7 @@ msgstr "自适应图层根据模型形状计算图层高度。" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation label" msgid "Adaptive Layers Maximum Variation" -msgstr "" +msgstr "自适应图层最大变化" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" @@ -5531,7 +5816,7 @@ msgstr "最大允许高度与基层高度不同。" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" msgid "Adaptive Layers Variation Step Size" -msgstr "" +msgstr "自适应图层变化步长" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step description" @@ -5541,7 +5826,7 @@ msgstr "下一层与前一层的高度差。" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold label" msgid "Adaptive Layers Threshold" -msgstr "" +msgstr "自适应图层阈值" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" @@ -5761,152 +6046,192 @@ msgstr "打印桥梁第三层表面时使用的风扇百分比速度。" #: fdmprinter.def.json msgctxt "clean_between_layers label" msgid "Wipe Nozzle Between Layers" -msgstr "" +msgstr "图层切换后擦拭喷嘴" #: fdmprinter.def.json msgctxt "clean_between_layers description" msgid "Whether to include nozzle wipe G-Code between layers. Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working." -msgstr "" +msgstr "是否包括图层切换后擦拭喷嘴的 G-Code。启用此设置可能会影响图层变化时的回抽。请使用“擦拭回抽”设置来控制擦拭脚本将在其中工作的图层回抽。" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe label" msgid "Material Volume Between Wipes" -msgstr "" +msgstr "擦拭之间的材料量" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe description" msgid "Maximum material, that can be extruded before another nozzle wipe is initiated." -msgstr "" +msgstr "开始下一轮喷嘴擦拭前,可挤出的最大材料量。" #: fdmprinter.def.json msgctxt "wipe_retraction_enable label" msgid "Wipe Retraction Enable" -msgstr "" +msgstr "启用擦拭回抽" #: fdmprinter.def.json msgctxt "wipe_retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area." -msgstr "" +msgstr "当喷嘴移动到非打印区域上方时回抽耗材。" #: fdmprinter.def.json msgctxt "wipe_retraction_amount label" msgid "Wipe Retraction Distance" -msgstr "" +msgstr "擦拭回抽距离" #: fdmprinter.def.json msgctxt "wipe_retraction_amount description" msgid "Amount to retract the filament so it does not ooze during the wipe sequence." -msgstr "" +msgstr "耗材回抽量,可避免耗材在擦拭期间渗出。" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount label" msgid "Wipe Retraction Extra Prime Amount" -msgstr "" +msgstr "擦拭回抽额外装填量" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount description" msgid "Some material can ooze away during a wipe travel moves, which can be compensated for here." -msgstr "" +msgstr "有些材料可能会在擦拭空驶过程中渗出,可以在这里进行补偿。" #: fdmprinter.def.json msgctxt "wipe_retraction_speed label" msgid "Wipe Retraction Speed" -msgstr "" +msgstr "擦拭回抽速度" #: fdmprinter.def.json msgctxt "wipe_retraction_speed description" msgid "The speed at which the filament is retracted and primed during a wipe retraction move." -msgstr "" +msgstr "擦拭回抽移动期间耗材回抽和装填的速度。" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed label" msgid "Wipe Retraction Retract Speed" -msgstr "" +msgstr "擦拭回抽期间的回抽速度" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed description" msgid "The speed at which the filament is retracted during a wipe retraction move." -msgstr "" +msgstr "擦拭回抽移动期间耗材回抽的速度。" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "回抽装填速度" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed description" msgid "The speed at which the filament is primed during a wipe retraction move." -msgstr "" +msgstr "擦拭回抽移动期间耗材装填的速度。" #: fdmprinter.def.json msgctxt "wipe_pause label" msgid "Wipe Pause" -msgstr "" +msgstr "擦拭暂停" #: fdmprinter.def.json msgctxt "wipe_pause description" msgid "Pause after the unretract." -msgstr "" +msgstr "在未回抽后暂停。" #: fdmprinter.def.json msgctxt "wipe_hop_enable label" msgid "Wipe Z Hop When Retracted" -msgstr "" +msgstr "回抽后擦拭 Z 抬升" #: fdmprinter.def.json msgctxt "wipe_hop_enable description" msgid "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." -msgstr "" +msgstr "回抽完成时,打印平台会下降以便在喷嘴和打印品之间形成空隙。进而防止喷嘴在空驶过程中撞到打印品,降低打印品滑出打印平台的几率。" #: fdmprinter.def.json msgctxt "wipe_hop_amount label" msgid "Wipe Z Hop Height" -msgstr "" +msgstr "擦拭 Z 抬升高度" #: fdmprinter.def.json msgctxt "wipe_hop_amount description" msgid "The height difference when performing a Z Hop." -msgstr "" +msgstr "执行 Z 抬升的高度差。" #: fdmprinter.def.json msgctxt "wipe_hop_speed label" msgid "Wipe Hop Speed" -msgstr "" +msgstr "擦拭抬升速度" #: fdmprinter.def.json msgctxt "wipe_hop_speed description" msgid "Speed to move the z-axis during the hop." -msgstr "" +msgstr "抬升期间移动 Z 轴的速度。" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x label" msgid "Wipe Brush X Position" -msgstr "" +msgstr "擦拭刷 X 轴坐标" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x description" msgid "X location where wipe script will start." -msgstr "" +msgstr "擦拭开始处的 X 轴坐标。" #: fdmprinter.def.json msgctxt "wipe_repeat_count label" msgid "Wipe Repeat Count" -msgstr "" +msgstr "擦拭重复计数" #: fdmprinter.def.json msgctxt "wipe_repeat_count description" msgid "Number of times to move the nozzle across the brush." -msgstr "" +msgstr "在擦拭刷上移动喷嘴的次数。" #: fdmprinter.def.json msgctxt "wipe_move_distance label" msgid "Wipe Move Distance" -msgstr "" +msgstr "擦拭移动距离" #: fdmprinter.def.json msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." -msgstr "" +msgstr "在擦拭刷上来回移动喷嘴头的距离。" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "小孔最大尺寸" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "将使用微小特征速度打印直径小于此尺寸的孔和零件轮廓。" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "微小特征最大长度" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "将使用微小特征速度打印小于此长度的特征轮廓。" + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +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 "微小特征将按正常打印速度的百分比进行打印。缓慢打印有助于粘合和提高准确性。" + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor_0 label" +msgid "First 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 "第一层的微小特征将按正常打印速度的百分比进行打印。缓慢打印有助于粘合和提高准确性。" #: fdmprinter.def.json msgctxt "command_line_settings label" @@ -5968,6 +6293,90 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." 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 "再一次经过顶部表面,但不挤出材料。 这是为了进一步融化顶部的塑料,打造更平滑的表面。" + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "开始具有相同部分的层" + +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "每一层都在相同点附近开始打印模型,这样我们就不用在开始新层时打印上一层结束的部分。 这会打印出更好的悬垂和较小的部分,但会增加打印时间。" + +#~ msgctxt "support_infill_angles description" +#~ msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +#~ msgstr "用于支撑的填充图案的方向。支撑填充图案在水平面中旋转。" + +#~ 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." +#~ msgstr "在最大分辨率设置中减小分辨率时,允许的最大偏移量。如果增加该值,打印作业的准确性将降低,G-code 将减小。" + +#~ msgctxt "machine_gcode_flavor label" +#~ msgid "G-code Flavour" +#~ msgstr "G-code 风格" + +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "控制模型轮廓上的各个角是否影响缝隙的位置。 “无”意味着各个角不影响缝隙位置。 “隐藏缝隙”会使缝隙更可能出现在内侧角上。 “外露缝隙”会使缝隙更可能出现在外侧角上。 “隐藏或外露缝隙”会使缝隙更可能出现在内侧或外侧角上。" + +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "忽略小 Z 间隙" + +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "当模型具有小的垂直间隙时,可能会花费大约 5% 的额外计算时间来生成这些狭窄空间中的顶部和底部皮肤。 这种情况下,禁用该设置。" + +#~ msgctxt "build_volume_temperature description" +#~ msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +#~ msgstr "用于打印体积的温度。如果该值为 0,将不会调整打印体积温度。" + +#~ msgctxt "limit_support_retractions description" +#~ msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +#~ msgstr "当从支撑移动到支撑直线时,省略撤回。启用这个设置可以节省打印时间,但是可以在支撑结构中产生出色的字符串。" + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "最大 Z 速度" + +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "打印平台移动的最大速度。 将该值设为零会使打印为最大 Z 速度采用固件默认值。" + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "支撑结构间在 X/Y 方向的最大距离。 当分离结构之间的距离小于此值时,这些结构将合并为一个。" + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "最小直径" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "将由专门的支撑塔支撑的小区域 X/Y 轴方向的最小直径。" + +#~ msgctxt "prime_tower_circular label" +#~ msgid "Circular Prime Tower" +#~ msgstr "圆形装填塔" + +#~ msgctxt "prime_tower_circular description" +#~ msgid "Make the prime tower as a circular shape." +#~ msgstr "使装填塔成圆形。" + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "流量补偿:挤出的材料量乘以此值。" + +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "平滑螺旋轮廓以减少 Z 缝的可见性(Z 缝应在打印品上几乎看不到,但在层视图中仍然可见)。 请注意,平滑操作将倾向于模糊精细的表面细节。" + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "实验性功能: 让底部的支撑区域小于悬垂处的支撑区域。" + #~ msgctxt "extruders_enabled_count label" #~ msgid "Number of Extruders that are enabled" #~ msgstr "已启用的挤出机数目" diff --git a/resources/i18n/zh_TW/cura.po b/resources/i18n/zh_TW/cura.po index fa5c54c3d9..4987400320 100644 --- a/resources/i18n/zh_TW/cura.po +++ b/resources/i18n/zh_TW/cura.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0200\n" -"PO-Revision-Date: 2019-03-14 14:50+0100\n" +"POT-Creation-Date: 2019-09-10 16:55+0200\n" +"PO-Revision-Date: 2019-09-19 23:41+0800\n" "Last-Translator: Zhang Heh Ji \n" "Language-Team: Zhang Heh Ji \n" "Language: zh_TW\n" @@ -16,9 +16,9 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 2.1.1\n" +"X-Generator: Poedit 2.2.3\n" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:27 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:28 msgctxt "@action" msgid "Machine Settings" msgstr "印表機設定" @@ -85,36 +85,45 @@ msgctxt "@info:status" msgid "Profile has been flattened & activated." msgstr "列印參數已被合併並啟用。" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:37 +#: /home/ruben/Projects/Cura/plugins/AMFReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "AMF File" +msgstr "AMF 檔案" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:42 msgctxt "@item:inmenu" msgid "USB printing" msgstr "USB 連線列印" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:38 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:43 msgctxt "@action:button Preceded by 'Ready to'." msgid "Print via USB" msgstr "透過 USB 連線列印" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:39 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:44 msgctxt "@info:tooltip" msgid "Print via USB" msgstr "透過 USB 連線列印" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:75 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:80 msgctxt "@info:status" msgid "Connected via USB" msgstr "透過 USB 連接" -#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:100 +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:105 msgctxt "@label" msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?" msgstr "USB 列印正在進行中,關閉 Cura 將停止此列印工作。你確定要繼續嗎?" -#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15 -#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15 -msgctxt "X3G Writer File Description" -msgid "X3G File" -msgstr "X3G 檔案" +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +msgctxt "@message" +msgid "A print is still in progress. Cura cannot start another print via USB until the previous print has completed." +msgstr "列印仍在進行中。列印完成前,Cura 無法透過 USB 開始另一次列印。" + +#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:127 +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" @@ -126,6 +135,11 @@ 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" @@ -160,7 +174,7 @@ msgid "Save to Removable Drive {0}" msgstr "儲存到行動裝置 {0}" #: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:64 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:106 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py:107 msgctxt "@info:status" msgid "There are no file formats available to write with!" msgstr "沒有可供寫入的檔案格式!" @@ -197,10 +211,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/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:188 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:133 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:140 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1620 +#: /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 msgctxt "@info:title" msgid "Error" msgstr "錯誤" @@ -229,9 +242,9 @@ 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:197 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1610 -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1710 +#: /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 msgctxt "@info:title" msgid "Warning" msgstr "警告" @@ -258,347 +271,149 @@ msgctxt "@item:intext" msgid "Removable Drive" msgstr "行動裝置" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:93 -msgctxt "@action:button Preceded by 'Ready to'." -msgid "Print over network" -msgstr "網路連線列印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:76 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:94 -msgctxt "@properties:tooltip" -msgid "Print over network" -msgstr "網路連線列印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:95 -msgctxt "@info:status" -msgid "Connected over the network." -msgstr "已透過網路連接。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:98 -msgctxt "@info:status" -msgid "Connected over the network. Please approve the access request on the printer." -msgstr "已透過網路連接。請在印表機上接受存取請求。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:100 -msgctxt "@info:status" -msgid "Connected over the network. No access to control the printer." -msgstr "已透過網路連接,但沒有印表機的控制權限。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:105 -msgctxt "@info:status" -msgid "Access to the printer requested. Please approve the request on the printer" -msgstr "已發送印表機存取請求,請在印表機上批准該請求" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:108 -msgctxt "@info:title" -msgid "Authentication status" -msgstr "認証狀態" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:110 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:116 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:120 -msgctxt "@info:title" -msgid "Authentication Status" -msgstr "認証狀態" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:111 -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:198 -msgctxt "@action:button" -msgid "Retry" -msgstr "重試" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:112 -msgctxt "@info:tooltip" -msgid "Re-send the access request" -msgstr "重新發送存取請求" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:115 -msgctxt "@info:status" -msgid "Access to the printer accepted" -msgstr "印表機接受了存取請求" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:119 -msgctxt "@info:status" -msgid "No access to print with this printer. Unable to send print job." -msgstr "無法使用本印表機進行列印,無法發送列印作業。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:121 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:65 -msgctxt "@action:button" -msgid "Request Access" -msgstr "請求存取" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:123 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:66 -msgctxt "@info:tooltip" -msgid "Send access request to the printer" -msgstr "向印表機發送存取請求" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:208 -msgctxt "@label" -msgid "Unable to start a new print job." -msgstr "無法開始新的列印作業。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:210 -msgctxt "@label" -msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." -msgstr "Ultimaker 的設定有問題導致無法開始列印。請在繼續之前解決這個問題。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:216 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:238 -msgctxt "@window:title" -msgid "Mismatched configuration" -msgstr "設定不匹配" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:230 -msgctxt "@label" -msgid "Are you sure you wish to print with the selected configuration?" -msgstr "你確定要使用所選設定進行列印嗎?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:232 -msgctxt "@label" -msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "印表機的設定或校正與 Cura 之間不匹配。為了獲得最佳列印效果,請使用印表機的 PrintCores 和耗材設定進行切片。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:259 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:171 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:185 -msgctxt "@info:status" -msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." -msgstr "前一列印作業傳送中,暫停傳送新列印作業。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:266 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:189 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:206 -msgctxt "@info:status" -msgid "Sending data to printer" -msgstr "正在向印表機發送資料" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:267 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:191 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:208 -msgctxt "@info:title" -msgid "Sending Data" -msgstr "發送資料中" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:268 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:209 -#: /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:410 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml:20 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:38 -#: /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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 -msgctxt "@action:button" -msgid "Cancel" -msgstr "取消" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:331 -#, python-brace-format -msgctxt "@info:status" -msgid "No Printcore loaded in slot {slot_number}" -msgstr "Slot {slot_number} 中沒有載入 Printcore" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:337 -#, python-brace-format -msgctxt "@info:status" -msgid "No material loaded in slot {slot_number}" -msgstr "Slot {slot_number} 中沒有載入耗材" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:360 -#, python-brace-format -msgctxt "@label" -msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" -msgstr "擠出機 {extruder_id} 選擇了不同的 PrintCore(Cura:{cura_printcore_name},印表機:{remote_printcore_name})" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:369 -#, python-brace-format -msgctxt "@label" -msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" -msgstr "擠出機 {2} 選擇了不同的耗材(Cura:{0},印表機:{1})" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:555 -msgctxt "@window:title" -msgid "Sync with your printer" -msgstr "與你的印表機同步" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:557 -msgctxt "@label" -msgid "Would you like to use your current printer configuration in Cura?" -msgstr "你想在 Cura 中使用目前的印表機設定嗎?" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py:559 -msgctxt "@label" -msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." -msgstr "印表機上的 PrintCores 和/或耗材與目前專案中的不同。為獲得最佳列印效果,請使用目前印表機的 PrintCores 和耗材設定進行切片。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:96 -msgctxt "@info:status" -msgid "Connected over the network" -msgstr "透過網路連接" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:284 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:369 -msgctxt "@info:status" -msgid "Print job was successfully sent to the printer." -msgstr "列印作業已成功傳送到印表機。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:286 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:370 -msgctxt "@info:title" -msgid "Data Sent" -msgstr "資料傳送" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:287 -msgctxt "@action:button" -msgid "View in Monitor" -msgstr "使用監控觀看" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:399 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:317 -#, python-brace-format -msgctxt "@info:status" -msgid "Printer '{printer_name}' has finished printing '{job_name}'." -msgstr "印表機 '{printer_name}' 已完成列印 '{job_name}'。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:401 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:321 -#, python-brace-format -msgctxt "@info:status" -msgid "The print job '{job_name}' was finished." -msgstr "列印作業 '{job_name}' 已完成。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:402 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:316 -msgctxt "@info:status" -msgid "Print finished" -msgstr "列印已完成" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:583 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:617 -msgctxt "@label:material" -msgid "Empty" -msgstr "空的" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:584 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py:618 -msgctxt "@label:material" -msgid "Unknown" -msgstr "未知" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:174 -msgctxt "@action:button" -msgid "Print via Cloud" -msgstr "透過雲端服務列印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:175 -msgctxt "@properties:tooltip" -msgid "Print via Cloud" -msgstr "透過雲端服務列印" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:176 -msgctxt "@info:status" -msgid "Connected via Cloud" -msgstr "透過雲端服務連接" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:186 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:358 -msgctxt "@info:title" -msgid "Cloud error" -msgstr "雲端服務錯誤" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:203 -msgctxt "@info:status" -msgid "Could not export print job." -msgstr "雲端服務未匯出列印作業。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:357 -msgctxt "@info:text" -msgid "Could not upload the data to the printer." -msgstr "雲端服務未上傳資料到印表機。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:51 -msgctxt "@info:status" -msgid "tomorrow" -msgstr "明天" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/Utils.py:54 -msgctxt "@info:status" -msgid "today" -msgstr "今天" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py:187 -msgctxt "@info:description" -msgid "There was an error connecting to the cloud." -msgstr "連接到雲端服務時發生錯誤。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:14 -msgctxt "@info:status" -msgid "Sending Print Job" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py:15 -msgctxt "@info:status" -msgid "Uploading via Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:624 -msgctxt "@info:status" -msgid "Send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "利用你的 Ultimaker 帳號在任何地方傳送和監控列印作業。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:630 -msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." -msgid "Connect to Ultimaker Cloud" -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:631 -msgctxt "@action" -msgid "Don't ask me again for this printer." -msgstr "對此印表機不要再次詢問。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:634 -msgctxt "@action" -msgid "Get started" -msgstr "開始" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:640 -msgctxt "@info:status" -msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." -msgstr "現在你可以利用你的 Ultimaker 帳號在任何地方傳送和監控列印作業。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:646 -msgctxt "@info:status" -msgid "Connected!" -msgstr "已連線!" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py:648 -msgctxt "@action" -msgid "Review your connection" -msgstr "檢查您的連線" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py:30 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py:26 msgctxt "@action" msgid "Connect via Network" msgstr "透過網路連接" -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/__init__.py:16 -msgctxt "@item:inmenu" -msgid "Cura Settings Guide" -msgstr "" +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:52 +msgctxt "@action:button Preceded by 'Ready to'." +msgid "Print over network" +msgstr "網路連線列印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:53 +msgctxt "@properties:tooltip" +msgid "Print over network" +msgstr "網路連線列印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py:54 +msgctxt "@info:status" +msgid "Connected over the network" +msgstr "透過網路連接" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:15 +msgctxt "@info:status" +msgid "Please wait until the current job has been sent." +msgstr "請等待目前作業傳送完成。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadBlockedMessage.py:16 +msgctxt "@info:title" +msgid "Print error" +msgstr "列印錯誤" + +#: /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 "你正在嘗試連接到 {0},但它不是印表機群組的管理者。你可以透過網頁將其設定為印表機群組的管理者。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:30 +msgctxt "@info:title" +msgid "Not a group host" +msgstr "不是印表機群組管理者" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py:35 +msgctxt "@action" +msgid "Configure group" +msgstr "設定印表機群組" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:27 +msgctxt "@info:status" +msgid "Send and monitor print jobs from anywhere using your Ultimaker account." +msgstr "利用你的 Ultimaker 帳號在任何地方傳送和監控列印作業。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:33 +msgctxt "@info:status Ultimaker Cloud should not be translated." +msgid "Connect to Ultimaker Cloud" +msgstr "連接到 Ultimaker Cloud" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py:36 +msgctxt "@action" +msgid "Get started" +msgstr "開始" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:14 +msgctxt "@info:status" +msgid "Sending Print Job" +msgstr "正在傳送列印作業" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadProgressMessage.py:15 +msgctxt "@info:status" +msgid "Uploading print job to printer." +msgstr "正在上傳列印作業到印表機。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:15 +msgctxt "@info:status" +msgid "Print job was successfully sent to the printer." +msgstr "列印作業已成功傳送到印表機。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadSuccessMessage.py:16 +msgctxt "@info:title" +msgid "Data Sent" +msgstr "資料傳送" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:18 +msgctxt "@info:status" +msgid "You are attempting to connect to a printer that is not running Ultimaker Connect. Please update the printer to the latest firmware." +msgstr "你正在嘗試連接到一台未安裝 Ultimaker Connect 的印表機。請將印表機更新至最新版本的韌體。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/LegacyDeviceNoLongerSupportedMessage.py:21 +msgctxt "@info:title" +msgid "Update your printer" +msgstr "更新你印表機" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:24 +#, python-brace-format +msgctxt "@info:status" +msgid "Cura has detected material profiles that were not yet installed on the host printer of group {0}." +msgstr "Cura 偵測到群組 {0} 的管理主機上未安裝的耗材參數。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/MaterialSyncMessage.py:26 +msgctxt "@info:title" +msgid "Sending materials to printer" +msgstr "向印表機傳送耗材參數中" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:15 +msgctxt "@info:text" +msgid "Could not upload the data to the printer." +msgstr "雲端服務未上傳資料到印表機。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Messages/PrintJobUploadErrorMessage.py:16 +msgctxt "@info:title" +msgid "Network error" +msgstr "網路錯誤" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:27 +msgctxt "@info:status" +msgid "tomorrow" +msgstr "明天" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Utils.py:30 +msgctxt "@info:status" +msgid "today" +msgstr "今天" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:138 +msgctxt "@action:button" +msgid "Print via Cloud" +msgstr "透過雲端服務列印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:139 +msgctxt "@properties:tooltip" +msgid "Print via Cloud" +msgstr "透過雲端服務列印" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py:140 +msgctxt "@info:status" +msgid "Connected via Cloud" +msgstr "透過雲端服務連接" #: /home/ruben/Projects/Cura/plugins/MonitorStage/__init__.py:14 msgctxt "@item:inmenu" msgid "Monitor" msgstr "監控" -#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:118 +#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:125 msgctxt "@info" msgid "Could not access update information." msgstr "無法存取更新資訊。" @@ -626,12 +441,12 @@ msgctxt "@item:inlistbox" msgid "Layer view" msgstr "分層檢視" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:114 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:117 msgctxt "@info:status" msgid "Cura does not accurately display layers when Wire Printing is enabled" msgstr "當鐵絲網列印(Wire Printing)功能開啟時,Cura 將無法準確地顯示列印層(Layers)" -#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:115 +#: /home/ruben/Projects/Cura/plugins/SimulationView/SimulationView.py:118 msgctxt "@info:title" msgid "Simulation View" msgstr "模擬檢視" @@ -686,6 +501,36 @@ msgctxt "@item:inlistbox" msgid "GIF Image" msgstr "GIF 圖片" +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:15 +msgctxt "@item:inlistbox" +msgid "Open Compressed Triangle Mesh" +msgstr "Open Compressed Triangle Mesh" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:19 +msgctxt "@item:inlistbox" +msgid "COLLADA Digital Asset Exchange" +msgstr "COLLADA Digital Asset Exchange" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:23 +msgctxt "@item:inlistbox" +msgid "glTF Binary" +msgstr "glTF Binary" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:27 +msgctxt "@item:inlistbox" +msgid "glTF Embedded JSON" +msgstr "glTF Embedded JSON" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:36 +msgctxt "@item:inlistbox" +msgid "Stanford Triangle Format" +msgstr "Stanford Triangle Format" + +#: /home/ruben/Projects/Cura/plugins/TrimeshReader/__init__.py:40 +msgctxt "@item:inlistbox" +msgid "Compressed COLLADA Digital Asset Exchange" +msgstr "Compressed COLLADA Digital Asset Exchange" + #: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:331 msgctxt "@info:status" msgid "Unable to slice with the current material as it is incompatible with the selected machine or configuration." @@ -766,19 +611,19 @@ msgctxt "@item:inlistbox" msgid "3MF File" msgstr "3MF 檔案" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:191 -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:772 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:194 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:774 msgctxt "@label" msgid "Nozzle" msgstr "噴頭" -#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:470 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:479 #, 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:473 +#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:482 msgctxt "@info:title" msgid "Open Project File" msgstr "開啟專案檔案" @@ -793,18 +638,18 @@ msgctxt "@item:inlistbox" msgid "G File" msgstr "G 檔案" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:328 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:335 msgctxt "@info:status" msgid "Parsing G-code" msgstr "正在解析 G-code" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:330 -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:483 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:337 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:491 msgctxt "@info:title" msgid "G-code Details" msgstr "G-code 細項設定" -#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:481 +#: /home/ruben/Projects/Cura/plugins/GCodeReader/FlavorParser.py:489 msgctxt "@info:generic" msgid "Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate." msgstr "發送檔案之前,請確保 G-code 適用於目前印表機和印表機設定。目前 G-code 檔案可能不準確。" @@ -907,16 +752,16 @@ msgstr "登入失敗" #: /home/ruben/Projects/Cura/cura/Settings/cura_empty_instance_containers.py:33 msgctxt "@info:not supported profile" msgid "Not supported" -msgstr "" +msgstr "不支援" #: /home/ruben/Projects/Cura/cura/Settings/ContainerManager.py:203 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:121 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:123 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:122 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:124 #, 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?" @@ -929,116 +774,109 @@ msgid "Invalid file URL:" msgstr "無效的檔案網址:" #: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:924 -#, python-format -msgctxt "@info:generic" -msgid "Settings have been changed to match the current availability of extruders: [%s]" -msgstr "設定已改為與目前擠出機性能相匹配:[%s]" +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 msgctxt "@info:title" msgid "Settings updated" msgstr "設定更新" -#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1468 +#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:1483 msgctxt "@info:title" msgid "Extruder(s) Disabled" msgstr "擠出機已停用" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:131 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:135 #, 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:138 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:142 #, 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:143 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:147 #, 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:144 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:148 msgctxt "@info:title" msgid "Export succeeded" msgstr "匯出成功" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:170 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:175 #, 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:177 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:179 #, 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:190 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:195 #, 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:194 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:199 #, 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:218 -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:228 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:223 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:233 #, 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:241 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:317 #, python-brace-format -msgctxt "@info:status Don't translate the XML tags !" -msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." -msgstr "列印參數 {0} 內定義的機器({1})與你目前的機器({2})不匹配, 無法匯入。" - -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:313 -#, python-brace-format -msgctxt "@info:status Don't translate the XML tags or !" +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:316 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:320 #, python-brace-format msgctxt "@info:status" msgid "Successfully imported profile {0}" msgstr "已成功匯入列印參數 {0}" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:319 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:323 #, 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:322 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:326 #, 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:357 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:361 msgctxt "@label" msgid "Custom profile" msgstr "自訂列印參數" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:373 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:377 msgctxt "@info:status" msgid "Profile is missing a quality type." msgstr "列印參數缺少列印品質類型定義。" -#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:387 +#: /home/ruben/Projects/Cura/cura/Settings/CuraContainerRegistry.py:392 #, python-brace-format msgctxt "@info:status" msgid "Could not find a quality type {0} for the current configuration." @@ -1087,7 +925,7 @@ msgstr "外圍" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:84 msgctxt "@tooltip" msgid "Prime Tower" -msgstr "" +msgstr "裝填塔" #: /home/ruben/Projects/Cura/cura/UI/PrintInformation.py:85 msgctxt "@tooltip" @@ -1114,9 +952,9 @@ msgstr "預切片檔案 {0}" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:62 msgctxt "@action:button" msgid "Next" -msgstr "下一個" +msgstr "下一步" -#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:73 +#: /home/ruben/Projects/Cura/cura/UI/ObjectsModel.py:62 #, python-brace-format msgctxt "@label" msgid "Group #{group_nr}" @@ -1124,22 +962,36 @@ 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/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:85 #: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:482 #: /home/ruben/Projects/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:508 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:120 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:124 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/AboutDialog.qml:168 msgctxt "@action:button" msgid "Close" msgstr "關閉" #: /home/ruben/Projects/Cura/cura/UI/AddPrinterPagesModel.py:17 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:91 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:46 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:48 msgctxt "@action:button" msgid "Add" 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/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/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:283 +msgctxt "@action:button" +msgid "Cancel" +msgstr "取消" + #: /home/ruben/Projects/Cura/cura/Machines/Models/ExtrudersModel.py:208 msgctxt "@menuitem" msgid "Not overridden" @@ -1156,23 +1008,22 @@ msgctxt "@item:inlistbox" msgid "All Files (*)" msgstr "所有檔案 (*)" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:78 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:181 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:222 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:269 +#: /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/Machines/Models/DiscoveredPrintersModel.py:102 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:116 msgctxt "@label" msgid "The printer(s) below cannot be connected because they are part of a group" -msgstr "" +msgstr "下列印表機因為是群組的一部份導致無法連接" -#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:104 +#: /home/ruben/Projects/Cura/cura/Machines/Models/DiscoveredPrintersModel.py:118 msgctxt "@label" msgid "Available networked printers" -msgstr "" +msgstr "可用的網路印表機" #: /home/ruben/Projects/Cura/cura/Machines/MaterialManager.py:689 msgctxt "@label" @@ -1185,12 +1036,12 @@ msgctxt "@label" msgid "Custom" msgstr "自訂" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:81 +#: /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." msgstr "由於「列印序列」設定的值,成形列印範圍高度已被減少,以防止龍門與列印模型相衝突。" -#: /home/ruben/Projects/Cura/cura/BuildVolume.py:83 +#: /home/ruben/Projects/Cura/cura/BuildVolume.py:92 msgctxt "@info:title" msgid "Build Volume" msgstr "列印範圍" @@ -1208,46 +1059,51 @@ msgstr "嘗試復原沒有正確資料或 meta data 的 Cura 備份。" #: /home/ruben/Projects/Cura/cura/Backups/Backup.py:125 msgctxt "@info:backup_failed" msgid "Tried to restore a Cura backup that is higher than the current version." -msgstr "" +msgstr "嘗試復原的 Cura 備份的版本比目前的軟體版本新。" #: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationHelpers.py:79 msgctxt "@message" msgid "Could not read response." -msgstr "" +msgstr "雲端沒有讀取回應。" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:197 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationService.py:201 msgctxt "@info" msgid "Unable to reach the Ultimaker account server." msgstr "無法連上 Ultimaker 帳號伺服器。" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:66 +#: /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." -msgstr "" +msgstr "核准此應用程式時,請給予所需的權限。" -#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:73 +#: /home/ruben/Projects/Cura/cura/OAuth2/AuthorizationRequestHandler.py:77 msgctxt "@message" msgid "Something unexpected happened when trying to log in, please try again." -msgstr "" +msgstr "嘗試登入時出現意外狀況,請再試一次。" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:29 msgctxt "@info:status" msgid "Multiplying and placing objects" msgstr "正在複製並放置模型" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:28 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:30 msgctxt "@info:title" msgid "Placing Objects" msgstr "正在放置模型" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsJob.py:103 #: /home/ruben/Projects/Cura/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py:149 msgctxt "@info:status" msgid "Unable to find a location within the build volume for all objects" msgstr "無法在列印範圍內放下全部物件" -#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:100 +#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:108 msgctxt "@info:title" msgid "Placing Object" msgstr "擺放物件中" @@ -1396,48 +1252,48 @@ msgstr "日誌" #: /home/ruben/Projects/Cura/cura/CrashHandler.py:322 msgctxt "@title:groupbox" -msgid "User description" -msgstr "使用者描述" +msgid "User description (Note: Developers may not speak your language, please use English if possible)" +msgstr "使用者描述(注意:開發人員可能不會說您的語言,請盡可能使用英語)" -#: /home/ruben/Projects/Cura/cura/CrashHandler.py:341 +#: /home/ruben/Projects/Cura/cura/CrashHandler.py:342 msgctxt "@action:button" msgid "Send report" msgstr "送出報告" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:503 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:505 msgctxt "@info:progress" msgid "Loading machines..." msgstr "正在載入印表機..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:817 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:820 msgctxt "@info:progress" msgid "Setting up scene..." msgstr "正在設定場景..." -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:853 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:855 msgctxt "@info:progress" msgid "Loading interface..." msgstr "正在載入介面…" -#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1131 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1134 #, 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:1609 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1623 #, 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:1619 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1633 #, 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:1709 +#: /home/ruben/Projects/Cura/cura/CuraApplication.py:1723 msgctxt "@info:status" msgid "The selected model was too small to load." msgstr "選擇的模型太小無法載入。" @@ -1445,103 +1301,108 @@ msgstr "選擇的模型太小無法載入。" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:58 msgctxt "@title:label" msgid "Printer Settings" -msgstr "" +msgstr "印表機設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:70 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:72 msgctxt "@label" msgid "X (Width)" msgstr "X (寬度)" -#: /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:190 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:208 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:226 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:246 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:264 +#: /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:265 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:284 #: /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 -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:123 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:124 msgctxt "@label" msgid "mm" msgstr "mm" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:84 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:86 msgctxt "@label" msgid "Y (Depth)" msgstr "Y (深度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:98 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:100 msgctxt "@label" msgid "Z (Height)" msgstr "Z (高度)" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:112 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:114 msgctxt "@label" msgid "Build plate shape" msgstr "列印平台形狀" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:125 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:127 msgctxt "@label" msgid "Origin at center" -msgstr "" +msgstr "原點位於中心" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:137 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:139 msgctxt "@label" msgid "Heated bed" -msgstr "" +msgstr "熱床" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:149 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:151 +msgctxt "@label" +msgid "Heated build volume" +msgstr "熱箱" + +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:163 msgctxt "@label" msgid "G-code flavor" msgstr "G-code 類型" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:188 msgctxt "@title:label" msgid "Printhead Settings" -msgstr "" +msgstr "列印頭設定" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:186 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:202 msgctxt "@label" msgid "X min" msgstr "X 最小值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:204 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:221 msgctxt "@label" msgid "Y min" msgstr "Y 最小值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:222 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:240 msgctxt "@label" msgid "X max" msgstr "X 最大值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:242 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:261 msgctxt "@label" msgid "Y max" msgstr "Y 最大值" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:260 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:280 msgctxt "@label" msgid "Gantry Height" -msgstr "" +msgstr "吊車高度" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:274 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:294 msgctxt "@label" msgid "Number of Extruders" msgstr "擠出機數目" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:333 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:353 msgctxt "@title:label" msgid "Start G-code" -msgstr "" +msgstr "起始 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:347 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml:367 msgctxt "@title:label" msgid "End G-code" -msgstr "" +msgstr "結束 G-code" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.qml:42 msgctxt "@title:tab" @@ -1551,7 +1412,7 @@ msgstr "印表機" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:63 msgctxt "@title:label" msgid "Nozzle Settings" -msgstr "" +msgstr "噴頭設定" #: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:75 msgctxt "@label" @@ -1568,25 +1429,25 @@ msgctxt "@label" msgid "Nozzle offset X" msgstr "噴頭偏移 X" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:119 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:120 msgctxt "@label" msgid "Nozzle offset Y" msgstr "噴頭偏移 Y" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:133 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:135 msgctxt "@label" msgid "Cooling Fan Number" msgstr "冷卻風扇數量" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:160 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:162 msgctxt "@title:label" msgid "Extruder Start G-code" -msgstr "" +msgstr "擠出機起始 G-code" -#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:174 +#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsExtruderTab.qml:176 msgctxt "@title:label" msgid "Extruder End G-code" -msgstr "" +msgstr "擠出機結束 G-code" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:18 msgctxt "@action:button" @@ -1594,7 +1455,7 @@ msgid "Install" msgstr "安裝" #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml:20 -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:45 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46 msgctxt "@action:button" msgid "Installed" msgstr "已安裝" @@ -1609,16 +1470,16 @@ msgctxt "@label" msgid "ratings" msgstr "評分" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:32 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:30 msgctxt "@title:tab" msgid "Plugins" msgstr "外掛" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:70 +#: /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:66 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:417 msgctxt "@title:tab" msgid "Materials" msgstr "耗材" @@ -1628,49 +1489,49 @@ msgctxt "@label" msgid "Your rating" msgstr "你的評分" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:99 msgctxt "@label" msgid "Version" msgstr "版本" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:105 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:106 msgctxt "@label" msgid "Last updated" msgstr "最後更新時間" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:112 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:113 msgctxt "@label" msgid "Author" msgstr "作者" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:119 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:120 msgctxt "@label" msgid "Downloads" msgstr "下載" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:55 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:56 msgctxt "@label:The string between and is the highlighted link" msgid "Log in is required to install or update" msgstr "需要登入才能進行安裝或升級" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:79 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:80 msgctxt "@label:The string between and is the highlighted link" msgid "Buy material spools" -msgstr "" +msgstr "購買耗材線軸" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:95 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:34 msgctxt "@action:button" msgid "Update" msgstr "更新" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:96 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:35 msgctxt "@action:button" msgid "Updating" msgstr "更新中" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:97 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:98 #: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:36 msgctxt "@action:button" msgid "Updated" @@ -1731,17 +1592,17 @@ msgctxt "@info:button" msgid "Quit Cura" msgstr "結束 Cura" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Contributions" msgstr "社群貢獻" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:31 msgctxt "@label" msgid "Community Plugins" msgstr "社群外掛" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:40 msgctxt "@label" msgid "Generic Materials" msgstr "通用耗材" @@ -1802,27 +1663,52 @@ msgctxt "@label" msgid "Featured" msgstr "精選" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:66 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:34 msgctxt "@label" msgid "Compatibility" msgstr "相容性" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:203 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:124 +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 "Print Core" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:137 +msgctxt "@label:table_header" +msgid "Build Plate" +msgstr "列印平台" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:143 +msgctxt "@label:table_header" +msgid "Support" +msgstr "支撐" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:149 +msgctxt "@label:table_header" +msgid "Quality" +msgstr "品質" + +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:170 msgctxt "@action:label" msgid "Technical Data Sheet" msgstr "技術資料表" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:212 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:179 msgctxt "@action:label" msgid "Safety Data Sheet" msgstr "安全資料表" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:221 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:188 msgctxt "@action:label" msgid "Printing Guidelines" msgstr "列印指南" -#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:230 +#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:197 msgctxt "@action:label" msgid "Website" msgstr "網站" @@ -1922,70 +1808,76 @@ msgctxt "@label" msgid "Firmware update failed due to missing firmware." msgstr "由於韌體遺失,導致韌體更新失敗。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:144 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:185 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:155 +msgctxt "@label link to Connect and Cloud interfaces" +msgid "Manage printer" +msgstr "管理印表機" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:192 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:183 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:153 msgctxt "@label" msgid "Glass" msgstr "玻璃" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:209 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:253 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:256 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:514 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:248 msgctxt "@info" -msgid "These options are not available because you are monitoring a cloud printer." -msgstr "由於你正在監控一台雲端印表機,因此無法使用這些選項。" +msgid "Please update your printer's firmware to manage the queue remotely." +msgstr "請更新你印表機的韌體以便遠端管理工作隊列。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:242 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:289 msgctxt "@info" msgid "The webcam is not available because you are monitoring a cloud printer." msgstr "由於你正在監控一台雲端印表機,因此無法使用網路攝影機。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:302 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:348 msgctxt "@label:status" msgid "Loading..." msgstr "正在載入..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:306 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:352 msgctxt "@label:status" msgid "Unavailable" msgstr "無法使用" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:310 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:356 msgctxt "@label:status" msgid "Unreachable" msgstr "無法連接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:314 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:360 msgctxt "@label:status" msgid "Idle" msgstr "閒置中" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:401 msgctxt "@label" msgid "Untitled" msgstr "無標題" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:376 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:422 msgctxt "@label" msgid "Anonymous" msgstr "匿名" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:403 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:449 msgctxt "@label:status" msgid "Requires configuration changes" msgstr "需要修改設定" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:441 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml:487 msgctxt "@action:button" msgid "Details" msgstr "細項" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:132 msgctxt "@label" msgid "Unavailable printer" msgstr "無法使用的印表機" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml:134 msgctxt "@label" msgid "First available" msgstr "可用的第一個" @@ -1995,197 +1887,180 @@ msgctxt "@label" msgid "Queued" msgstr "已排入隊列" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:68 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:67 msgctxt "@label link to connect manager" -msgid "Go to Cura Connect" -msgstr "前往 Cura Connect" +msgid "Manage in browser" +msgstr "使用瀏覽器管理" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:103 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:100 +msgctxt "@label" +msgid "There are no print jobs in the queue. Slice and send a job to add one." +msgstr "目前沒有列印作業在隊列中。可透過切片並傳送列印作來增加一個。" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:115 msgctxt "@label" msgid "Print jobs" msgstr "列印作業" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:118 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:131 msgctxt "@label" msgid "Total print time" msgstr "總列印時間" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:133 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:147 msgctxt "@label" msgid "Waiting for" msgstr "等待" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:217 -msgctxt "@info" -msgid "All jobs are printed." -msgstr "" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml:252 -msgctxt "@label link to connect manager" -msgid "View print history" -msgstr "檢視列印歷史記錄" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:50 -msgctxt "@window:title" -msgid "Existing Connection" -msgstr "目前連線中" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:52 -msgctxt "@message:text" -msgid "This printer/group is already added to Cura. Please select another printer/group." -msgstr "此印表機/群組已加入 Cura。請選擇另一個印表機/群組。" - -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:45 msgctxt "@title:window" msgid "Connect to Networked Printer" msgstr "連接到網路印表機" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 msgctxt "@label" -msgid "" -"To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" -"\n" -"Select your printer from the list below:" -msgstr "" -"要透過網路列印,請確認你的印表機已透過網路線或 WIFI 連接到網路。若你無法讓 Cura 與印表機連線,你仍然可以使用 USB 裝置將 G-code 檔案傳輸到印表機。\n" -"\n" -"從以下清單中選擇你的印表機:" +msgid "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer." +msgstr "要透過網路列印,請確認你的印表機已透過網路線或 WIFI 連接到網路。若你無法讓 Cura 與印表機連線,你仍然可以使用 USB 裝置將 G-code 檔案傳輸到印表機。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:101 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:57 +msgctxt "@label" +msgid "Select your printer from the list below:" +msgstr "從下列清單中選擇你的印表機:" + +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:77 msgctxt "@action:button" msgid "Edit" msgstr "編輯" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:112 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:128 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:52 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:117 +#: /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/MachinesPage.qml:55 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:121 msgctxt "@action:button" msgid "Remove" msgstr "移除" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:120 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:96 msgctxt "@action:button" msgid "Refresh" msgstr "刷新" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:215 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:176 msgctxt "@label" msgid "If your printer is not listed, read the network printing troubleshooting guide" msgstr "如果你的印表機未被列出,請閱讀網路列印故障排除指南" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:244 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:205 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:258 msgctxt "@label" msgid "Type" msgstr "類型" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:283 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:228 #: /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:297 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:242 #: /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:321 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:266 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:325 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:270 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:336 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:281 msgctxt "@label" msgid "The printer at this address has not yet responded." msgstr "該網路位址的印表機尚無回應。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:341 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:74 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:286 msgctxt "@action:button" msgid "Connect" msgstr "連接" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:354 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:299 msgctxt "@title:window" msgid "Invalid IP address" -msgstr "" +msgstr "無效的 IP 位址" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:355 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:300 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:146 msgctxt "@text" msgid "Please enter a valid IP address." -msgstr "" +msgstr "請輸入有效的 IP 位址 。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:366 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:311 msgctxt "@title:window" msgid "Printer Address" msgstr "印表機網路位址" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:389 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:334 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:102 msgctxt "@label" -msgid "Enter the IP address or hostname of your printer on the network." -msgstr "" +msgid "Enter the IP address of your printer on the network." +msgstr "輸入印表機的 IP 位址。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:419 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:364 #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:138 #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:181 msgctxt "@action:button" msgid "OK" msgstr "確定" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:73 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:78 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:90 msgctxt "@label:status" msgid "Aborted" msgstr "已中斷" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:75 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:77 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:80 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:82 msgctxt "@label:status" msgid "Finished" msgstr "已完成" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:79 -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:81 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:84 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:86 msgctxt "@label:status" msgid "Preparing..." msgstr "正在準備..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:83 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:88 msgctxt "@label:status" msgid "Aborting..." msgstr "正在中斷..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:87 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:92 msgctxt "@label:status" msgid "Pausing..." msgstr "正在暫停..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:89 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:94 msgctxt "@label:status" msgid "Paused" msgstr "已暫停" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:91 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:96 msgctxt "@label:status" msgid "Resuming..." msgstr "正在繼續..." -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:93 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:98 msgctxt "@label:status" msgid "Action required" msgstr "需要採取的動作" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml:100 msgctxt "@label:status" msgid "Finishes %1 at %2" msgstr "在 %2 完成 %1" @@ -2289,72 +2164,64 @@ msgctxt "@action:button" msgid "Override" msgstr "覆寫" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:65 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 msgctxt "@label" msgid "The assigned printer, %1, requires the following configuration change:" msgid_plural "The assigned printer, %1, requires the following configuration changes:" msgstr[0] "分配的印表機 %1 需要下列的設定更動:" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:69 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:89 msgctxt "@label" msgid "The printer %1 is assigned, but the job contains an unknown material configuration." msgstr "已分配到印表機 %1,但列印工作含有未知的耗材設定。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:79 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:99 msgctxt "@label" msgid "Change material %1 from %2 to %3." msgstr "將耗材 %1 從 %2 改成 %3。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:82 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:102 msgctxt "@label" msgid "Load %3 as material %1 (This cannot be overridden)." msgstr "將 %3 做為耗材 %1 載入(無法覆寫)。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:85 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:105 msgctxt "@label" msgid "Change print core %1 from %2 to %3." msgstr "將 print core %1 從 %2 改成 %3。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:88 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:108 msgctxt "@label" msgid "Change build plate to %1 (This cannot be overridden)." msgstr "將列印平台改成 %1(無法覆寫)。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:95 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:115 msgctxt "@label" msgid "Override will use the specified settings with the existing printer configuration. This may result in a failed print." msgstr "覆寫會將指定的設定套用在現有的印表機上。這可能導致列印失敗。" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:136 +#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml:156 msgctxt "@label" msgid "Aluminum" msgstr "鋁" -#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml:75 -msgctxt "@info:tooltip" -msgid "Connect to a printer" -msgstr "連接到印表機" - -#: /home/ruben/Projects/Cura/plugins/SettingsGuide/resources/qml/SettingsGuide.qml:17 -msgctxt "@title" -msgid "Cura Settings Guide" -msgstr "" - #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:100 msgctxt "@info" msgid "" "Please make sure your printer has a connection:\n" "- Check if the printer is turned on.\n" -"- Check if the printer is connected to the network." +"- Check if the printer is connected to the network.\n" +"- Check if you are signed in to discover cloud-connected printers." msgstr "" "請確認你的印表機有連接:\n" "- 檢查印表機是否已打開。\n" -"- 檢查印表機是否已連接到網路。" +"- 檢查印表機是否已連接到網路。\n" +"- 檢查是否已登入以尋找雲端連接的印表機。" #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:117 msgctxt "@info" msgid "Please connect your printer to the network." -msgstr "" +msgstr "請將你的印表機連上網路。" #: /home/ruben/Projects/Cura/plugins/MonitorStage/MonitorMain.qml:156 msgctxt "@label link to technical assistance" @@ -2476,17 +2343,17 @@ msgstr "更多關於匿名資料收集的資訊" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:74 msgctxt "@text:window" msgid "Ultimaker Cura collects anonymous data in order to improve the print quality and user experience. Below is an example of all the data that is shared:" -msgstr "" +msgstr "Ultimaker Cura 搜集匿名資料以提高列印品質和使用者體驗。以下是共享資料的範例:" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:109 msgctxt "@text:window" msgid "I don't want to send anonymous data" -msgstr "" +msgstr "我不想傳送匿名資料" #: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:118 msgctxt "@text:window" msgid "Allow sending anonymous data" -msgstr "" +msgstr "允許傳送匿名資料" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19 msgctxt "@title:window" @@ -2536,7 +2403,7 @@ msgstr "深度 (mm)" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:126 msgctxt "@info:tooltip" msgid "For lithophanes dark pixels should correspond to thicker locations in order to block more light coming through. For height maps lighter pixels signify higher terrain, so lighter pixels should correspond to thicker locations in the generated 3D model." -msgstr "" +msgstr "對於浮雕,深色像素應該對應到較厚的位置,以阻擋更多的光通過。對於高度圖,淺色像素表示較高的地形,因此淺色像素應對應於產生的 3D 模型中較厚的位置。" #: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:139 msgctxt "@item:inlistbox" @@ -2661,7 +2528,7 @@ msgid "Printer Group" msgstr "印表機群組" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:180 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:226 msgctxt "@action:label" msgid "Profile settings" msgstr "列印參數設定" @@ -2674,19 +2541,19 @@ msgstr "如何解决列印參數中的設定衝突?" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:216 #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:308 #: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:121 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:250 msgctxt "@action:label" msgid "Name" msgstr "名稱" #: /home/ruben/Projects/Cura/plugins/3MFReader/WorkspaceDialog.qml:231 -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:223 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:234 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:228 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:239 msgctxt "@action:label" msgid "%1 override" msgid_plural "%1 overrides" @@ -2856,18 +2723,24 @@ msgid "Previous" msgstr "前一個" #: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:60 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:152 +#: /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:169 +#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:209 msgctxt "@label" msgid "Tip" msgstr "提示" -#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:156 +#: /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 "列印實驗" @@ -2987,155 +2860,155 @@ 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:133 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:125 msgctxt "@label" msgid "Display Name" msgstr "顯示名稱" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:135 msgctxt "@label" msgid "Brand" msgstr "品牌" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:145 msgctxt "@label" msgid "Material Type" msgstr "耗材類型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:163 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:155 msgctxt "@label" msgid "Color" msgstr "顏色" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:213 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:205 msgctxt "@label" msgid "Properties" msgstr "屬性" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:215 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:207 msgctxt "@label" msgid "Density" msgstr "密度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:230 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:222 msgctxt "@label" msgid "Diameter" msgstr "直徑" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:264 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:256 msgctxt "@label" msgid "Filament Cost" msgstr "耗材成本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:281 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:273 msgctxt "@label" msgid "Filament weight" msgstr "耗材重量" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:299 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:291 msgctxt "@label" msgid "Filament length" msgstr "耗材長度" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:300 msgctxt "@label" msgid "Cost per Meter" msgstr "每公尺成本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:322 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:314 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:321 msgctxt "@label" msgid "Unlink Material" msgstr "解除聯結耗材" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:340 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:332 msgctxt "@label" msgid "Description" msgstr "描述" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:353 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:345 msgctxt "@label" msgid "Adhesion Information" msgstr "附著資訊" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:379 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:371 #: /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:84 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:39 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:99 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:40 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:73 msgctxt "@action:button" msgid "Activate" msgstr "啟用" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:101 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:117 msgctxt "@action:button" msgid "Create" msgstr "建立" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:131 msgctxt "@action:button" msgid "Duplicate" msgstr "複製" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:141 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:142 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:160 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:148 msgctxt "@action:button" msgid "Import" msgstr "匯入" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:203 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:223 msgctxt "@action:label" msgid "Printer" msgstr "印表機" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:262 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:246 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:287 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:253 msgctxt "@title:window" msgid "Confirm Remove" msgstr "移除確認" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:263 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:247 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:254 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:277 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:304 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:312 msgctxt "@title:window" msgid "Import Material" msgstr "匯入耗材設定" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:286 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:313 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:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:317 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:308 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:316 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:335 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:343 msgctxt "@title:window" msgid "Export Material" msgstr "匯出耗材設定" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:347 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:326 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:353 msgctxt "@info:status Don't translate the XML tag !" msgid "Successfully exported material to %1" msgstr "成功匯出耗材至:%1" @@ -3176,388 +3049,411 @@ msgid "Unit" msgstr "單位" #: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:15 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:406 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:410 msgctxt "@title:tab" msgid "General" msgstr "基本" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:130 msgctxt "@label" msgid "Interface" msgstr "介面" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:137 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:141 msgctxt "@label" msgid "Language:" msgstr "語言:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:208 msgctxt "@label" msgid "Currency:" msgstr "貨幣:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:221 msgctxt "@label" msgid "Theme:" msgstr "主題:" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:273 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:277 msgctxt "@label" msgid "You will need to restart the application for these changes to have effect." msgstr "需重新啟動 Cura,新的設定才能生效。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:290 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:294 msgctxt "@info:tooltip" msgid "Slice automatically when changing settings." msgstr "當設定變更時自動進行切片。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:298 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:302 msgctxt "@option:check" msgid "Slice automatically" msgstr "自動切片" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:312 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:316 msgctxt "@label" msgid "Viewport behavior" msgstr "顯示區設定" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:320 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:324 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:329 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:333 msgctxt "@option:check" msgid "Display overhang" msgstr "顯示突出部分" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:336 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:341 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:341 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:346 msgctxt "@action:button" msgid "Center camera when item is selected" msgstr "當專案被選中時,自動置中視角" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:350 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:356 msgctxt "@info:tooltip" msgid "Should the default zoom behavior of cura be inverted?" msgstr "需要讓 Cura 的預設縮放操作反轉嗎?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:355 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:361 msgctxt "@action:button" msgid "Invert the direction of camera zoom." msgstr "反轉視角縮放方向。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:365 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 msgctxt "@info:tooltip" msgid "Should zooming move in the direction of the mouse?" msgstr "是否跟隨滑鼠方向進行縮放?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:370 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:371 +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 msgctxt "@action:button" msgid "Zoom toward mouse direction" msgstr "跟隨滑鼠方向縮放" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:380 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:402 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:385 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:407 msgctxt "@option:check" msgid "Ensure models are kept apart" msgstr "確保每個模型都保持分離" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:394 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:416 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:399 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:421 msgctxt "@option:check" msgid "Automatically drop models to the build plate" msgstr "自動下降模型到列印平台" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 msgctxt "@info:tooltip" msgid "Show caution message in g-code reader." msgstr "在 g-code 讀取器中顯示警告訊息。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:420 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:442 msgctxt "@option:check" msgid "Caution message in g-code reader" msgstr "G-code 讀取器中的警告訊息" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:428 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:450 msgctxt "@info:tooltip" msgid "Should layer be forced into compatibility mode?" msgstr "分層檢視要強制進入相容模式嗎?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:433 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:455 msgctxt "@option:check" msgid "Force layer view compatibility mode (restart required)" msgstr "強制分層檢視相容模式(需要重新啟動)" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:449 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:465 +msgctxt "@info:tooltip" +msgid "What type of camera rendering should be used?" +msgstr "使用哪種類型的攝影機渲染?" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:472 +msgctxt "@window:text" +msgid "Camera rendering: " +msgstr "攝影機渲染:" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:483 +msgid "Perspective" +msgstr "透視" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:484 +msgid "Orthographic" +msgstr "正交" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:515 msgctxt "@label" msgid "Opening and saving files" msgstr "開啟並儲存檔案" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:456 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522 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:461 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:527 msgctxt "@option:check" msgid "Scale large models" msgstr "縮小過大模型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:471 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:537 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:476 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:542 msgctxt "@option:check" msgid "Scale extremely small models" msgstr "放大過小模型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:486 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 msgctxt "@info:tooltip" msgid "Should models be selected after they are loaded?" msgstr "模型載入後要設為被選擇的狀態嗎?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:491 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:557 msgctxt "@option:check" msgid "Select models when loaded" msgstr "模型載入後選擇模型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:501 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:567 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:506 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:572 msgctxt "@option:check" msgid "Add machine prefix to job name" msgstr "將印表機名稱前綴添加到列印作業名稱中" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:516 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:582 msgctxt "@info:tooltip" msgid "Should a summary be shown when saving a project file?" msgstr "儲存專案檔案時是否顯示摘要?" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:520 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:586 msgctxt "@option:check" msgid "Show summary dialog when saving project" msgstr "儲存專案時顯示摘要對話框" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:530 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:596 msgctxt "@info:tooltip" msgid "Default behavior when opening a project file" msgstr "開啟專案檔案時的預設行為" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:538 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 msgctxt "@window:text" msgid "Default behavior when opening a project file: " msgstr "開啟專案檔案時的預設行為: " -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:552 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:618 msgctxt "@option:openProject" msgid "Always ask me this" msgstr "每次都向我確認" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:553 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:619 msgctxt "@option:openProject" msgid "Always open as a project" msgstr "總是作為一個專案開啟" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:554 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 msgctxt "@option:openProject" msgid "Always import models" msgstr "總是匯入模型" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:590 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:656 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:599 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:665 msgctxt "@label" msgid "Profiles" msgstr "列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:604 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:670 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:618 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:684 #: /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:619 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:685 msgctxt "@option:discardOrKeep" msgid "Always discard changed settings" msgstr "總是放棄修改過的設定" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:686 msgctxt "@option:discardOrKeep" msgid "Always transfer changed settings to new profile" msgstr "總是將修改過的設定轉移至新的列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:654 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:720 msgctxt "@label" msgid "Privacy" msgstr "隱私權" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:661 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:727 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:666 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:732 msgctxt "@option:check" msgid "Check for updates on start" msgstr "啟動時檢查更新" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:676 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:742 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:681 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:747 msgctxt "@option:check" msgid "Send (anonymous) print information" msgstr "(匿名)發送列印資訊" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:690 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:756 msgctxt "@action:button" msgid "More information" msgstr "更多資訊" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:708 +#: /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:715 +#: /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:720 +#: /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:411 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 msgctxt "@title:tab" msgid "Printers" msgstr "印表機" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:59 -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MachinesPage.qml:63 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:134 msgctxt "@action:button" msgid "Rename" msgstr "重命名" #: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:36 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:415 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:419 msgctxt "@title:tab" msgid "Profiles" msgstr "列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:89 msgctxt "@label" msgid "Create" msgstr "建立" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:102 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:105 msgctxt "@label" msgid "Duplicate" msgstr "複製" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:181 msgctxt "@title:window" msgid "Create Profile" msgstr "建立列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:176 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:183 msgctxt "@info" msgid "Please provide a name for this profile." msgstr "請為此參數提供一個名字。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:232 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:239 msgctxt "@title:window" msgid "Duplicate Profile" msgstr "複製列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:263 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:270 msgctxt "@title:window" msgid "Rename Profile" msgstr "重命名列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:276 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:283 msgctxt "@title:window" msgid "Import Profile" msgstr "匯入列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:302 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:309 msgctxt "@title:window" msgid "Export Profile" msgstr "匯出列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:357 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:364 msgctxt "@label %1 is printer name" msgid "Printer: %1" msgstr "印表機:%1" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:413 +#: /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:413 +#: /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:490 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:500 msgctxt "@action:button" msgid "Update profile with current settings/overrides" msgstr "使用目前設定 / 覆寫值更新列印參數" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:497 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:507 msgctxt "@action:button" msgid "Discard current changes" msgstr "捨棄目前更改" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:514 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:524 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:521 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:531 msgctxt "@action:label" msgid "Your current settings match the selected profile." msgstr "你目前的設定與選定的列印參數相匹配。" -#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Preferences/ProfilesPage.qml:550 msgctxt "@title:tab" msgid "Global Settings" msgstr "全局設定" -#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:89 +#: /home/ruben/Projects/Cura/resources/qml/MainWindow/MainWindowHeader.qml:90 msgctxt "@action:button" msgid "Marketplace" msgstr "市集" @@ -3620,33 +3516,33 @@ msgctxt "@label:textbox" msgid "search settings" msgstr "搜尋設定" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:465 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:466 msgctxt "@action:menu" msgid "Copy value to all extruders" msgstr "將設定值複製到所有擠出機" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:474 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:475 msgctxt "@action:menu" msgid "Copy all changed values to all extruders" msgstr "複製所有改變的設定值到所有擠出機" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:511 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:512 msgctxt "@action:menu" msgid "Hide 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 "Don't show this setting" msgstr "不再顯示此設定" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:533 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:529 msgctxt "@action:menu" msgid "Keep this setting visible" msgstr "保持此設定顯示" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:557 -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:425 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:434 msgctxt "@action:menu" msgid "Configure setting visibility..." msgstr "參數顯示設定..." @@ -3662,32 +3558,32 @@ msgstr "" "\n" "點擊以顯這些設定。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:67 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:81 msgctxt "@label" msgid "This setting is not used because all the settings that it influences are overridden." -msgstr "" +msgstr "此設定未被使用,因為受它影響的設定都被覆寫了。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:72 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:86 msgctxt "@label Header for list of settings." msgid "Affects" msgstr "影響" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:77 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:91 msgctxt "@label Header for list of settings." msgid "Affected By" msgstr "影響因素" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:172 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:186 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:176 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:190 msgctxt "@label" msgid "The value is resolved from per-extruder values " msgstr "這個數值是由每個擠出機的設定值解析出來的 " -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:214 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:228 msgctxt "@label" msgid "" "This setting has a value that is different from the profile.\n" @@ -3698,7 +3594,7 @@ msgstr "" "\n" "單擊以復原列印參數的值。" -#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:308 +#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingItem.qml:322 msgctxt "@label" msgid "" "This setting is normally calculated, but it currently has an absolute value set.\n" @@ -3714,7 +3610,7 @@ msgctxt "@button" msgid "Recommended" msgstr "推薦" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml:158 msgctxt "@button" msgid "Custom" msgstr "自訂選項" @@ -3739,12 +3635,12 @@ msgctxt "@label" msgid "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing." msgstr "在模型的突出部分產生支撐結構。若不這樣做,這些部分在列印時將倒塌。" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:28 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:29 msgctxt "@label" msgid "Adhesion" msgstr "附著" -#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:85 +#: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml:74 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 "允許列印邊緣或木筏。這將在你的物件周圍或下方添加一個容易切斷的平面區域。" @@ -3762,7 +3658,7 @@ 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 "" +msgstr "品質參數無法用於目前的耗材和噴頭設定。請修改這些設定以啟用此品質參數。" #: /home/ruben/Projects/Cura/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml:449 msgctxt "@tooltip" @@ -3798,7 +3694,7 @@ 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." -msgstr "" +msgstr "列印設定已被停用。 G-code 檔案無法修改。" #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:52 msgctxt "@label" @@ -3830,59 +3726,59 @@ msgctxt "@label" msgid "Send G-code" msgstr "傳送 G-code" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:364 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ManualPrinterControl.qml:365 msgctxt "@tooltip of G-code command input" msgid "Send a custom G-code command to the connected printer. Press 'enter' to send the command." msgstr "傳送一個自訂的 G-code 命令到連接中的印表機。按下 Enter 鍵傳送命令。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:38 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:41 msgctxt "@label" msgid "Extruder" msgstr "擠出機" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:68 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:71 msgctxt "@tooltip" msgid "The target temperature of the hotend. The hotend will heat up or cool down towards this temperature. If this is 0, the hotend heating is turned off." msgstr "加熱頭的目標溫度。加熱頭將加熱或冷卻至此溫度。若設定為 0,則關閉加熱頭的加熱。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:100 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:103 msgctxt "@tooltip" msgid "The current temperature of this hotend." msgstr "此加熱頭的目前溫度。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:174 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:177 msgctxt "@tooltip of temperature input" msgid "The temperature to pre-heat the hotend to." msgstr "加熱頭預熱溫度。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:332 msgctxt "@button Cancel pre-heating" msgid "Cancel" msgstr "取消" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:341 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:344 #: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/HeatedBedBox.qml:335 msgctxt "@button" msgid "Pre-heat" msgstr "預熱" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:370 msgctxt "@tooltip of pre-heat" msgid "Heat the hotend in advance before printing. You can continue adjusting your print while it is heating, and you won't have to wait for the hotend to heat up when you're ready to print." msgstr "列印前預先加熱。你可以在加熱時繼續調整你的列印,當你準備好列印時就不需等待加熱頭升溫。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:406 msgctxt "@tooltip" msgid "The colour of the material in this extruder." msgstr "該擠出機中耗材的顏色。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:435 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:438 msgctxt "@tooltip" msgid "The material in this extruder." msgstr "該擠出機中的耗材。" -#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:467 +#: /home/ruben/Projects/Cura/resources/qml/PrinterOutput/ExtruderBox.qml:470 msgctxt "@tooltip" msgid "The nozzle inserted in this extruder." msgstr "該擠出機所使用的噴頭。" @@ -3927,11 +3823,6 @@ msgctxt "@label:category menu label" msgid "Favorites" msgstr "常用" -#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:66 -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" @@ -3947,32 +3838,32 @@ msgctxt "@title:menu menubar:settings" msgid "&Printer" msgstr "印表機(&P)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:27 msgctxt "@title:menu" msgid "&Material" msgstr "耗材(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:41 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:36 msgctxt "@action:inmenu" msgid "Set as Active Extruder" msgstr "設為主要擠出機" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:47 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:42 msgctxt "@action:inmenu" msgid "Enable Extruder" msgstr "啟用擠出機" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:54 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:49 msgctxt "@action:inmenu" msgid "Disable Extruder" msgstr "關閉擠出機" -#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:68 +#: /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:71 +#: /home/ruben/Projects/Cura/resources/qml/Menus/SettingsMenu.qml:66 msgctxt "@title:settings" msgid "&Profile" msgstr "列印參數(&P)" @@ -3982,7 +3873,22 @@ msgctxt "@action:inmenu menubar:view" msgid "&Camera position" msgstr "視角位置(&C)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:35 +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:44 +msgctxt "@action:inmenu menubar:view" +msgid "Camera view" +msgstr "攝影機檢視" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:47 +msgctxt "@action:inmenu menubar:view" +msgid "Perspective" +msgstr "透視" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:59 +msgctxt "@action:inmenu menubar:view" +msgid "Orthographic" +msgstr "正交" + +#: /home/ruben/Projects/Cura/resources/qml/Menus/ViewMenu.qml:80 msgctxt "@action:inmenu menubar:view" msgid "&Build plate" msgstr "列印平台(&B)" @@ -4002,17 +3908,17 @@ msgctxt "@action:inmenu" msgid "Manage Setting Visibility..." msgstr "管理參數顯示..." -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:32 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:33 msgctxt "@title:menu menubar:file" msgid "&Save..." msgstr "儲存(&S)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:53 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:54 msgctxt "@title:menu menubar:file" msgid "&Export..." msgstr "匯出(&E)" -#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:64 +#: /home/ruben/Projects/Cura/resources/qml/Menus/FileMenu.qml:65 msgctxt "@action:inmenu menubar:file" msgid "Export Selection..." msgstr "匯出選擇…" @@ -4087,7 +3993,7 @@ msgstr "在此耗材組合下,使用膠水以獲得較佳的附著。" #: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml:128 msgctxt "@label" msgid "This configuration is not available because %1 is not recognized. Please visit %2 to download the correct material profile." -msgstr "由於無法識別 %1,因此無法使用此設定。 請連上 %2 下載正確的耗材參數設定。" +msgstr "由於無法識別 %1,因此無法使用此設定。 請連上 %2 下載正確的耗材參數設定。" #: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml:129 msgctxt "@label" @@ -4099,22 +4005,22 @@ msgctxt "@title:menu menubar:file" msgid "Open &Recent" msgstr "最近開啟的檔案(&R)" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:145 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:140 msgctxt "@label" msgid "Active print" msgstr "正在列印" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:153 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:148 msgctxt "@label" msgid "Job Name" msgstr "作業名稱" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:161 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:156 msgctxt "@label" msgid "Printing Time" msgstr "列印時間" -#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:169 +#: /home/ruben/Projects/Cura/resources/qml/PrintMonitor.qml:164 msgctxt "@label" msgid "Estimated time left" msgstr "預計剩餘時間" @@ -4122,12 +4028,17 @@ msgstr "預計剩餘時間" #: /home/ruben/Projects/Cura/resources/qml/ViewsSelector.qml:50 msgctxt "@label" msgid "View type" -msgstr "" +msgstr "檢示類型" + +#: /home/ruben/Projects/Cura/resources/qml/ObjectSelector.qml:59 +msgctxt "@label" +msgid "Object list" +msgstr "物件清單" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:22 msgctxt "@label The argument is a username." msgid "Hi %1" -msgstr "" +msgstr "嗨 %1" #: /home/ruben/Projects/Cura/resources/qml/Account/UserOperations.qml:33 msgctxt "@button" @@ -4156,6 +4067,9 @@ msgid "" "- Store your Ultimaker Cura settings in the cloud for use anywhere\n" "- Get exclusive access to print profiles from leading brands" msgstr "" +"- 將列印作業傳送到你區域網路外的 Ultimaker 印表機\n" +"- 將你的 Ultimaker Cura 設定儲存在雲端以便隨處使用\n" +"- 取得領導品牌的耗材參數設定的獨家存取權限" #: /home/ruben/Projects/Cura/resources/qml/Account/GeneralOperations.qml:78 msgctxt "@button" @@ -4172,32 +4086,37 @@ msgctxt "@label" msgid "No cost estimation available" msgstr "沒有成本估算" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:126 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/OutputProcessWidget.qml:127 msgctxt "@button" msgid "Preview" msgstr "預覽" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:49 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:55 msgctxt "@label:PrintjobStatus" msgid "Slicing..." msgstr "正在切片..." -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:61 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:67 msgctxt "@label:PrintjobStatus" msgid "Unable to slice" -msgstr "" +msgstr "無法切片" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:97 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 +msgctxt "@button" +msgid "Processing" +msgstr "處理中" + +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:103 msgctxt "@button" msgid "Slice" msgstr "切片" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:98 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:104 msgctxt "@label" msgid "Start the slicing process" msgstr "開始切片程序" -#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:112 +#: /home/ruben/Projects/Cura/resources/qml/ActionPanel/SliceProcessWidget.qml:118 msgctxt "@button" msgid "Cancel" msgstr "取消" @@ -4205,12 +4124,12 @@ msgstr "取消" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:31 msgctxt "@label" msgid "Time estimation" -msgstr "" +msgstr "時間估計" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:114 msgctxt "@label" msgid "Material estimation" -msgstr "" +msgstr "耗材估計" #: /home/ruben/Projects/Cura/resources/qml/ActionPanel/PrintJobInformation.qml:164 msgctxt "@label m for meter" @@ -4232,230 +4151,235 @@ msgctxt "@label" msgid "Preset printers" msgstr "預設印表機" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:162 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:166 msgctxt "@button" msgid "Add printer" msgstr "新增印表機" -#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/PrinterSelector/MachineSelector.qml:182 msgctxt "@button" msgid "Manage printers" msgstr "管理印表機" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:80 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:81 msgctxt "@action:inmenu" msgid "Show Online Troubleshooting Guide" msgstr "顯示線上故障排除指南" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:87 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:88 msgctxt "@action:inmenu" msgid "Toggle Full Screen" msgstr "切換全螢幕" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:94 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:96 +msgctxt "@action:inmenu" +msgid "Exit Full Screen" +msgstr "離開全螢幕" + +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:103 msgctxt "@action:inmenu menubar:edit" msgid "&Undo" msgstr "復原(&U)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:113 msgctxt "@action:inmenu menubar:edit" msgid "&Redo" msgstr "取消復原(&R)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:114 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:123 msgctxt "@action:inmenu menubar:file" msgid "&Quit" msgstr "退出(&Q)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:122 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:131 msgctxt "@action:inmenu menubar:view" msgid "3D View" msgstr "立體圖" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:129 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:138 msgctxt "@action:inmenu menubar:view" msgid "Front View" msgstr "前視圖" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:136 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:145 msgctxt "@action:inmenu menubar:view" msgid "Top View" msgstr "上視圖" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:143 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:152 msgctxt "@action:inmenu menubar:view" msgid "Left Side View" msgstr "左視圖" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:150 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:159 msgctxt "@action:inmenu menubar:view" msgid "Right Side View" msgstr "右視圖" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:157 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:166 msgctxt "@action:inmenu" msgid "Configure Cura..." msgstr "設定 Cura…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:164 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:173 msgctxt "@action:inmenu menubar:printer" msgid "&Add Printer..." msgstr "新增印表機(&A)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:170 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:179 msgctxt "@action:inmenu menubar:printer" msgid "Manage Pr&inters..." msgstr "管理印表機(&I)..." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:177 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 msgctxt "@action:inmenu" msgid "Manage Materials..." msgstr "管理耗材…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:186 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:195 msgctxt "@action:inmenu menubar:profile" msgid "&Update profile with current settings/overrides" msgstr "使用目前設定 / 覆寫更新列印參數(&U)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:194 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:203 msgctxt "@action:inmenu menubar:profile" msgid "&Discard current changes" msgstr "捨棄目前更改(&D)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:206 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:215 msgctxt "@action:inmenu menubar:profile" msgid "&Create profile from current settings/overrides..." msgstr "從目前設定 / 覆寫值建立列印參數(&C)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:212 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:221 msgctxt "@action:inmenu menubar:profile" msgid "Manage Profiles..." msgstr "管理列印參數.." -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:220 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:229 msgctxt "@action:inmenu menubar:help" msgid "Show Online &Documentation" msgstr "顯示線上說明文件(&D)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:228 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:237 msgctxt "@action:inmenu menubar:help" msgid "Report a &Bug" msgstr "BUG 回報(&B)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:236 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:245 msgctxt "@action:inmenu menubar:help" msgid "What's New" -msgstr "" +msgstr "新功能" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:242 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:251 msgctxt "@action:inmenu menubar:help" msgid "About..." msgstr "關於…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:249 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258 msgctxt "@action:inmenu menubar:edit" msgid "Delete Selected Model" msgid_plural "Delete Selected Models" msgstr[0] "刪除所選模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:259 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 msgctxt "@action:inmenu menubar:edit" msgid "Center Selected Model" msgid_plural "Center Selected Models" msgstr[0] "置中所選模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:268 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 msgctxt "@action:inmenu menubar:edit" msgid "Multiply Selected Model" msgid_plural "Multiply Selected Models" msgstr[0] "複製所選模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:277 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:286 msgctxt "@action:inmenu" msgid "Delete Model" msgstr "刪除模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:285 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294 msgctxt "@action:inmenu" msgid "Ce&nter Model on Platform" msgstr "將模型置中(&N)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:291 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:300 msgctxt "@action:inmenu menubar:edit" msgid "&Group Models" msgstr "群組模型(&G)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:311 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:320 msgctxt "@action:inmenu menubar:edit" msgid "Ungroup Models" msgstr "取消模型群組" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:321 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:330 msgctxt "@action:inmenu menubar:edit" msgid "&Merge Models" msgstr "結合模型(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:331 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:340 msgctxt "@action:inmenu" msgid "&Multiply Model..." msgstr "複製模型…(&M)" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:338 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:347 msgctxt "@action:inmenu menubar:edit" msgid "Select All Models" msgstr "選擇所有模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:348 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357 msgctxt "@action:inmenu menubar:edit" msgid "Clear Build Plate" msgstr "清空列印平台" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:358 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 msgctxt "@action:inmenu menubar:file" msgid "Reload All Models" msgstr "重新載入所有模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:367 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:376 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models To All Build Plates" msgstr "將所有模型排列到所有列印平台上" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:374 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:383 msgctxt "@action:inmenu menubar:edit" msgid "Arrange All Models" msgstr "排列所有模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:382 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:391 msgctxt "@action:inmenu menubar:edit" msgid "Arrange Selection" msgstr "排列所選模型" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:389 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:398 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Positions" msgstr "重置所有模型位置" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:396 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:405 msgctxt "@action:inmenu menubar:edit" msgid "Reset All Model Transformations" msgstr "重置所有模型旋轉" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:403 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:412 msgctxt "@action:inmenu menubar:file" msgid "&Open File(s)..." msgstr "開啟檔案(&O)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:411 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:420 msgctxt "@action:inmenu menubar:file" msgid "&New Project..." msgstr "新建專案(&N)…" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:418 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:427 msgctxt "@action:inmenu menubar:help" msgid "Show Configuration Folder" msgstr "顯示設定資料夾" -#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:432 +#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:441 msgctxt "@action:menu" msgid "&Marketplace" msgstr "市集(&M)" @@ -4470,52 +4394,52 @@ msgctxt "@label" msgid "This package will be installed after restarting." msgstr "此軟體包將在重新啟動後安裝。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:409 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:413 msgctxt "@title:tab" msgid "Settings" msgstr "設定" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:535 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:539 msgctxt "@title:window" msgid "Closing Cura" msgstr "關閉 Cura 中" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:536 -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:548 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:540 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:552 msgctxt "@label" msgid "Are you sure you want to exit Cura?" msgstr "你確定要結束 Cura 嗎?" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:580 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:590 #: /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:681 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:696 msgctxt "@window:title" msgid "Install Package" msgstr "安裝軟體包" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:689 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:704 msgctxt "@title:window" msgid "Open File(s)" msgstr "開啟檔案" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:692 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:707 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 檔案。你一次只能開啟一個 G-Code 檔案。若需開啟 G-Code 檔案,請僅選擇一個。" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:795 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:810 msgctxt "@title:window" msgid "Add Printer" msgstr "新增印表機" -#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:803 +#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:818 msgctxt "@title:window" msgid "What's New" -msgstr "" +msgstr "新功能" #: /home/ruben/Projects/Cura/resources/qml/ExtruderButton.qml:16 msgctxt "@label %1 is filled in with the name of an extruder" @@ -4736,32 +4660,32 @@ msgctxt "@title:window" msgid "Save Project" msgstr "儲存專案" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:138 +#: /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:172 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:183 msgctxt "@action:label" msgid "Extruder %1" msgstr "擠出機 %1" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:187 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:198 msgctxt "@action:label" msgid "%1 & material" msgstr "%1 & 耗材" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:189 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:200 msgctxt "@action:label" msgid "Material" -msgstr "" +msgstr "耗材" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:261 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:272 msgctxt "@action:label" msgid "Don't show project summary on save again" msgstr "儲存時不再顯示專案摘要" -#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:280 +#: /home/ruben/Projects/Cura/resources/qml/Dialogs/WorkspaceSummaryDialog.qml:291 msgctxt "@action:button" msgid "Save" msgstr "儲存" @@ -4794,158 +4718,158 @@ msgstr "匯入模型" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DropDownWidget.qml:93 msgctxt "@label" msgid "Empty" -msgstr "" +msgstr "空的" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:24 msgctxt "@label" msgid "Add a printer" -msgstr "" +msgstr "新增印表機" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:39 msgctxt "@label" msgid "Add a networked printer" -msgstr "" +msgstr "新增網路印表機" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkOrLocalPrinterContent.qml:81 msgctxt "@label" msgid "Add a non-networked printer" -msgstr "" +msgstr "新增非網路印表機" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:70 msgctxt "@label" msgid "Add printer by IP address" -msgstr "" +msgstr "使用 IP 位址新增印表機" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:133 msgctxt "@text" msgid "Place enter your printer's IP address." -msgstr "" +msgstr "輸入印表機的 IP 地址。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:158 msgctxt "@button" msgid "Add" -msgstr "" +msgstr "新增" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:204 msgctxt "@label" msgid "Could not connect to device." -msgstr "" +msgstr "無法連接到裝置。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:208 msgctxt "@label" msgid "The printer at this address has not responded yet." -msgstr "" +msgstr "此位址的印表機尚未回應。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:240 msgctxt "@label" msgid "This printer cannot be added because it's an unknown printer or it's not the host of a group." -msgstr "" +msgstr "無法添加此印表機,因為它是未知的印表機,或者它不是印表機群組的主機。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:329 msgctxt "@button" msgid "Back" -msgstr "" +msgstr "返回" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddPrinterByIpContent.qml:342 msgctxt "@button" msgid "Connect" -msgstr "" +msgstr "連接" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/FirstStartMachineActionsContent.qml:77 #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:123 msgctxt "@button" msgid "Next" -msgstr "" +msgstr "下一步" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:23 msgctxt "@label" msgid "User Agreement" -msgstr "" +msgstr "使用者授權" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:56 msgctxt "@button" msgid "Agree" -msgstr "" +msgstr "同意" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/UserAgreementContent.qml:70 msgctxt "@button" msgid "Decline and close" -msgstr "" +msgstr "拒絕並關閉" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:24 msgctxt "@label" msgid "Help us to improve Ultimaker Cura" -msgstr "" +msgstr "協助我們改進 Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:57 msgctxt "@text" msgid "Ultimaker Cura collects anonymous data to improve print quality and user experience, including:" -msgstr "" +msgstr "Ultimaker Cura 搜集匿名資料以提高列印品質和使用者體驗,包含:" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:71 msgctxt "@text" msgid "Machine types" -msgstr "" +msgstr "機器類型" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:77 msgctxt "@text" msgid "Material usage" -msgstr "" +msgstr "耗材用法" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:83 msgctxt "@text" msgid "Number of slices" -msgstr "" +msgstr "切片次數" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:89 msgctxt "@text" msgid "Print settings" -msgstr "" +msgstr "列印設定" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:102 msgctxt "@text" msgid "Data collected by Ultimaker Cura will not contain any personal information." -msgstr "" +msgstr "Ultimaker Cura 收集的資料不包含任何個人資訊。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/DataCollectionsContent.qml:103 msgctxt "@text" msgid "More information" -msgstr "" +msgstr "更多資訊" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WhatsNewContent.qml:24 msgctxt "@label" msgid "What's new in Ultimaker Cura" -msgstr "" +msgstr "Ultimaker Cura 新功能" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:42 msgctxt "@label" msgid "There is no printer found over your network." -msgstr "" +msgstr "在你的網路上找不到印表機。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:179 msgctxt "@label" msgid "Refresh" -msgstr "" +msgstr "更新" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:190 msgctxt "@label" msgid "Add printer by IP" -msgstr "" +msgstr "使用 IP 位址新增印表機" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml:223 msgctxt "@label" msgid "Troubleshooting" -msgstr "" +msgstr "故障排除" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:204 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:207 msgctxt "@label" msgid "Printer name" -msgstr "" +msgstr "印表機名稱" -#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:217 +#: /home/ruben/Projects/Cura/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml:220 msgctxt "@text" msgid "Please give your printer a name" -msgstr "" +msgstr "請為你的印表機取一個名稱" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:36 msgctxt "@label" @@ -4955,37 +4879,37 @@ msgstr "Ultimaker Cloud" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:77 msgctxt "@text" msgid "The next generation 3D printing workflow" -msgstr "" +msgstr "下一世代的 3D 列印流程" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:94 msgctxt "@text" msgid "- Send print jobs to Ultimaker printers outside your local network" -msgstr "" +msgstr "- 將列印作業傳送到你區域網路外的 Ultimaker 印表機" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:97 msgctxt "@text" msgid "- Store your Ultimaker Cura settings in the cloud for use anywhere" -msgstr "" +msgstr "- 將你的 Ultimaker Cura 設定儲存在雲端以便隨處使用" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:100 msgctxt "@text" msgid "- Get exclusive access to print profiles from leading brands" -msgstr "" +msgstr "- 取得領導品牌的耗材參數設定的獨家存取權限" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:119 msgctxt "@button" msgid "Finish" -msgstr "" +msgstr "完成" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/CloudContent.qml:128 msgctxt "@button" msgid "Create an account" -msgstr "" +msgstr "建立帳號" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:29 msgctxt "@label" msgid "Welcome to Ultimaker Cura" -msgstr "" +msgstr "歡迎來到 Ultimaker Cura" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:47 msgctxt "@text" @@ -4993,26 +4917,13 @@ msgid "" "Please follow these steps to set up\n" "Ultimaker Cura. This will only take a few moments." msgstr "" +"請按照以下步驟進行設定\n" +"Ultimaker Cura。這只需要一點時間。" #: /home/ruben/Projects/Cura/resources/qml/WelcomePages/WelcomeContent.qml:58 msgctxt "@button" msgid "Get started" -msgstr "" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:210 -msgctxt "@option:check" -msgid "See only current build plate" -msgstr "只顯示目前的列印平台" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:226 -msgctxt "@action:button" -msgid "Arrange to all build plates" -msgstr "擺放到所有的列印平台" - -#: /home/ruben/Projects/Cura/resources/qml/ObjectsList.qml:246 -msgctxt "@action:button" -msgid "Arrange current build plate" -msgstr "擺放到目前的列印平台" +msgstr "開始" #: MachineSettingsAction/plugin.json msgctxt "description" @@ -5097,12 +5008,22 @@ msgstr "韌體更新器" #: ProfileFlattener/plugin.json msgctxt "description" msgid "Create a flattened quality changes profile." -msgstr "" +msgstr "建立一個撫平的品質修改參數。" #: ProfileFlattener/plugin.json msgctxt "name" msgid "Profile Flattener" -msgstr "" +msgstr "參數撫平器" + +#: AMFReader/plugin.json +msgctxt "description" +msgid "Provides support for reading AMF files." +msgstr "提供對讀取 AMF 格式檔案的支援。" + +#: AMFReader/plugin.json +msgctxt "name" +msgid "AMF Reader" +msgstr "AMF 讀取器" #: USBPrinting/plugin.json msgctxt "description" @@ -5114,16 +5035,6 @@ msgctxt "name" msgid "USB printing" msgstr "USB 連線列印" -#: X3GWriter/build/plugin.json -msgctxt "description" -msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." -msgstr "允許將切片結果儲存為 X3G 檔案,以支援讀取此格式的印表機(Malyan,Makerbot 和其他以 Sailfish 為原型的印表機)。" - -#: X3GWriter/build/plugin.json -msgctxt "name" -msgid "X3GWriter" -msgstr "X3G 寫入器" - #: GCodeGzWriter/plugin.json msgctxt "description" msgid "Writes g-code to a compressed archive." @@ -5166,23 +5077,13 @@ msgstr "行動裝置輸出設備外掛" #: UM3NetworkPrinting/plugin.json msgctxt "description" -msgid "Manages network connections to Ultimaker 3 printers." -msgstr "管理與 Ultimaker 3 印表機的網絡連線。" +msgid "Manages network connections to Ultimaker networked printers." +msgstr "管理與 Ultimaker 網絡印表機的網絡連線。" #: UM3NetworkPrinting/plugin.json msgctxt "name" -msgid "UM3 Network Connection" -msgstr "UM3 網路連線" - -#: SettingsGuide/plugin.json -msgctxt "description" -msgid "Provides extra information and explanations about settings in Cura, with images and animations." -msgstr "" - -#: SettingsGuide/plugin.json -msgctxt "name" -msgid "Settings Guide" -msgstr "" +msgid "Ultimaker Network Connection" +msgstr "Ultimaker 網絡連線" #: MonitorStage/plugin.json msgctxt "description" @@ -5247,12 +5148,12 @@ msgstr "支援抹除器" #: UFPReader/plugin.json msgctxt "description" msgid "Provides support for reading Ultimaker Format Packages." -msgstr "" +msgstr "提供讀取 Ultimaker 格式封包的支援。" #: UFPReader/plugin.json msgctxt "name" msgid "UFP Reader" -msgstr "" +msgstr "UFP 讀取器" #: SliceInfoPlugin/plugin.json msgctxt "description" @@ -5337,12 +5238,12 @@ msgstr "升級版本 2.7 到 3.0" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 3.5 to Cura 4.0." -msgstr "" +msgstr "將設定從 Cura 3.5 版本升級至 4.0 版本。" #: VersionUpgrade/VersionUpgrade35to40/plugin.json msgctxt "name" msgid "Version Upgrade 3.5 to 4.0" -msgstr "" +msgstr "升級版本 3.5 到 4.0" #: VersionUpgrade/VersionUpgrade34to35/plugin.json msgctxt "description" @@ -5357,12 +5258,12 @@ msgstr "升級版本 3.4 到 3.5" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 4.0 to Cura 4.1." -msgstr "" +msgstr "將設定從 Cura 4.0 版本升級至 4.1 版本。" #: VersionUpgrade/VersionUpgrade40to41/plugin.json msgctxt "name" msgid "Version Upgrade 4.0 to 4.1" -msgstr "" +msgstr "升級版本 4.0 到 4.1" #: VersionUpgrade/VersionUpgrade30to31/plugin.json msgctxt "description" @@ -5374,6 +5275,16 @@ msgctxt "name" msgid "Version Upgrade 3.0 to 3.1" msgstr "升級版本 3.0 到 3.1" +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.1 to Cura 4.2." +msgstr "將設定從 Cura 4.1 版本升級至 4.2 版本。" + +#: VersionUpgrade/VersionUpgrade41to42/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.1 to 4.2" +msgstr "升級版本 4.1 到 4.2" + #: VersionUpgrade/VersionUpgrade26to27/plugin.json msgctxt "description" msgid "Upgrades configurations from Cura 2.6 to Cura 2.7." @@ -5404,6 +5315,16 @@ msgctxt "name" msgid "Version Upgrade 2.2 to 2.4" msgstr "升級版本 2.2 到 2.4" +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "description" +msgid "Upgrades configurations from Cura 4.2 to Cura 4.3." +msgstr "將設定從 Cura 4.2 版本升級至 4.3 版本。" + +#: VersionUpgrade/VersionUpgrade42to43/plugin.json +msgctxt "name" +msgid "Version Upgrade 4.2 to 4.3" +msgstr "升級版本 4.2 到 4.3" + #: ImageReader/plugin.json msgctxt "description" msgid "Enables ability to generate printable geometry from 2D image files." @@ -5414,6 +5335,16 @@ msgctxt "name" msgid "Image Reader" msgstr "圖片讀取器" +#: TrimeshReader/plugin.json +msgctxt "description" +msgid "Provides support for reading model files." +msgstr "提供讀取模型檔案的支援。" + +#: TrimeshReader/plugin.json +msgctxt "name" +msgid "Trimesh Reader" +msgstr "Trimesh 讀取器" + #: CuraEngineBackend/plugin.json msgctxt "description" msgid "Provides the link to the CuraEngine slicing backend." @@ -5444,16 +5375,6 @@ msgctxt "name" msgid "3MF Reader" msgstr "3MF 讀取器" -#: SVGToolpathReader/build/plugin.json -msgctxt "description" -msgid "Reads SVG files as toolpaths, for debugging printer movements." -msgstr "" - -#: SVGToolpathReader/build/plugin.json -msgctxt "name" -msgid "SVG Toolpath Reader" -msgstr "" - #: SolidView/plugin.json msgctxt "description" msgid "Provides a normal solid mesh view." @@ -5477,12 +5398,12 @@ msgstr "G-code 讀取器" #: CuraDrive/plugin.json msgctxt "description" msgid "Backup and restore your configuration." -msgstr "" +msgstr "備份和復原你的設定。" #: CuraDrive/plugin.json msgctxt "name" msgid "Cura Backups" -msgstr "" +msgstr "Cura 備份" #: CuraProfileWriter/plugin.json msgctxt "description" @@ -5517,12 +5438,12 @@ msgstr "3MF 寫入器" #: PreviewStage/plugin.json msgctxt "description" msgid "Provides a preview stage in Cura." -msgstr "" +msgstr "在 Cura 提供一個預覽介面。" #: PreviewStage/plugin.json msgctxt "name" msgid "Preview Stage" -msgstr "" +msgstr "預覽介面" #: UltimakerMachineActions/plugin.json msgctxt "description" @@ -5544,6 +5465,297 @@ msgctxt "name" msgid "Cura Profile Reader" msgstr "Cura 列印參數讀取器" +#~ msgctxt "@info:status" +#~ msgid "Connected over the network." +#~ msgstr "已透過網路連接。" + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. Please approve the access request on the printer." +#~ msgstr "已透過網路連接。請在印表機上接受存取請求。" + +#~ msgctxt "@info:status" +#~ msgid "Connected over the network. No access to control the printer." +#~ msgstr "已透過網路連接,但沒有印表機的控制權限。" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer requested. Please approve the request on the printer" +#~ msgstr "已發送印表機存取請求,請在印表機上批准該請求" + +#~ msgctxt "@info:title" +#~ msgid "Authentication status" +#~ msgstr "認証狀態" + +#~ msgctxt "@info:title" +#~ msgid "Authentication Status" +#~ msgstr "認証狀態" + +#~ msgctxt "@info:tooltip" +#~ msgid "Re-send the access request" +#~ msgstr "重新發送存取請求" + +#~ msgctxt "@info:status" +#~ msgid "Access to the printer accepted" +#~ msgstr "印表機接受了存取請求" + +#~ msgctxt "@info:status" +#~ msgid "No access to print with this printer. Unable to send print job." +#~ msgstr "無法使用本印表機進行列印,無法發送列印作業。" + +#~ msgctxt "@action:button" +#~ msgid "Request Access" +#~ msgstr "請求存取" + +#~ msgctxt "@info:tooltip" +#~ msgid "Send access request to the printer" +#~ msgstr "向印表機發送存取請求" + +#~ msgctxt "@label" +#~ msgid "Unable to start a new print job." +#~ msgstr "無法開始新的列印作業。" + +#~ msgctxt "@label" +#~ msgid "There is an issue with the configuration of your Ultimaker, which makes it impossible to start the print. Please resolve this issues before continuing." +#~ msgstr "Ultimaker 的設定有問題導致無法開始列印。請在繼續之前解決這個問題。" + +#~ msgctxt "@window:title" +#~ msgid "Mismatched configuration" +#~ msgstr "設定不匹配" + +#~ msgctxt "@label" +#~ msgid "Are you sure you wish to print with the selected configuration?" +#~ msgstr "你確定要使用所選設定進行列印嗎?" + +#~ msgctxt "@label" +#~ msgid "There is a mismatch between the configuration or calibration of the printer and Cura. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "印表機的設定或校正與 Cura 之間不匹配。為了獲得最佳列印效果,請使用印表機的 PrintCores 和耗材設定進行切片。" + +#~ msgctxt "@info:status" +#~ msgid "Sending new jobs (temporarily) blocked, still sending the previous print job." +#~ msgstr "前一列印作業傳送中,暫停傳送新列印作業。" + +#~ msgctxt "@info:status" +#~ msgid "Sending data to printer" +#~ msgstr "正在向印表機發送資料" + +#~ msgctxt "@info:title" +#~ msgid "Sending Data" +#~ msgstr "發送資料中" + +#~ msgctxt "@info:status" +#~ msgid "No Printcore loaded in slot {slot_number}" +#~ msgstr "Slot {slot_number} 中沒有載入 Printcore" + +#~ msgctxt "@info:status" +#~ msgid "No material loaded in slot {slot_number}" +#~ msgstr "Slot {slot_number} 中沒有載入耗材" + +#~ msgctxt "@label" +#~ msgid "Different PrintCore (Cura: {cura_printcore_name}, Printer: {remote_printcore_name}) selected for extruder {extruder_id}" +#~ msgstr "擠出機 {extruder_id} 選擇了不同的 PrintCore(Cura:{cura_printcore_name},印表機:{remote_printcore_name})" + +#~ msgctxt "@label" +#~ msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}" +#~ msgstr "擠出機 {2} 選擇了不同的耗材(Cura:{0},印表機:{1})" + +#~ msgctxt "@window:title" +#~ msgid "Sync with your printer" +#~ msgstr "與你的印表機同步" + +#~ msgctxt "@label" +#~ msgid "Would you like to use your current printer configuration in Cura?" +#~ msgstr "你想在 Cura 中使用目前的印表機設定嗎?" + +#~ msgctxt "@label" +#~ msgid "The PrintCores and/or materials on your printer differ from those within your current project. For the best result, always slice for the PrintCores and materials that are inserted in your printer." +#~ msgstr "印表機上的 PrintCores 和/或耗材與目前專案中的不同。為獲得最佳列印效果,請使用目前印表機的 PrintCores 和耗材設定進行切片。" + +#~ msgctxt "@action:button" +#~ msgid "View in Monitor" +#~ msgstr "使用監控觀看" + +#~ msgctxt "@info:status" +#~ msgid "Printer '{printer_name}' has finished printing '{job_name}'." +#~ msgstr "印表機 '{printer_name}' 已完成列印 '{job_name}'。" + +#~ msgctxt "@info:status" +#~ msgid "The print job '{job_name}' was finished." +#~ msgstr "列印作業 '{job_name}' 已完成。" + +#~ msgctxt "@info:status" +#~ msgid "Print finished" +#~ msgstr "列印已完成" + +#~ msgctxt "@label:material" +#~ msgid "Empty" +#~ msgstr "空的" + +#~ msgctxt "@label:material" +#~ msgid "Unknown" +#~ msgstr "未知" + +#~ msgctxt "@info:title" +#~ msgid "Cloud error" +#~ msgstr "雲端服務錯誤" + +#~ msgctxt "@info:status" +#~ msgid "Could not export print job." +#~ msgstr "雲端服務未匯出列印作業。" + +#~ msgctxt "@info:description" +#~ msgid "There was an error connecting to the cloud." +#~ msgstr "連接到雲端服務時發生錯誤。" + +#~ msgctxt "@info:status" +#~ msgid "Uploading via Ultimaker Cloud" +#~ msgstr "透過 Ultimaker Cloud 上傳" + +#~ msgctxt "@info:status Ultimaker Cloud is a brand name and shouldn't be translated." +#~ msgid "Connect to Ultimaker Cloud" +#~ msgstr "連接到 Ultimaker Cloud" + +#~ msgctxt "@action" +#~ msgid "Don't ask me again for this printer." +#~ msgstr "對此印表機不要再次詢問。" + +#~ msgctxt "@info:status" +#~ msgid "You can now send and monitor print jobs from anywhere using your Ultimaker account." +#~ msgstr "現在你可以利用你的 Ultimaker 帳號在任何地方傳送和監控列印作業。" + +#~ msgctxt "@info:status" +#~ msgid "Connected!" +#~ msgstr "已連線!" + +#~ msgctxt "@action" +#~ msgid "Review your connection" +#~ msgstr "檢查您的連線" + +#~ msgctxt "@info:status Don't translate the XML tags !" +#~ msgid "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it." +#~ msgstr "列印參數 {0} 內定義的機器({1})與你目前的機器({2})不匹配, 無法匯入。" + +#~ msgctxt "@info:status Don't translate the XML tags or !" +#~ msgid "Failed to import profile from {0}:" +#~ msgstr "從 {0} 匯入列印參數失敗:" + +#~ msgctxt "@window:title" +#~ msgid "Existing Connection" +#~ msgstr "目前連線中" + +#~ msgctxt "@message:text" +#~ msgid "This printer/group is already added to Cura. Please select another printer/group." +#~ msgstr "此印表機/群組已加入 Cura。請選擇另一個印表機/群組。" + +#~ msgctxt "@label" +#~ msgid "Enter the IP address or hostname of your printer on the network." +#~ msgstr "輸入印表機在網路上的 IP 位址或主機名稱。" + +#~ msgctxt "@info:tooltip" +#~ msgid "Connect to a printer" +#~ msgstr "連接到印表機" + +#~ msgctxt "@title" +#~ msgid "Cura Settings Guide" +#~ msgstr "Cura 設定指南" + +#~ msgctxt "@info:tooltip" +#~ msgid "Zooming towards the mouse is not supported in the orthogonal perspective." +#~ msgstr "正交透視不支援游標縮放功能。" + +#~ msgid "Orthogonal" +#~ msgstr "正交" + +#~ msgctxt "description" +#~ msgid "Manages network connections to Ultimaker 3 printers." +#~ msgstr "管理與 Ultimaker 3 印表機的網絡連線。" + +#~ msgctxt "name" +#~ msgid "UM3 Network Connection" +#~ msgstr "UM3 網路連線" + +#~ msgctxt "description" +#~ msgid "Provides extra information and explanations about settings in Cura, with images and animations." +#~ msgstr "提供關於 Cura 設定額外的圖片動畫資訊和說明。" + +#~ msgctxt "name" +#~ msgid "Settings Guide" +#~ msgstr "設定指南" + +#~ msgctxt "@item:inmenu" +#~ msgid "Cura Settings Guide" +#~ msgstr "Cura 設定指南" + +#~ msgctxt "@info:generic" +#~ msgid "Settings have been changed to match the current availability of extruders: [%s]" +#~ msgstr "設定已改為與目前擠出機性能相匹配:[%s]" + +#~ msgctxt "@title:groupbox" +#~ msgid "User description" +#~ msgstr "使用者描述" + +#~ msgctxt "@info" +#~ msgid "These options are not available because you are monitoring a cloud printer." +#~ msgstr "由於你正在監控一台雲端印表機,因此無法使用這些選項。" + +#~ msgctxt "@label link to connect manager" +#~ msgid "Go to Cura Connect" +#~ msgstr "前往 Cura Connect" + +#~ msgctxt "@info" +#~ msgid "All jobs are printed." +#~ msgstr "所有列印作業已完成。" + +#~ msgctxt "@label link to connect manager" +#~ msgid "View print history" +#~ msgstr "檢視列印歷史記錄" + +#~ msgctxt "@label" +#~ msgid "" +#~ "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n" +#~ "\n" +#~ "Select your printer from the list below:" +#~ msgstr "" +#~ "要透過網路列印,請確認你的印表機已透過網路線或 WIFI 連接到網路。若你無法讓 Cura 與印表機連線,你仍然可以使用 USB 裝置將 G-code 檔案傳輸到印表機。\n" +#~ "\n" +#~ "從以下清單中選擇你的印表機:" + +#~ msgctxt "@info" +#~ msgid "" +#~ "Please make sure your printer has a connection:\n" +#~ "- Check if the printer is turned on.\n" +#~ "- Check if the printer is connected to the network." +#~ msgstr "" +#~ "請確認你的印表機有連接:\n" +#~ "- 檢查印表機是否已打開。\n" +#~ "- 檢查印表機是否已連接到網路。" + +#~ msgctxt "@option:check" +#~ msgid "See only current build plate" +#~ msgstr "只顯示目前的列印平台" + +#~ msgctxt "@action:button" +#~ msgid "Arrange to all build plates" +#~ msgstr "擺放到所有的列印平台" + +#~ msgctxt "@action:button" +#~ msgid "Arrange current build plate" +#~ msgstr "擺放到目前的列印平台" + +#~ msgctxt "description" +#~ msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)." +#~ msgstr "允許將切片結果儲存為 X3G 檔案,以支援讀取此格式的印表機(Malyan,Makerbot 和其他以 Sailfish 為原型的印表機)。" + +#~ msgctxt "name" +#~ msgid "X3GWriter" +#~ msgstr "X3G 寫入器" + +#~ msgctxt "description" +#~ msgid "Reads SVG files as toolpaths, for debugging printer movements." +#~ msgstr "讀取 SVG 檔案做為工具路徑,用於印表機移動的除錯。" + +#~ msgctxt "name" +#~ msgid "SVG Toolpath Reader" +#~ msgstr "SVG 工具路徑讀取器" + #~ msgctxt "@item:inmenu" #~ msgid "Changelog" #~ msgstr "更新日誌" @@ -6253,7 +6465,7 @@ msgstr "Cura 列印參數讀取器" #~ msgctxt "@label" #~ msgid "This printer is the host for a group of %1 Ultimaker 3 printers." -#~ msgstr "這台印表機是 %1 台 Ultimaker 3 印表機群組的主機。" +#~ msgstr "這台印表機是 %1 台 Ultimaker 3 印表機群組的主機。" #~ msgctxt "@label: arg 1 is group name" #~ msgid "%1 is not set up to host a group of connected Ultimaker 3 printers" @@ -7252,7 +7464,7 @@ msgstr "Cura 列印參數讀取器" #~ msgctxt "@label" #~ msgid "This printer is the host for a group of %1 connected Ultimaker 3 printers" -#~ msgstr "這台印表機是 %1 台 Ultimaker 3 印表機群組的主機" +#~ msgstr "這台印表機是 %1 台 Ultimaker 3 印表機群組的主機" #~ msgctxt "@label" #~ msgid "Completed on: " diff --git a/resources/i18n/zh_TW/fdmextruder.def.json.po b/resources/i18n/zh_TW/fdmextruder.def.json.po index f13a220a91..4c33b06539 100644 --- a/resources/i18n/zh_TW/fdmextruder.def.json.po +++ b/resources/i18n/zh_TW/fdmextruder.def.json.po @@ -5,9 +5,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" "PO-Revision-Date: 2019-03-03 14:09+0800\n" "Last-Translator: Zhang Heh Ji \n" "Language-Team: Zhang Heh Ji \n" diff --git a/resources/i18n/zh_TW/fdmprinter.def.json.po b/resources/i18n/zh_TW/fdmprinter.def.json.po index bfdcd02355..a8b0a7fc86 100644 --- a/resources/i18n/zh_TW/fdmprinter.def.json.po +++ b/resources/i18n/zh_TW/fdmprinter.def.json.po @@ -5,17 +5,17 @@ # msgid "" msgstr "" -"Project-Id-Version: Cura 4.1\n" +"Project-Id-Version: Cura 4.3\n" "Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n" -"POT-Creation-Date: 2019-05-14 12:48+0000\n" -"PO-Revision-Date: 2019-03-09 20:53+0800\n" +"POT-Creation-Date: 2019-09-10 16:55+0000\n" +"PO-Revision-Date: 2019-09-23 11:59+0200\n" "Last-Translator: Zhang Heh Ji \n" "Language-Team: Zhang Heh Ji \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2\n" +"X-Generator: Poedit 2.2.1\n" #: fdmprinter.def.json msgctxt "machine_settings label" @@ -215,6 +215,16 @@ msgctxt "machine_heated_bed description" msgid "Whether the machine has a heated build plate present." msgstr "機器是否有熱床。" +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume label" +msgid "Has Build Volume Temperature Stabilization" +msgstr "具有列印空間溫度穩定性" + +#: fdmprinter.def.json +msgctxt "machine_heated_build_volume description" +msgid "Whether the machine is able to stabilize the build volume temperature." +msgstr "機器是否能夠穩定列印空間溫度。" + #: fdmprinter.def.json msgctxt "machine_center_is_zero label" msgid "Is Center Origin" @@ -238,7 +248,7 @@ msgstr "擠出機組數目。擠出機組是指進料裝置、喉管和噴頭的 #: fdmprinter.def.json msgctxt "extruders_enabled_count label" msgid "Number of Extruders That Are Enabled" -msgstr "" +msgstr "已啟用擠出機的數量" #: fdmprinter.def.json msgctxt "extruders_enabled_count description" @@ -248,7 +258,7 @@ msgstr "啟用擠出機的數量;軟體自動設定" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter label" msgid "Outer Nozzle Diameter" -msgstr "" +msgstr "噴頭外徑" #: fdmprinter.def.json msgctxt "machine_nozzle_tip_outer_diameter description" @@ -258,7 +268,7 @@ msgstr "噴頭尖端的外徑。" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance label" msgid "Nozzle Length" -msgstr "" +msgstr "噴頭長度" #: fdmprinter.def.json msgctxt "machine_nozzle_head_distance description" @@ -268,7 +278,7 @@ msgstr "噴頭尖端與列印頭最低部分之間的高度差。" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle label" msgid "Nozzle Angle" -msgstr "" +msgstr "噴頭角度" #: fdmprinter.def.json msgctxt "machine_nozzle_expansion_angle description" @@ -278,7 +288,7 @@ msgstr "水平面與噴頭尖端上部圓錐形之間的角度。" #: fdmprinter.def.json msgctxt "machine_heat_zone_length label" msgid "Heat Zone Length" -msgstr "" +msgstr "加熱區長度" #: fdmprinter.def.json msgctxt "machine_heat_zone_length description" @@ -308,7 +318,7 @@ msgstr "是否從 Cura 控制溫度。若要從 Cura 外部控制噴頭溫度, #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed label" msgid "Heat Up Speed" -msgstr "" +msgstr "加熱速度" #: fdmprinter.def.json msgctxt "machine_nozzle_heat_up_speed description" @@ -318,7 +328,7 @@ msgstr "噴頭從待機溫度加熱到列印溫度的平均速度(℃/ s)。 #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed label" msgid "Cool Down Speed" -msgstr "" +msgstr "冷卻速度" #: fdmprinter.def.json msgctxt "machine_nozzle_cool_down_speed description" @@ -337,8 +347,8 @@ msgstr "擠出機必須保持不活動以便噴頭冷卻的最短時間。擠出 #: fdmprinter.def.json msgctxt "machine_gcode_flavor label" -msgid "G-code Flavour" -msgstr "" +msgid "G-code Flavor" +msgstr "G-code 類型" #: fdmprinter.def.json msgctxt "machine_gcode_flavor description" @@ -403,27 +413,27 @@ msgstr "是否使用韌體回抽命令(G10/G11)取代 G1 命令的 E 參數 #: fdmprinter.def.json msgctxt "machine_disallowed_areas label" msgid "Disallowed Areas" -msgstr "" +msgstr "禁入區域" #: fdmprinter.def.json msgctxt "machine_disallowed_areas description" msgid "A list of polygons with areas the print head is not allowed to enter." -msgstr "不允許列印頭進入區域的多邊形清單。" +msgstr "禁止列印頭進入區域的多邊形清單。" #: fdmprinter.def.json msgctxt "nozzle_disallowed_areas label" msgid "Nozzle Disallowed Areas" -msgstr "噴頭不允許區域" +msgstr "噴頭禁入區域" #: fdmprinter.def.json msgctxt "nozzle_disallowed_areas description" msgid "A list of polygons with areas the nozzle is not allowed to enter." -msgstr "不允許噴頭進入區域的多邊形清單。" +msgstr "禁止噴頭進入區域的多邊形清單。" #: fdmprinter.def.json msgctxt "machine_head_polygon label" msgid "Machine Head Polygon" -msgstr "" +msgstr "機器頭多邊形" #: fdmprinter.def.json msgctxt "machine_head_polygon description" @@ -433,7 +443,7 @@ msgstr "列印頭 2D 輪廓圖(不包含風扇蓋)。" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon label" msgid "Machine Head & Fan Polygon" -msgstr "" +msgstr "機器頭和風扇多邊形" #: fdmprinter.def.json msgctxt "machine_head_with_fans_polygon description" @@ -443,7 +453,7 @@ msgstr "列印頭 2D 輪廓圖(包含風扇蓋)。" #: fdmprinter.def.json msgctxt "gantry_height label" msgid "Gantry Height" -msgstr "" +msgstr "吊車高度" #: fdmprinter.def.json msgctxt "gantry_height description" @@ -473,7 +483,7 @@ msgstr "噴頭內徑,在使用非標準噴頭尺寸時需更改此設定。" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords label" msgid "Offset with Extruder" -msgstr "" +msgstr "擠出機偏移量" #: fdmprinter.def.json msgctxt "machine_use_extruder_offset_to_offset_coords description" @@ -1270,6 +1280,56 @@ msgctxt "z_seam_type option sharpest_corner" msgid "Sharpest Corner" msgstr "最尖銳的轉角" +#: fdmprinter.def.json +msgctxt "z_seam_position label" +msgid "Z Seam Position" +msgstr "Z 接縫位置" + +#: fdmprinter.def.json +msgctxt "z_seam_position description" +msgid "The position near where to start printing each part in a layer." +msgstr "每一層開始列印位置要靠近哪個方向。" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backleft" +msgid "Back Left" +msgstr "左後方" + +#: fdmprinter.def.json +msgctxt "z_seam_position option back" +msgid "Back" +msgstr "後方" + +#: fdmprinter.def.json +msgctxt "z_seam_position option backright" +msgid "Back Right" +msgstr "右後方" + +#: fdmprinter.def.json +msgctxt "z_seam_position option right" +msgid "Right" +msgstr "右方" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontright" +msgid "Front Right" +msgstr "右前方" + +#: fdmprinter.def.json +msgctxt "z_seam_position option front" +msgid "Front" +msgstr "前方" + +#: fdmprinter.def.json +msgctxt "z_seam_position option frontleft" +msgid "Front Left" +msgstr "左前方" + +#: fdmprinter.def.json +msgctxt "z_seam_position option left" +msgid "Left" +msgstr "左方" + #: fdmprinter.def.json msgctxt "z_seam_x label" msgid "Z Seam X" @@ -1297,8 +1357,8 @@ msgstr "接縫偏好設定" #: fdmprinter.def.json msgctxt "z_seam_corner description" -msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." -msgstr "控制接縫是否受模型輪廓上的角影響。'無'表示轉角不影響接縫位置。'隱藏接縫'表示使用盡可能使用凹角做為接縫位置。'暴露接縫'表示盡可能使用凸角做為接縫位置。'隱藏或暴露接縫'則同時使用凹角和凸角做為接縫位置。" +msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner. Smart Hiding allows both inside and outside corners, but chooses inside corners more frequently, if appropriate." +msgstr "控制模型輪廓上的轉角是否影響接縫的位置。「無」表示轉角不影響接縫位置。「隱藏接縫」讓接縫盡量出現在凹角。「暴露接縫」讓接縫盡量出現在凸角。「隱藏或暴露接縫」讓接縫盡量出現在凹角或凸角。「智慧隱藏」允許使用凹角或凸角,但如果狀況合適,會盡可能地選擇凹角。" #: fdmprinter.def.json msgctxt "z_seam_corner option z_seam_corner_none" @@ -1320,6 +1380,11 @@ msgctxt "z_seam_corner option z_seam_corner_any" msgid "Hide or Expose Seam" msgstr "隱藏或暴露接縫" +#: fdmprinter.def.json +msgctxt "z_seam_corner option z_seam_corner_weighted" +msgid "Smart Hiding" +msgstr "智慧隱藏" + #: fdmprinter.def.json msgctxt "z_seam_relative label" msgid "Z Seam Relative" @@ -1332,13 +1397,13 @@ msgstr "啟用時,Z 接縫座標為相對於各個部分中心的值。關閉 #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic label" -msgid "Ignore Small Z Gaps" -msgstr "忽略 Z 方向的小間隙" +msgid "No Skin in Z Gaps" +msgstr "Z 間隙無表層" #: fdmprinter.def.json msgctxt "skin_no_small_gaps_heuristic description" -msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." -msgstr "當模型具有微小的垂直間隙時,為了在這些間隙上產生頂部、底部等表面,會花費大約5%的額外的計算時間。勾選這個項目可以節省時間,但是間隙會消失,若要保留這些間隙,不要勾選這個項目。" +msgid "When the model has small vertical gaps of only a few layers, there should normally be skin around those layers in the narrow space. Enable this setting to not generate skin if the vertical gap is very small. This improves printing time and slicing time, but technically leaves infill exposed to the air." +msgstr "當模型具有僅幾層的小垂直間隙時,通常在那些層周圍的狹窄空間中應該存在表層。如果垂直間隙非常小,啟用此設定會停止自動產生表層。這樣可以縮短列印時間和切片時間,但技術上會使填充暴露出來。" #: fdmprinter.def.json msgctxt "skin_outline_count label" @@ -1357,8 +1422,8 @@ msgstr "啟用燙平" #: fdmprinter.def.json 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 "再一次經過頂部表面,但不擠出耗材。這是為了進一步融化頂部的塑料,打造更平滑的表面。" +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 "噴頭額外跑過上表層一次,但這次擠出的材料非常少。這是為了進一步融化頂部的塑料,創造更平滑的表面。噴頭中的壓力會保持很高,將表面中的細縫中填滿材料。" #: fdmprinter.def.json msgctxt "ironing_only_highest_layer label" @@ -1450,6 +1515,26 @@ msgctxt "jerk_ironing description" msgid "The maximum instantaneous velocity change while performing ironing." msgstr "執行燙平時的最大瞬時速度變化。" +#: fdmprinter.def.json +msgctxt "skin_overlap label" +msgid "Skin Overlap Percentage" +msgstr "表層重疊百分比" + +#: fdmprinter.def.json +msgctxt "skin_overlap description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "以表層線寬和最內壁線寬的百分比,調整內壁和表層中心線(的端點)之間的重疊量。輕微的重疊可以讓牆壁牢固地連接到表層。但要注意在表層和內壁線寬度相等的情形下, 超過 50% 的百分比可能導致表層越過內壁, 因為此時擠出機噴嘴的位置可能已經超過了內壁線條的中間。" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm label" +msgid "Skin Overlap" +msgstr "表層重疊" + +#: fdmprinter.def.json +msgctxt "skin_overlap_mm description" +msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." +msgstr "調整內壁和表層中心線(的端點)之間的重疊量。輕微的重疊可以讓牆壁牢固地連接到表層。但要注意在表層和內壁線寬度相等的情形下, 超過線寬一半的值可能導致表層越過內壁, 因為此時擠出機噴嘴的位置可能已經超過了內壁線條的中間。" + #: fdmprinter.def.json msgctxt "infill label" msgid "Infill" @@ -1615,6 +1700,16 @@ msgctxt "infill_offset_y description" msgid "The infill pattern is moved this distance along the Y axis." msgstr "填充樣式在 Y 軸方向平移此距離。" +#: fdmprinter.def.json +msgctxt "infill_randomize_start_location label" +msgid "Randomize Infill Start" +msgstr "隨機填充起始位置" + +#: 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 "隨機選擇第一條填充線列印。 這可以防止強度集中在某一個部分,但會花費額外的空跑。" + #: fdmprinter.def.json msgctxt "infill_multiplier label" msgid "Infill Line Multiplier" @@ -1669,26 +1764,6 @@ msgctxt "infill_overlap_mm description" msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill." msgstr "填充和牆壁之間的重疊量。稍微重疊可讓各個壁與填充牢固連接。" -#: fdmprinter.def.json -msgctxt "skin_overlap label" -msgid "Skin Overlap Percentage" -msgstr "表層重疊百分比" - -#: fdmprinter.def.json -msgctxt "skin_overlap description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines, as a percentage of the line widths of the skin lines and the innermost wall. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any percentage over 50% may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "以表層線寬和最內壁線寬的百分比,調整內壁和表層中心線(的端點)之間的重疊量。輕微的重疊可以讓牆壁牢固地連接到表層。但要注意在表層和內壁線寬度相等的情形下, 超過 50% 的百分比可能導致表層越過內壁, 因為此時擠出機噴嘴的位置可能已經超過了內壁線條的中間。" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm label" -msgid "Skin Overlap" -msgstr "表層重疊" - -#: fdmprinter.def.json -msgctxt "skin_overlap_mm description" -msgid "Adjust the amount of overlap between the walls and (the endpoints of) the skin-centerlines. A slight overlap allows the walls to connect firmly to the skin. Note that, given an equal skin and wall line-width, any value over half the width of the wall may already cause any skin to go past the wall, because at that point the position of the nozzle of the skin-extruder may already reach past the middle of the wall." -msgstr "調整內壁和表層中心線(的端點)之間的重疊量。輕微的重疊可以讓牆壁牢固地連接到表層。但要注意在表層和內壁線寬度相等的情形下, 超過線寬一半的值可能導致表層越過內壁, 因為此時擠出機噴嘴的位置可能已經超過了內壁線條的中間。" - #: fdmprinter.def.json msgctxt "infill_wipe_dist label" msgid "Infill Wipe Distance" @@ -1872,12 +1947,12 @@ msgstr "用於列印的預設溫度。應為耗材的溫度\"基礎值\"。其 #: fdmprinter.def.json msgctxt "build_volume_temperature label" msgid "Build Volume Temperature" -msgstr "" +msgstr "列印空間溫度" #: fdmprinter.def.json msgctxt "build_volume_temperature description" -msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." -msgstr "" +msgid "The temperature of the environment to print in. If this is 0, the build volume temperature will not be adjusted." +msgstr "列印的環境溫度。如果設為 0,則不會調整列印空間溫度。" #: fdmprinter.def.json msgctxt "material_print_temperature label" @@ -1989,6 +2064,86 @@ msgctxt "material_shrinkage_percentage description" msgid "Shrinkage ratio in percentage." msgstr "收縮率百分比。" +#: fdmprinter.def.json +msgctxt "material_crystallinity label" +msgid "Crystalline Material" +msgstr "晶狀耗材" + +#: fdmprinter.def.json +msgctxt "material_crystallinity description" +msgid "Is this material the type that breaks off cleanly when heated (crystalline), or is it the type that produces long intertwined polymer chains (non-crystalline)?" +msgstr "這種耗材高溫時是脆斷的類型(晶狀),還是拉絲的類型(非晶狀)?" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position label" +msgid "Anti-ooze Retracted Position" +msgstr "防滲漏回抽位置" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retracted_position description" +msgid "How far the material needs to be retracted before it stops oozing." +msgstr "停止滲漏要回抽耗材多長的距離。" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed label" +msgid "Anti-ooze Retraction Speed" +msgstr "防滲漏回抽速度" + +#: fdmprinter.def.json +msgctxt "material_anti_ooze_retraction_speed description" +msgid "How fast the material needs to be retracted during a filament switch to prevent oozing." +msgstr "在耗材切換回抽時,需要多快的速度來防止滲漏。" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position label" +msgid "Break Preparation Retracted Position" +msgstr "回抽切斷前位置" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_retracted_position description" +msgid "How far the filament can be stretched before it breaks, while heated." +msgstr "在加熱時,耗材在脆斷前可以拉伸多長的距離。" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed label" +msgid "Break Preparation Retraction Speed" +msgstr "回抽切斷前速度" + +#: fdmprinter.def.json +msgctxt "material_break_preparation_speed description" +msgid "How fast the filament needs to be retracted just before breaking it off in a retraction." +msgstr "回抽切斷前,耗材回抽的速度。" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position label" +msgid "Break Retracted Position" +msgstr "回抽切斷位置" + +#: fdmprinter.def.json +msgctxt "material_break_retracted_position description" +msgid "How far to retract the filament in order to break it cleanly." +msgstr "要讓耗材脆斷需要回抽長的距離。" + +#: fdmprinter.def.json +msgctxt "material_break_speed label" +msgid "Break Retraction Speed" +msgstr "回抽切斷速度" + +#: fdmprinter.def.json +msgctxt "material_break_speed description" +msgid "The speed at which to retract the filament in order to break it cleanly." +msgstr "要讓耗材脆斷要回抽多快。" + +#: fdmprinter.def.json +msgctxt "material_break_temperature label" +msgid "Break Temperature" +msgstr "切斷溫度" + +#: fdmprinter.def.json +msgctxt "material_break_temperature description" +msgid "The temperature at which the filament is broken for a clean break." +msgstr "要讓耗材脆斷所需的溫度。" + #: fdmprinter.def.json msgctxt "material_flow label" msgid "Flow" @@ -1999,6 +2154,126 @@ msgctxt "material_flow description" msgid "Flow compensation: the amount of material extruded is multiplied by this value." msgstr "流量補償:擠出的耗材量乘以此值。" +#: fdmprinter.def.json +msgctxt "wall_material_flow label" +msgid "Wall Flow" +msgstr "牆壁流量" + +#: fdmprinter.def.json +msgctxt "wall_material_flow description" +msgid "Flow compensation on wall lines." +msgstr "牆壁線條的流量補償。" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow label" +msgid "Outer Wall Flow" +msgstr "外壁流量" + +#: fdmprinter.def.json +msgctxt "wall_0_material_flow description" +msgid "Flow compensation on the outermost wall line." +msgstr "外壁線條的流量補償。" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow label" +msgid "Inner Wall(s) Flow" +msgstr "內壁流量" + +#: fdmprinter.def.json +msgctxt "wall_x_material_flow description" +msgid "Flow compensation on wall lines for all wall lines except the outermost one." +msgstr "最外層牆壁以外的牆壁線條的流量補償。" + +#: fdmprinter.def.json +msgctxt "skin_material_flow label" +msgid "Top/Bottom Flow" +msgstr "頂部/底部流量" + +#: fdmprinter.def.json +msgctxt "skin_material_flow description" +msgid "Flow compensation on top/bottom lines." +msgstr "頂部/底部線條的流量補償。" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow label" +msgid "Top Surface Skin Flow" +msgstr "頂部表層流量" + +#: fdmprinter.def.json +msgctxt "roofing_material_flow description" +msgid "Flow compensation on lines of the areas at the top of the print." +msgstr "頂部區域線條的流量補償。" + +#: fdmprinter.def.json +msgctxt "infill_material_flow label" +msgid "Infill Flow" +msgstr "填充流量" + +#: fdmprinter.def.json +msgctxt "infill_material_flow description" +msgid "Flow compensation on infill lines." +msgstr "填充線條的流量補償。" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow label" +msgid "Skirt/Brim Flow" +msgstr "外圍/邊緣流量" + +#: fdmprinter.def.json +msgctxt "skirt_brim_material_flow description" +msgid "Flow compensation on skirt or brim lines." +msgstr "外圍/邊緣線條的流量補償。" + +#: fdmprinter.def.json +msgctxt "support_material_flow label" +msgid "Support Flow" +msgstr "支撐流量" + +#: fdmprinter.def.json +msgctxt "support_material_flow description" +msgid "Flow compensation on support structure lines." +msgstr "支撐結構線條的流量補償。" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow label" +msgid "Support Interface Flow" +msgstr "支撐介面流量" + +#: fdmprinter.def.json +msgctxt "support_interface_material_flow description" +msgid "Flow compensation on lines of support roof or floor." +msgstr "支撐頂板或底板線條的流量補償。" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow label" +msgid "Support Roof Flow" +msgstr "支撐頂板流量" + +#: fdmprinter.def.json +msgctxt "support_roof_material_flow description" +msgid "Flow compensation on support roof lines." +msgstr "支撐頂板線條的流量補償。" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow label" +msgid "Support Floor Flow" +msgstr "支撐底板流量" + +#: fdmprinter.def.json +msgctxt "support_bottom_material_flow description" +msgid "Flow compensation on support floor lines." +msgstr "支撐底板線條的流量補償。" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow label" +msgid "Prime Tower Flow" +msgstr "換料塔流量" + +#: fdmprinter.def.json +msgctxt "prime_tower_flow description" +msgid "Flow compensation on prime tower lines." +msgstr "換料塔線條的流量補償。" + #: fdmprinter.def.json msgctxt "material_flow_layer_0 label" msgid "Initial Layer Flow" @@ -2116,7 +2391,7 @@ msgstr "限制支撐回抽" #: fdmprinter.def.json msgctxt "limit_support_retractions description" -msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure." msgstr "當從支撐直線移動到另一支撐時,省略回抽。啟用此功能可節省列印時間,但會導致支撐內部有較多的牽絲。" #: fdmprinter.def.json @@ -2169,6 +2444,16 @@ msgctxt "switch_extruder_prime_speed description" msgid "The speed at which the filament is pushed back after a nozzle switch retraction." msgstr "噴頭切換回抽後耗材被推回的速度。" +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount label" +msgid "Nozzle Switch Extra Prime Amount" +msgstr "噴頭切換額外裝填量" + +#: fdmprinter.def.json +msgctxt "switch_extruder_extra_prime_amount description" +msgid "Extra material to prime after nozzle switching." +msgstr "噴頭切換後額外裝填的耗材量。" + #: fdmprinter.def.json msgctxt "speed label" msgid "Speed" @@ -2360,14 +2645,14 @@ msgid "The speed at which the skirt and brim are printed. Normally this is done msgstr "列印外圍和邊緣的速度。一般情况是以起始層速度列印這些部分,但有時候你可能想要以不同速度來列印外圍或邊緣。" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override label" -msgid "Maximum Z Speed" -msgstr "最大 Z 軸速度" +msgctxt "speed_z_hop label" +msgid "Z Hop Speed" +msgstr "Z 抬升速度" #: fdmprinter.def.json -msgctxt "max_feedrate_z_override description" -msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." -msgstr "列印平台移動的最大速度。將該值設為零會使列印為最大 Z 速度採用韌體預設值。" +msgctxt "speed_z_hop description" +msgid "The speed at which the vertical Z movement is made for Z Hops. This is typically lower than the print speed since the build plate or machine's gantry is harder to move." +msgstr "Z 抬升時 Z 軸垂直移動的速度。這通常低於列印速度,因為列印平台或機器的吊車較難移動。" #: fdmprinter.def.json msgctxt "speed_slowdown_layers label" @@ -2869,16 +3154,6 @@ msgctxt "travel_avoid_distance description" msgid "The distance between the nozzle and already printed parts when avoiding during travel moves." msgstr "噴頭和已列印部分之間在空跑時避開的距離。" -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position label" -msgid "Start Layers with the Same Part" -msgstr "在相同的位置列印新層" - -#: fdmprinter.def.json -msgctxt "start_layers_at_same_position description" -msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." -msgstr "每一層都在相同點附近開始列印,這樣在列印新的一層時,就不需要列印前一層結束時的那一小段區域。在突出部分和小零件有良好的效果,但會增加列印時間。" - #: fdmprinter.def.json msgctxt "layer_start_x label" msgid "Layer Start X" @@ -2942,12 +3217,12 @@ msgstr "當機器從一個擠出機切換到另一個時,列印平台會降低 #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height label" msgid "Z Hop After Extruder Switch Height" -msgstr "" +msgstr "擠出機切換後的 Z 抬升高度" #: fdmprinter.def.json msgctxt "retraction_hop_after_extruder_switch_height description" msgid "The height difference when performing a Z Hop after extruder switch." -msgstr "" +msgstr "擠出機切換後進行 Z 抬升的高度差。" #: fdmprinter.def.json msgctxt "cooling label" @@ -3222,7 +3497,7 @@ msgstr "十字形" #: fdmprinter.def.json msgctxt "support_pattern option gyroid" msgid "Gyroid" -msgstr "" +msgstr "螺旋形" #: fdmprinter.def.json msgctxt "support_wall_count label" @@ -3285,14 +3560,14 @@ msgid "Distance between the printed initial layer support structure lines. This msgstr "支撐結構起始層線條之間的距離。該設定通過支撐密度計算。" #: fdmprinter.def.json -msgctxt "support_infill_angle label" -msgid "Support Infill Line Direction" +msgctxt "support_infill_angles label" +msgid "Support Infill Line Directions" msgstr "支撐填充線條方向" #: fdmprinter.def.json -msgctxt "support_infill_angle description" -msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." -msgstr "支撐填充樣式的方向。 支撐填充樣式的旋轉方向是在水平面上旋轉。" +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 "要使用的線條方向清單。清單中的項目隨著列印層增加順序使用,當到達清單的末端時,會再從頭開始。清單項目以逗號分隔,整個清單以中括號括住。預設值為空的清單,表示使用預設角度 0 度。" #: fdmprinter.def.json msgctxt "support_brim_enable label" @@ -3421,8 +3696,8 @@ msgstr "支撐結合距離" #: fdmprinter.def.json msgctxt "support_join_distance description" -msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." -msgstr "支撐結構間在 X/Y 方向的最大距離。當分離結構之間的距離小於此值時,這些結構將合併為一個。" +msgid "The maximum distance between support structures in the X/Y directions. When separate structures are closer together than this value, the structures merge into one." +msgstr "支撐結構間在 X/Y 方向的最大距離。當結構與結構靠近到小於此值時,這些結構將合併為一個。" #: fdmprinter.def.json msgctxt "support_offset label" @@ -3759,6 +4034,36 @@ msgctxt "support_bottom_offset description" msgid "Amount of offset applied to the floors of the support." msgstr "套用到支撐底板多邊形的偏移量。" +#: fdmprinter.def.json +msgctxt "support_interface_angles label" +msgid "Support Interface Line Directions" +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 "要使用的線條方向清單。清單中的項目隨著列印層增加順序使用,當到達清單的末端時,會再從頭開始。清單項目以逗號分隔,整個清單以中括號括住。預設值為空的清單,表示使用預設角度(預設 90 度,若介面較厚則以 45 度和 135 度交替)。" + +#: fdmprinter.def.json +msgctxt "support_roof_angles label" +msgid "Support Roof Line Directions" +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 "要使用的線條方向清單。清單中的項目隨著列印層增加順序使用,當到達清單的末端時,會再從頭開始。清單項目以逗號分隔,整個清單以中括號括住。預設值為空的清單,表示使用預設角度(預設 90 度,若介面較厚則以 45 度和 135 度交替)。" + +#: fdmprinter.def.json +msgctxt "support_bottom_angles label" +msgid "Support Floor Line Directions" +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 "要使用的線條方向清單。清單中的項目隨著列印層增加順序使用,當到達清單的末端時,會再從頭開始。清單項目以逗號分隔,整個清單以中括號括住。預設值為空的清單,表示使用預設角度(預設 90 度,若介面較厚則以 45 度和 135 度交替)。" + #: fdmprinter.def.json msgctxt "support_fan_enable label" msgid "Fan Speed Override" @@ -3800,14 +4105,14 @@ msgid "The diameter of a special tower." msgstr "特殊塔的直徑。" #: fdmprinter.def.json -msgctxt "support_minimal_diameter label" -msgid "Minimum Diameter" -msgstr "最小直徑" +msgctxt "support_tower_maximum_supported_diameter label" +msgid "Maximum Tower-Supported Diameter" +msgstr "最大塔型支撐直徑" #: fdmprinter.def.json -msgctxt "support_minimal_diameter description" -msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." -msgstr "小區域中支撐塔的 X/Y 軸方向最小直徑。" +msgctxt "support_tower_maximum_supported_diameter description" +msgid "Maximum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +msgstr "塔型支撐使用的區域在 X/Y 方向的最大直徑。" #: fdmprinter.def.json msgctxt "support_tower_roof_angle label" @@ -4303,16 +4608,6 @@ msgctxt "prime_tower_enable description" msgid "Print a tower next to the print which serves to prime the material after each nozzle switch." msgstr "在列印件旁邊印一個塔,用在每次切換噴頭後填充耗材。" -#: fdmprinter.def.json -msgctxt "prime_tower_circular label" -msgid "Circular Prime Tower" -msgstr "圓型換料塔" - -#: fdmprinter.def.json -msgctxt "prime_tower_circular description" -msgid "Make the prime tower as a circular shape." -msgstr "將換料塔印成圓型。" - #: fdmprinter.def.json msgctxt "prime_tower_size label" msgid "Prime Tower Size" @@ -4353,16 +4648,6 @@ msgctxt "prime_tower_position_y description" msgid "The y coordinate of the position of the prime tower." msgstr "換料塔位置的 Y 座標。" -#: fdmprinter.def.json -msgctxt "prime_tower_flow label" -msgid "Prime Tower Flow" -msgstr "換料塔流量" - -#: fdmprinter.def.json -msgctxt "prime_tower_flow description" -msgid "Flow compensation: the amount of material extruded is multiplied by this value." -msgstr "流量補償:擠出的耗材量乘以此值。" - #: fdmprinter.def.json msgctxt "prime_tower_wipe_enabled label" msgid "Wipe Inactive Nozzle on Prime Tower" @@ -4376,12 +4661,12 @@ msgstr "在一個噴頭列印換料塔後,在換料塔上擦拭另一個噴頭 #: fdmprinter.def.json msgctxt "prime_tower_brim_enable label" msgid "Prime Tower Brim" -msgstr "" +msgstr "換料塔邊緣" #: fdmprinter.def.json msgctxt "prime_tower_brim_enable description" msgid "Prime-towers might need the extra adhesion afforded by a brim even if the model doesn't. Presently can't be used with the 'Raft' adhesion-type." -msgstr "" +msgstr "即使模型沒有開啟邊緣功能,裝填塔也列印邊緣以提供額外的附著力。目前無法與「木筏」的平台附著類型同時使用。" #: fdmprinter.def.json msgctxt "ooze_shield_enabled label" @@ -4665,7 +4950,7 @@ msgstr "平滑螺旋輪廓" #: fdmprinter.def.json msgctxt "smooth_spiralized_contours description" -msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." msgstr "平滑螺旋輪廓可以減少 Z 縫的出現(Z 縫應在列印品上幾乎看不到,但在分層檢視中仍然可見)。請注意,平滑操作將傾向於模糊精細的表面細節。" #: fdmprinter.def.json @@ -4901,12 +5186,12 @@ msgstr "切片後空跑線段的最小尺寸。如果你增加此設定值,空 #: fdmprinter.def.json msgctxt "meshfix_maximum_deviation label" msgid "Maximum Deviation" -msgstr "" +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." -msgstr "" +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 會較小。最大偏差是最高解析度的限制,所以當兩者衝突時,會以最大偏差成立為優先。" #: fdmprinter.def.json msgctxt "support_skip_some_zags label" @@ -5165,8 +5450,8 @@ msgstr "啟用錐形支撐" #: fdmprinter.def.json msgctxt "support_conical_enabled description" -msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." -msgstr "實驗性功能: 讓底部的支撐區域小於突出部分的支撐區域。" +msgid "Make support areas smaller at the bottom than at the overhang." +msgstr "讓底部的支撐區域小於突出部分的支撐區域。" #: fdmprinter.def.json msgctxt "support_conical_angle label" @@ -5510,17 +5795,17 @@ msgstr "噴頭和水平下行線之間的距離。較大的間隙會讓斜下行 #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled label" msgid "Use Adaptive Layers" -msgstr "" +msgstr "使用適應性層高" #: fdmprinter.def.json msgctxt "adaptive_layer_height_enabled description" msgid "Adaptive layers computes the layer heights depending on the shape of the model." -msgstr "適應層高會依據模型的形狀計算列印的層高。" +msgstr "適應性層高會依據模型的形狀計算列印的層高。" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation label" msgid "Adaptive Layers Maximum Variation" -msgstr "" +msgstr "適應性層高最大變化量" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation description" @@ -5530,7 +5815,7 @@ msgstr "允許與底層高度差異的最大值。" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step label" msgid "Adaptive Layers Variation Step Size" -msgstr "" +msgstr "適應性層高變化幅度" #: fdmprinter.def.json msgctxt "adaptive_layer_height_variation_step description" @@ -5540,7 +5825,7 @@ msgstr "下一列印層與前一列印層的層高差。" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold label" msgid "Adaptive Layers Threshold" -msgstr "" +msgstr "適應性層高門檻值" #: fdmprinter.def.json msgctxt "adaptive_layer_height_threshold description" @@ -5760,152 +6045,192 @@ msgstr "列印橋樑表層第三層時,風扇轉速的百分比。" #: fdmprinter.def.json msgctxt "clean_between_layers label" msgid "Wipe Nozzle Between Layers" -msgstr "" +msgstr "換層時擦拭噴頭" #: fdmprinter.def.json msgctxt "clean_between_layers description" msgid "Whether to include nozzle wipe G-Code between layers. Enabling this setting could influence behavior of retract at layer change. Please use Wipe Retraction settings to control retraction at layers where the wipe script will be working." -msgstr "" +msgstr "是否在層與層之間加入擦拭噴頭的 G-code。啟用此設定會影響換層時的回抽行為。請用「擦拭回抽」設定來控制擦拭時的回抽量。" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe label" msgid "Material Volume Between Wipes" -msgstr "" +msgstr "擦拭耗材體積" #: fdmprinter.def.json msgctxt "max_extrusion_before_wipe description" msgid "Maximum material, that can be extruded before another nozzle wipe is initiated." -msgstr "" +msgstr "在另一次擦拭噴頭前可擠出的最大耗材量。" #: fdmprinter.def.json msgctxt "wipe_retraction_enable label" msgid "Wipe Retraction Enable" -msgstr "" +msgstr "擦拭回抽啟用" #: fdmprinter.def.json msgctxt "wipe_retraction_enable description" msgid "Retract the filament when the nozzle is moving over a non-printed area." -msgstr "" +msgstr "當噴頭移動經過非列印區域時回抽耗材。" #: fdmprinter.def.json msgctxt "wipe_retraction_amount label" msgid "Wipe Retraction Distance" -msgstr "" +msgstr "擦拭回抽距離" #: fdmprinter.def.json msgctxt "wipe_retraction_amount description" msgid "Amount to retract the filament so it does not ooze during the wipe sequence." -msgstr "" +msgstr "回抽耗材的量,使其在擦拭過程中不會滲出。" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount label" msgid "Wipe Retraction Extra Prime Amount" -msgstr "" +msgstr "擦拭回抽額外裝填量" #: fdmprinter.def.json msgctxt "wipe_retraction_extra_prime_amount description" msgid "Some material can ooze away during a wipe travel moves, which can be compensated for here." -msgstr "" +msgstr "有些耗材可能會在擦拭過程中滲出,可以在這裡對其進行補償。" #: fdmprinter.def.json msgctxt "wipe_retraction_speed label" msgid "Wipe Retraction Speed" -msgstr "" +msgstr "擦拭回抽速度" #: fdmprinter.def.json msgctxt "wipe_retraction_speed description" msgid "The speed at which the filament is retracted and primed during a wipe retraction move." -msgstr "" +msgstr "擦拭過程中耗材回抽和裝填的速度。" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed label" msgid "Wipe Retraction Retract Speed" -msgstr "" +msgstr "擦拭回抽回抽速度" #: fdmprinter.def.json msgctxt "wipe_retraction_retract_speed description" msgid "The speed at which the filament is retracted during a wipe retraction move." -msgstr "" +msgstr "擦拭過程中耗材回抽的速度。" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed label" msgid "Retraction Prime Speed" -msgstr "" +msgstr "擦拭回抽裝填速度" #: fdmprinter.def.json msgctxt "wipe_retraction_prime_speed description" msgid "The speed at which the filament is primed during a wipe retraction move." -msgstr "" +msgstr "擦拭過程中耗材裝填的速度。" #: fdmprinter.def.json msgctxt "wipe_pause label" msgid "Wipe Pause" -msgstr "" +msgstr "擦拭暫停" #: fdmprinter.def.json msgctxt "wipe_pause description" msgid "Pause after the unretract." -msgstr "" +msgstr "若無回抽,擦拭後暫停。" #: fdmprinter.def.json msgctxt "wipe_hop_enable label" msgid "Wipe Z Hop When Retracted" -msgstr "" +msgstr "擦拭回抽後 Z 抬升" #: fdmprinter.def.json msgctxt "wipe_hop_enable description" msgid "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." -msgstr "" +msgstr "每當回抽完成時,列印平台會降低以便在噴頭和列印品之間形成空隙。它可以防止噴頭在空跑過程中撞到列印品,降低將列印品從列印平台撞掉的幾率。" #: fdmprinter.def.json msgctxt "wipe_hop_amount label" msgid "Wipe Z Hop Height" -msgstr "" +msgstr "擦拭 Z 抬升高度" #: fdmprinter.def.json msgctxt "wipe_hop_amount description" msgid "The height difference when performing a Z Hop." -msgstr "" +msgstr "執行 Z 抬升的高度差。" #: fdmprinter.def.json msgctxt "wipe_hop_speed label" msgid "Wipe Hop Speed" -msgstr "" +msgstr "擦拭 Z 抬升速度" #: fdmprinter.def.json msgctxt "wipe_hop_speed description" msgid "Speed to move the z-axis during the hop." -msgstr "" +msgstr "抬升時移動 Z 軸的速度。" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x label" msgid "Wipe Brush X Position" -msgstr "" +msgstr "擦拭刷 X 軸位置" #: fdmprinter.def.json msgctxt "wipe_brush_pos_x description" msgid "X location where wipe script will start." -msgstr "" +msgstr "擦拭動作開始的 X 位置。" #: fdmprinter.def.json msgctxt "wipe_repeat_count label" msgid "Wipe Repeat Count" -msgstr "" +msgstr "擦拭重覆次數" #: fdmprinter.def.json msgctxt "wipe_repeat_count description" msgid "Number of times to move the nozzle across the brush." -msgstr "" +msgstr "將噴頭移動經過刷子的次數。" #: fdmprinter.def.json msgctxt "wipe_move_distance label" msgid "Wipe Move Distance" -msgstr "" +msgstr "擦拭移動距離" #: fdmprinter.def.json msgctxt "wipe_move_distance description" msgid "The distance to move the head back and forth across the brush." -msgstr "" +msgstr "將噴頭來回移動經過刷子的距離。" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size label" +msgid "Small Hole Max Size" +msgstr "細部模式最大直徑" + +#: fdmprinter.def.json +msgctxt "small_hole_max_size description" +msgid "Holes and part outlines with a diameter smaller than this will be printed using Small Feature Speed." +msgstr "小於此直徑的孔洞和零件輪廓,使用細部模式速度列印。" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length label" +msgid "Small Feature Max Length" +msgstr "細部模式最大長度" + +#: fdmprinter.def.json +msgctxt "small_feature_max_length description" +msgid "Feature outlines that are shorter than this length will be printed using Small Feature Speed." +msgstr "輪廓長度小於此值時,使用細部模式速度列印。" + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor label" +msgid "Small Feature Speed" +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 "細部模式將以正常列印速度的此百分比值列印。 較慢的列印有助於黏合和精度。" + +#: fdmprinter.def.json +msgctxt "small_feature_speed_factor_0 label" +msgid "First 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 "細部模式第一層將以正常列印速度的此百分比值列印。 較慢的列印有助於黏合和精度。" #: fdmprinter.def.json msgctxt "command_line_settings label" @@ -5967,6 +6292,90 @@ msgctxt "mesh_rotation_matrix description" msgid "Transformation matrix to be applied to the model when loading it from file." 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 "再一次經過頂部表面,但不擠出耗材。這是為了進一步融化頂部的塑料,打造更平滑的表面。" + +#~ msgctxt "start_layers_at_same_position label" +#~ msgid "Start Layers with the Same Part" +#~ msgstr "在相同的位置列印新層" + +#~ msgctxt "start_layers_at_same_position description" +#~ msgid "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time." +#~ msgstr "每一層都在相同點附近開始列印,這樣在列印新的一層時,就不需要列印前一層結束時的那一小段區域。在突出部分和小零件有良好的效果,但會增加列印時間。" + +#~ msgctxt "support_infill_angles description" +#~ msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane." +#~ msgstr "支撐填充樣式的方向。 支撐填充樣式的旋轉方向是在水平面上旋轉。" + +#~ 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." +#~ msgstr "「最高解析度」設定在降低解析度時允許的最大偏差。如果增加此值,列印精度會較差但 G-code 會較小。" + +#~ msgctxt "machine_gcode_flavor label" +#~ msgid "G-code Flavour" +#~ msgstr "G-code 類型" + +#~ msgctxt "z_seam_corner description" +#~ msgid "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner." +#~ msgstr "控制接縫是否受模型輪廓上的角影響。'無'表示轉角不影響接縫位置。'隱藏接縫'表示使用盡可能使用凹角做為接縫位置。'暴露接縫'表示盡可能使用凸角做為接縫位置。'隱藏或暴露接縫'則同時使用凹角和凸角做為接縫位置。" + +#~ msgctxt "skin_no_small_gaps_heuristic label" +#~ msgid "Ignore Small Z Gaps" +#~ msgstr "忽略 Z 方向的小間隙" + +#~ msgctxt "skin_no_small_gaps_heuristic description" +#~ msgid "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting." +#~ msgstr "當模型具有微小的垂直間隙時,為了在這些間隙上產生頂部、底部等表面,會花費大約5%的額外的計算時間。勾選這個項目可以節省時間,但是間隙會消失,若要保留這些間隙,不要勾選這個項目。" + +#~ msgctxt "build_volume_temperature description" +#~ msgid "The temperature used for build volume. If this is 0, the build volume temperature will not be adjusted." +#~ msgstr "設定列印空間的溫度。如果設定為 0,就不會加熱列印空間。" + +#~ msgctxt "limit_support_retractions description" +#~ msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure." +#~ msgstr "當從支撐直線移動到另一支撐時,省略回抽。啟用此功能可節省列印時間,但會導致支撐內部有較多的牽絲。" + +#~ msgctxt "max_feedrate_z_override label" +#~ msgid "Maximum Z Speed" +#~ msgstr "最大 Z 軸速度" + +#~ msgctxt "max_feedrate_z_override description" +#~ msgid "The maximum speed with which the build plate is moved. Setting this to zero causes the print to use the firmware defaults for the maximum z speed." +#~ msgstr "列印平台移動的最大速度。將該值設為零會使列印為最大 Z 速度採用韌體預設值。" + +#~ msgctxt "support_join_distance description" +#~ msgid "The maximum distance between support structures in the X/Y directions. When seperate structures are closer together than this value, the structures merge into one." +#~ msgstr "支撐結構間在 X/Y 方向的最大距離。當分離結構之間的距離小於此值時,這些結構將合併為一個。" + +#~ msgctxt "support_minimal_diameter label" +#~ msgid "Minimum Diameter" +#~ msgstr "最小直徑" + +#~ msgctxt "support_minimal_diameter description" +#~ msgid "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower." +#~ msgstr "小區域中支撐塔的 X/Y 軸方向最小直徑。" + +#~ msgctxt "prime_tower_circular label" +#~ msgid "Circular Prime Tower" +#~ msgstr "圓型換料塔" + +#~ msgctxt "prime_tower_circular description" +#~ msgid "Make the prime tower as a circular shape." +#~ msgstr "將換料塔印成圓型。" + +#~ msgctxt "prime_tower_flow description" +#~ msgid "Flow compensation: the amount of material extruded is multiplied by this value." +#~ msgstr "流量補償:擠出的耗材量乘以此值。" + +#~ msgctxt "smooth_spiralized_contours description" +#~ msgid "Smooth the spiralized contours to reduce the visibility of the Z seam (the Z-seam should be barely visible on the print but will still be visible in the layer view). Note that smoothing will tend to blur fine surface details." +#~ msgstr "平滑螺旋輪廓可以減少 Z 縫的出現(Z 縫應在列印品上幾乎看不到,但在分層檢視中仍然可見)。請注意,平滑操作將傾向於模糊精細的表面細節。" + +#~ msgctxt "support_conical_enabled description" +#~ msgid "Experimental feature: Make support areas smaller at the bottom than at the overhang." +#~ msgstr "實驗性功能: 讓底部的支撐區域小於突出部分的支撐區域。" + #~ msgctxt "extruders_enabled_count label" #~ msgid "Number of Extruders that are enabled" #~ msgstr "已啟用擠出機的數量" diff --git a/resources/images/UltimakerS3backplate.png b/resources/images/UltimakerS3backplate.png new file mode 100644 index 0000000000..60897a30ec Binary files /dev/null and b/resources/images/UltimakerS3backplate.png differ diff --git a/resources/images/hellbot.png b/resources/images/hellbot.png new file mode 100644 index 0000000000..e39ac419dc Binary files /dev/null and b/resources/images/hellbot.png differ diff --git a/resources/intent/um_s5_aa0.4_ABS_Draft_Print_Quick.inst.cfg b/resources/intent/um_s5_aa0.4_ABS_Draft_Print_Quick.inst.cfg new file mode 100644 index 0000000000..f627fbf74b --- /dev/null +++ b/resources/intent/um_s5_aa0.4_ABS_Draft_Print_Quick.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Quick +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +intent_category = smooth +quality_type = draft +material = generic_abs +variant = AA 0.4 + +[values] +speed_infill = =speed_print +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +speed_layer_0 = 20 +top_bottom_thickness = =wall_thickness +wall_thickness = =line_width * 2 +fill_perimeter_gaps = nowhere +infill_sparse_density = 15 +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +wall_line_width_x = =line_width diff --git a/resources/intent/um_s5_aa0.4_ABS_Fast_Print_Accurate.inst.cfg b/resources/intent/um_s5_aa0.4_ABS_Fast_Print_Accurate.inst.cfg new file mode 100644 index 0000000000..be622d6cfe --- /dev/null +++ b/resources/intent/um_s5_aa0.4_ABS_Fast_Print_Accurate.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Accurate +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +intent_category = engineering +quality_type = fast +material = generic_abs +variant = AA 0.4 + +[values] +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = 20 +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +top_bottom_thickness = =wall_thickness +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 +xy_offset = =- layer_height * 0.2 diff --git a/resources/intent/um_s5_aa0.4_ABS_Normal_Quality_Accurate.inst.cfg b/resources/intent/um_s5_aa0.4_ABS_Normal_Quality_Accurate.inst.cfg new file mode 100644 index 0000000000..352c26d312 --- /dev/null +++ b/resources/intent/um_s5_aa0.4_ABS_Normal_Quality_Accurate.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Accurate +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +intent_category = engineering +quality_type = normal +material = generic_abs +variant = AA 0.4 + +[values] +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = 20 +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +top_bottom_thickness = =wall_thickness +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 +xy_offset = =- layer_height * 0.2 diff --git a/resources/intent/um_s5_aa0.4_PLA_Draft_Print_Quick.inst.cfg b/resources/intent/um_s5_aa0.4_PLA_Draft_Print_Quick.inst.cfg new file mode 100644 index 0000000000..553a68201d --- /dev/null +++ b/resources/intent/um_s5_aa0.4_PLA_Draft_Print_Quick.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Quick +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +intent_category = smooth +quality_type = draft +material = generic_pla +variant = AA 0.4 + +[values] +speed_infill = =speed_print +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +speed_layer_0 = 20 +top_bottom_thickness = =wall_thickness +wall_thickness = =line_width * 2 +fill_perimeter_gaps = nowhere +infill_sparse_density = 15 +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +wall_line_width_x = =line_width diff --git a/resources/intent/um_s5_aa0.4_PLA_Fast_Print_Accurate.inst.cfg b/resources/intent/um_s5_aa0.4_PLA_Fast_Print_Accurate.inst.cfg new file mode 100644 index 0000000000..0943bb2032 --- /dev/null +++ b/resources/intent/um_s5_aa0.4_PLA_Fast_Print_Accurate.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Accurate +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +intent_category = engineering +quality_type = fast +material = generic_pla +variant = AA 0.4 + +[values] +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = 20 +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +top_bottom_thickness = =wall_thickness +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 +xy_offset = =- layer_height * 0.2 diff --git a/resources/intent/um_s5_aa0.4_PLA_Normal_Quality_Accurate.inst.cfg b/resources/intent/um_s5_aa0.4_PLA_Normal_Quality_Accurate.inst.cfg new file mode 100644 index 0000000000..053b849aff --- /dev/null +++ b/resources/intent/um_s5_aa0.4_PLA_Normal_Quality_Accurate.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Accurate +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +intent_category = engineering +quality_type = normal +material = generic_pla +variant = AA 0.4 + +[values] +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = 20 +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +top_bottom_thickness = =wall_thickness +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 +xy_offset = =- layer_height * 0.2 diff --git a/resources/intent/um_s5_aa0.4_TPLA_Draft_Print_Quick.inst.cfg b/resources/intent/um_s5_aa0.4_TPLA_Draft_Print_Quick.inst.cfg new file mode 100644 index 0000000000..458b283dd8 --- /dev/null +++ b/resources/intent/um_s5_aa0.4_TPLA_Draft_Print_Quick.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Quick +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +intent_category = smooth +quality_type = draft +material = generic_tough_pla +variant = AA 0.4 + +[values] +speed_infill = =speed_print +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +speed_layer_0 = 20 +top_bottom_thickness = =wall_thickness +wall_thickness = =line_width * 2 +fill_perimeter_gaps = nowhere +infill_sparse_density = 15 +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +wall_line_width_x = =line_width diff --git a/resources/intent/um_s5_aa0.4_TPLA_Fast_Print_Accurate.inst.cfg b/resources/intent/um_s5_aa0.4_TPLA_Fast_Print_Accurate.inst.cfg new file mode 100644 index 0000000000..d19ad53fae --- /dev/null +++ b/resources/intent/um_s5_aa0.4_TPLA_Fast_Print_Accurate.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Accurate +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +intent_category = engineering +quality_type = fast +material = generic_tough_pla +variant = AA 0.4 + +[values] +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = 20 +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +top_bottom_thickness = =wall_thickness +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 +xy_offset = =- layer_height * 0.2 diff --git a/resources/intent/um_s5_aa0.4_TPLA_Normal_Quality_Accurate.inst.cfg b/resources/intent/um_s5_aa0.4_TPLA_Normal_Quality_Accurate.inst.cfg new file mode 100644 index 0000000000..23d8b1e39b --- /dev/null +++ b/resources/intent/um_s5_aa0.4_TPLA_Normal_Quality_Accurate.inst.cfg @@ -0,0 +1,34 @@ +[general] +version = 4 +name = Accurate +definition = ultimaker_s5 + +[metadata] +setting_version = 10 +type = intent +intent_category = engineering +quality_type = normal +material = generic_tough_pla +variant = AA 0.4 + +[values] +infill_line_width = =line_width +jerk_print = 30 +jerk_infill = =jerk_print +jerk_topbottom = =jerk_print +jerk_wall = =jerk_print +jerk_wall_0 = =jerk_wall +jerk_wall_x = =jerk_wall +jerk_layer_0 = 5 +line_width = =machine_nozzle_size +speed_print = 30 +speed_infill = =speed_print +speed_layer_0 = 20 +speed_topbottom = =speed_print +speed_wall = =speed_print +speed_wall_0 = =speed_wall +speed_wall_x = =speed_wall +top_bottom_thickness = =wall_thickness +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 +xy_offset = =- layer_height * 0.2 diff --git a/resources/meshes/FelixPro2_platform.obj b/resources/meshes/FelixPro2_platform.obj new file mode 100644 index 0000000000..1d13cdd904 --- /dev/null +++ b/resources/meshes/FelixPro2_platform.obj @@ -0,0 +1,4485 @@ +# Blender v2.79 (sub 0) OBJ File: 'FelixPro2_platform.blend' +# www.blender.org +o Body1 +v 177.244446 31.941147 -22.999994 +v 177.244446 31.941143 -4.999995 +v 177.500000 30.000004 -22.999994 +v 177.500000 30.000000 -4.999995 +v 177.244446 28.058861 -22.999996 +v 177.244446 28.058857 -4.999995 +v 176.495193 26.250004 -22.999996 +v 176.495193 26.250000 -4.999996 +v 175.303299 24.696703 -22.999996 +v 175.303299 24.696699 -4.999996 +v 173.750000 23.504812 -22.999996 +v 173.750000 23.504808 -4.999996 +v 171.941147 22.755560 -22.999996 +v 171.941147 22.755556 -4.999996 +v 170.000000 22.500004 -22.999996 +v 170.000000 22.500000 -4.999996 +v 168.058853 22.755560 -22.999996 +v 168.058853 22.755556 -4.999996 +v 166.250000 23.504812 -22.999996 +v 166.250000 23.504808 -4.999996 +v 164.696701 24.696703 -22.999996 +v 164.696701 24.696699 -4.999996 +v 163.504807 26.250004 -22.999996 +v 163.504807 26.250000 -4.999996 +v 162.755554 28.058861 -22.999996 +v 162.755554 28.058857 -4.999995 +v 162.500000 30.000004 -22.999994 +v 162.500000 30.000000 -4.999995 +v 162.755554 31.941147 -22.999994 +v 162.755554 31.941143 -4.999995 +v 163.504807 33.750004 -22.999994 +v 163.504807 33.750000 -4.999994 +v 164.696701 35.303307 -22.999994 +v 164.696701 35.303303 -4.999994 +v 166.250000 36.495193 -22.999994 +v 166.250000 36.495190 -4.999994 +v 168.058853 37.244450 -22.999994 +v 168.058853 37.244446 -4.999994 +v 170.000000 37.500004 -22.999994 +v 170.000000 37.500000 -4.999994 +v 171.941147 37.244450 -22.999994 +v 171.941147 37.244446 -4.999994 +v 173.750000 36.495193 -22.999994 +v 173.750000 36.495190 -4.999994 +v 175.303299 35.303307 -22.999994 +v 175.303299 35.303303 -4.999994 +v 176.495193 33.750004 -22.999994 +v 176.495193 33.750000 -4.999994 +v 97.424881 121.941139 -22.999981 +v 97.424881 121.941139 -4.999980 +v 97.680435 120.000000 -22.999981 +v 97.680435 120.000000 -4.999980 +v 97.424881 118.058861 -22.999981 +v 97.424881 118.058861 -4.999981 +v 96.675629 116.250000 -22.999981 +v 96.675629 116.250000 -4.999981 +v 95.483734 114.696701 -22.999981 +v 95.483734 114.696701 -4.999981 +v 93.930435 113.504807 -22.999981 +v 93.930435 113.504807 -4.999981 +v 92.121582 112.755554 -22.999981 +v 92.121582 112.755554 -4.999981 +v 90.180435 112.500000 -22.999981 +v 90.180435 112.500000 -4.999982 +v 88.239296 112.755554 -22.999981 +v 88.239296 112.755554 -4.999981 +v 86.430435 113.504807 -22.999981 +v 86.430435 113.504807 -4.999981 +v 84.877136 114.696701 -22.999981 +v 84.877136 114.696701 -4.999981 +v 83.685249 116.250000 -22.999981 +v 83.685249 116.250000 -4.999981 +v 82.935989 118.058861 -22.999981 +v 82.935989 118.058861 -4.999981 +v 82.680435 120.000000 -22.999981 +v 82.680435 120.000000 -4.999980 +v 82.935989 121.941139 -22.999981 +v 82.935989 121.941139 -4.999980 +v 83.685249 123.750000 -22.999979 +v 83.685249 123.750000 -4.999980 +v 84.877136 125.303299 -22.999979 +v 84.877136 125.303299 -4.999979 +v 86.430435 126.495193 -22.999979 +v 86.430435 126.495193 -4.999979 +v 88.239296 127.244446 -22.999979 +v 88.239296 127.244446 -4.999979 +v 90.180435 127.500000 -22.999979 +v 90.180435 127.500000 -4.999979 +v 92.121582 127.244446 -22.999979 +v 92.121582 127.244446 -4.999979 +v 93.930435 126.495193 -22.999979 +v 93.930435 126.495193 -4.999979 +v 95.483734 125.303299 -22.999979 +v 95.483734 125.303299 -4.999979 +v 96.675629 123.750000 -22.999979 +v 96.675629 123.750000 -4.999980 +v 180.000000 20.000004 -22.999996 +v 160.000000 20.000004 -22.999996 +v 160.000000 49.896946 -22.999992 +v 105.938271 109.965530 -22.999983 +v 160.000000 190.103058 -22.999969 +v 173.750000 203.504807 -22.999968 +v 171.941147 202.755554 -22.999968 +v 175.303299 204.696701 -22.999968 +v 176.495193 206.250000 -22.999966 +v 177.244446 208.058853 -22.999966 +v 180.000000 220.000000 -22.999964 +v 102.087685 120.000000 -22.999981 +v 102.532974 116.372253 -22.999981 +v 103.842422 112.959900 -22.999981 +v 79.031021 109.965530 -22.999983 +v 76.935173 112.959900 -22.999981 +v 75.625732 116.372253 -22.999981 +v 75.180435 120.000000 -22.999981 +v 75.625732 123.627747 -22.999979 +v 76.935173 127.040100 -22.999979 +v 79.031021 130.034470 -22.999979 +v 105.938271 130.034470 -22.999979 +v 160.000000 220.000000 -22.999964 +v 103.842422 127.040100 -22.999979 +v 102.532974 123.627747 -22.999979 +v 162.500000 210.000000 -22.999966 +v 162.755554 211.941147 -22.999966 +v 170.000000 217.500000 -22.999964 +v 171.941147 217.244446 -22.999964 +v 173.750000 216.495193 -22.999966 +v 177.244446 211.941147 -22.999966 +v 177.500000 210.000000 -22.999966 +v 170.000000 202.500000 -22.999968 +v 168.058853 202.755554 -22.999968 +v 166.250000 203.504807 -22.999968 +v 164.696701 204.696701 -22.999968 +v 163.504807 206.250000 -22.999966 +v 162.755554 208.058853 -22.999966 +v 163.504807 213.750000 -22.999966 +v 164.696701 215.303299 -22.999966 +v 166.250000 216.495193 -22.999966 +v 168.058853 217.244446 -22.999964 +v 175.303299 215.303299 -22.999966 +v 176.495193 213.750000 -22.999966 +v 160.000000 220.000000 -29.999964 +v 134.000000 220.000000 -29.999964 +v 160.017288 220.019211 -30.195053 +v 134.000000 220.034073 -30.258783 +v 160.068512 220.076126 -30.382647 +v 134.000000 220.133972 -30.499964 +v 160.151672 220.168533 -30.555534 +v 134.000000 220.292892 -30.707071 +v 160.263611 220.292892 -30.707071 +v 160.399994 220.444427 -30.831434 +v 134.000000 220.500000 -30.865990 +v 160.555588 220.617310 -30.923843 +v 134.000000 220.741180 -30.965889 +v 160.724426 220.804916 -30.980749 +v 134.000000 221.000000 -30.999964 +v 160.899994 221.000000 -30.999964 +v 125.000000 229.000000 -29.999962 +v 125.034073 229.000000 -30.258781 +v 125.306671 226.670624 -29.999964 +v 125.339584 226.679443 -30.258783 +v 126.205772 224.500000 -29.999964 +v 126.235283 224.517044 -30.258783 +v 127.636040 222.636032 -29.999964 +v 127.660133 222.660126 -30.258783 +v 129.500000 221.205765 -29.999964 +v 129.517044 221.235275 -30.258783 +v 131.670624 220.306671 -29.999964 +v 131.679443 220.339584 -30.258783 +v 131.705307 220.436081 -30.499964 +v 131.746429 220.589584 -30.707071 +v 131.800034 220.789627 -30.865990 +v 131.862457 221.022598 -30.965889 +v 131.929443 221.272598 -30.999964 +v 125.133972 229.000000 -30.499962 +v 125.436073 226.705307 -30.499964 +v 126.321800 224.566986 -30.499964 +v 127.730774 222.730774 -30.499964 +v 129.566986 221.321793 -30.499964 +v 125.292892 229.000000 -30.707069 +v 125.589584 226.746429 -30.707071 +v 126.459427 224.646454 -30.707071 +v 127.843147 222.843140 -30.707071 +v 129.646454 221.459427 -30.707071 +v 125.500000 229.000000 -30.865988 +v 125.789627 226.800034 -30.865990 +v 126.638786 224.750000 -30.865990 +v 127.989594 222.989594 -30.865990 +v 129.750000 221.638779 -30.865990 +v 125.741180 229.000000 -30.965887 +v 126.022591 226.862457 -30.965889 +v 126.847656 224.870590 -30.965889 +v 128.160126 223.160126 -30.965889 +v 129.870590 221.847656 -30.965889 +v 126.000000 229.000000 -30.999962 +v 126.272591 226.929443 -30.999964 +v 127.071800 225.000000 -30.999964 +v 128.343140 223.343140 -30.999964 +v 130.000000 222.071793 -30.999964 +v 125.000000 251.000000 -29.999960 +v 125.034073 251.000000 -30.258780 +v 125.133972 251.000000 -30.499960 +v 125.292892 251.000000 -30.707067 +v 125.500000 251.000000 -30.865986 +v 125.741180 251.000000 -30.965885 +v 126.000000 251.000000 -30.999960 +v 134.000000 260.000000 -29.999958 +v 134.000000 259.965912 -30.258778 +v 131.670624 259.693329 -29.999958 +v 131.679443 259.660431 -30.258778 +v 129.500000 258.794220 -29.999958 +v 129.517044 258.764709 -30.258778 +v 127.636040 257.363953 -29.999958 +v 127.660133 257.339874 -30.258778 +v 126.205772 255.500000 -29.999958 +v 126.235283 255.482956 -30.258778 +v 125.306671 253.329376 -29.999958 +v 125.339584 253.320557 -30.258778 +v 125.436073 253.294693 -30.499958 +v 125.589584 253.253571 -30.707066 +v 125.789627 253.199966 -30.865984 +v 126.022591 253.137543 -30.965883 +v 126.272591 253.070557 -30.999958 +v 134.000000 259.866028 -30.499958 +v 131.705307 259.563934 -30.499958 +v 129.566986 258.678192 -30.499958 +v 127.730774 257.269226 -30.499958 +v 126.321800 255.433014 -30.499958 +v 134.000000 259.707092 -30.707066 +v 131.746429 259.410431 -30.707066 +v 129.646454 258.540588 -30.707066 +v 127.843147 257.156860 -30.707066 +v 126.459427 255.353546 -30.707066 +v 134.000000 259.500000 -30.865984 +v 131.800034 259.210358 -30.865984 +v 129.750000 258.361206 -30.865984 +v 127.989594 257.010406 -30.865984 +v 126.638786 255.250000 -30.865984 +v 134.000000 259.258820 -30.965883 +v 131.862457 258.977417 -30.965883 +v 129.870590 258.152344 -30.965883 +v 128.160126 256.839874 -30.965883 +v 126.847656 255.129410 -30.965883 +v 134.000000 259.000000 -30.999958 +v 131.929443 258.727417 -30.999958 +v 130.000000 257.928192 -30.999958 +v 128.343140 256.656860 -30.999958 +v 127.071800 255.000000 -30.999958 +v 186.000000 260.000000 -29.999958 +v 186.000000 259.965912 -30.258778 +v 186.000000 259.866028 -30.499958 +v 186.000000 259.707092 -30.707066 +v 186.000000 259.500000 -30.865984 +v 186.000000 259.258820 -30.965883 +v 186.000000 259.000000 -30.999958 +v 195.000000 251.000000 -29.999960 +v 194.965927 251.000000 -30.258780 +v 194.693329 253.329376 -29.999958 +v 194.660416 253.320557 -30.258778 +v 193.794235 255.500000 -29.999958 +v 193.764725 255.482956 -30.258778 +v 192.363968 257.363953 -29.999958 +v 192.339874 257.339874 -30.258778 +v 190.500000 258.794220 -29.999958 +v 190.482956 258.764709 -30.258778 +v 188.329376 259.693329 -29.999958 +v 188.320557 259.660431 -30.258778 +v 188.294693 259.563934 -30.499958 +v 188.253571 259.410431 -30.707066 +v 188.199966 259.210358 -30.865984 +v 188.137543 258.977417 -30.965883 +v 188.070557 258.727417 -30.999958 +v 194.866028 251.000000 -30.499960 +v 194.563919 253.294693 -30.499958 +v 193.678207 255.433014 -30.499958 +v 192.269226 257.269226 -30.499958 +v 190.433014 258.678192 -30.499958 +v 194.707108 251.000000 -30.707067 +v 194.410416 253.253571 -30.707066 +v 193.540573 255.353546 -30.707066 +v 192.156860 257.156860 -30.707066 +v 190.353546 258.540588 -30.707066 +v 194.500000 251.000000 -30.865986 +v 194.210373 253.199966 -30.865984 +v 193.361221 255.250000 -30.865984 +v 192.010406 257.010406 -30.865984 +v 190.250000 258.361206 -30.865984 +v 194.258820 251.000000 -30.965885 +v 193.977402 253.137543 -30.965883 +v 193.152344 255.129410 -30.965883 +v 191.839874 256.839874 -30.965883 +v 190.129410 258.152344 -30.965883 +v 194.000000 251.000000 -30.999960 +v 193.727402 253.070557 -30.999958 +v 192.928207 255.000000 -30.999958 +v 191.656860 256.656860 -30.999958 +v 190.000000 257.928192 -30.999958 +v 195.000000 229.000000 -29.999962 +v 194.965927 229.000000 -30.258781 +v 194.866028 229.000000 -30.499962 +v 194.707108 229.000000 -30.707069 +v 194.500000 229.000000 -30.865988 +v 194.258820 229.000000 -30.965887 +v 194.000000 229.000000 -30.999962 +v 186.000000 220.000000 -29.999964 +v 186.000000 220.034073 -30.258783 +v 188.329376 220.306671 -29.999964 +v 188.320557 220.339584 -30.258783 +v 190.500000 221.205765 -29.999964 +v 190.482956 221.235275 -30.258783 +v 192.363968 222.636032 -29.999964 +v 192.339874 222.660126 -30.258783 +v 193.794235 224.500000 -29.999964 +v 193.764725 224.517044 -30.258783 +v 194.693329 226.670624 -29.999964 +v 194.660416 226.679443 -30.258783 +v 194.563919 226.705307 -30.499964 +v 194.410416 226.746429 -30.707071 +v 194.210373 226.800034 -30.865990 +v 193.977402 226.862457 -30.965889 +v 193.727402 226.929443 -30.999964 +v 186.000000 220.133972 -30.499964 +v 188.294693 220.436081 -30.499964 +v 190.433014 221.321793 -30.499964 +v 192.269226 222.730774 -30.499964 +v 193.678207 224.566986 -30.499964 +v 186.000000 220.292892 -30.707071 +v 188.253571 220.589584 -30.707071 +v 190.353546 221.459427 -30.707071 +v 192.156860 222.843140 -30.707071 +v 193.540573 224.646454 -30.707071 +v 186.000000 220.500000 -30.865990 +v 188.199966 220.789627 -30.865990 +v 190.250000 221.638779 -30.865990 +v 192.010406 222.989594 -30.865990 +v 193.361221 224.750000 -30.865990 +v 186.000000 220.741180 -30.965889 +v 188.137543 221.022598 -30.965889 +v 190.129410 221.847656 -30.965889 +v 191.839874 223.160126 -30.965889 +v 193.152344 224.870590 -30.965889 +v 186.000000 221.000000 -30.999964 +v 188.070557 221.272598 -30.999964 +v 190.000000 222.071793 -30.999964 +v 191.656860 223.343140 -30.999964 +v 192.928207 225.000000 -30.999964 +v 180.000000 220.000000 -29.999964 +v 180.000000 220.034073 -30.258783 +v 180.000000 220.133972 -30.499964 +v 180.000000 220.292892 -30.707071 +v 180.000000 220.500000 -30.865990 +v 180.000000 220.741180 -30.965889 +v 180.000000 221.000000 -30.999964 +v 186.000000 220.000000 -13.999964 +v 188.329376 220.306671 -13.999964 +v 190.500000 221.205765 -13.999964 +v 192.363968 222.636032 -13.999964 +v 193.794235 224.500000 -13.999964 +v 194.693329 226.670624 -13.999963 +v 195.000000 229.000000 -13.999963 +v 195.000000 251.000000 -13.999959 +v 194.693329 253.329376 -13.999959 +v 193.794235 255.500000 -13.999958 +v 192.363968 257.363953 -13.999958 +v 190.500000 258.794220 -13.999958 +v 188.329376 259.693329 -13.999958 +v 186.000000 260.000000 -13.999958 +v 134.000000 260.000000 -13.999958 +v 131.670624 259.693329 -13.999958 +v 129.500000 258.794220 -13.999958 +v 127.636040 257.363953 -13.999958 +v 126.205772 255.500000 -13.999958 +v 125.306671 253.329376 -13.999959 +v 125.000000 251.000000 -13.999959 +v 125.000000 229.000000 -13.999963 +v 125.306671 226.670624 -13.999963 +v 126.205772 224.500000 -13.999964 +v 127.636040 222.636032 -13.999964 +v 129.500000 221.205765 -13.999964 +v 131.670624 220.306671 -13.999964 +v 134.000000 220.000000 -13.999964 +v 194.000000 251.000000 -12.999959 +v 194.000000 229.000000 -12.999963 +v 194.258820 251.000000 -13.034033 +v 194.258820 229.000000 -13.034037 +v 194.500000 251.000000 -13.133934 +v 194.500000 229.000000 -13.133938 +v 194.707108 251.000000 -13.292852 +v 194.707108 229.000000 -13.292856 +v 194.866028 251.000000 -13.499959 +v 194.866028 229.000000 -13.499963 +v 194.965927 251.000000 -13.741140 +v 194.965927 229.000000 -13.741144 +v 186.000000 259.965912 -13.741139 +v 188.320557 259.660431 -13.741139 +v 190.482956 258.764709 -13.741139 +v 192.339874 257.339874 -13.741139 +v 193.764725 255.482956 -13.741139 +v 194.660416 253.320557 -13.741140 +v 194.563919 253.294693 -13.499959 +v 194.410416 253.253571 -13.292852 +v 194.210373 253.199966 -13.133934 +v 193.977402 253.137543 -13.034033 +v 193.727402 253.070557 -12.999959 +v 186.000000 259.866028 -13.499958 +v 188.294693 259.563934 -13.499958 +v 190.433014 258.678192 -13.499958 +v 192.269226 257.269226 -13.499958 +v 193.678207 255.433014 -13.499958 +v 186.000000 259.707092 -13.292851 +v 188.253571 259.410431 -13.292851 +v 190.353546 258.540588 -13.292851 +v 192.156860 257.156860 -13.292851 +v 193.540573 255.353546 -13.292851 +v 186.000000 259.500000 -13.133933 +v 188.199966 259.210358 -13.133933 +v 190.250000 258.361206 -13.133933 +v 192.010406 257.010406 -13.133933 +v 193.361221 255.250000 -13.133933 +v 186.000000 259.258820 -13.034032 +v 188.137543 258.977417 -13.034032 +v 190.129410 258.152344 -13.034032 +v 191.839874 256.839874 -13.034032 +v 193.152344 255.129410 -13.034032 +v 186.000000 259.000000 -12.999958 +v 188.070557 258.727417 -12.999958 +v 190.000000 257.928192 -12.999958 +v 191.656860 256.656860 -12.999958 +v 192.928207 255.000000 -12.999958 +v 134.000000 259.965912 -13.741139 +v 134.000000 259.866028 -13.499958 +v 134.000000 259.707092 -13.292851 +v 134.000000 259.500000 -13.133933 +v 134.000000 259.258820 -13.034032 +v 134.000000 259.000000 -12.999958 +v 125.034073 251.000000 -13.741140 +v 125.339584 253.320557 -13.741140 +v 126.235283 255.482956 -13.741139 +v 127.660133 257.339874 -13.741139 +v 129.517044 258.764709 -13.741139 +v 131.679443 259.660431 -13.741139 +v 131.705307 259.563934 -13.499958 +v 131.746429 259.410431 -13.292851 +v 131.800034 259.210358 -13.133933 +v 131.862457 258.977417 -13.034032 +v 131.929443 258.727417 -12.999958 +v 125.133972 251.000000 -13.499959 +v 125.436073 253.294693 -13.499959 +v 126.321800 255.433014 -13.499958 +v 127.730774 257.269226 -13.499958 +v 129.566986 258.678192 -13.499958 +v 125.292892 251.000000 -13.292852 +v 125.589584 253.253571 -13.292852 +v 126.459427 255.353546 -13.292851 +v 127.843147 257.156860 -13.292851 +v 129.646454 258.540588 -13.292851 +v 125.500000 251.000000 -13.133934 +v 125.789627 253.199966 -13.133934 +v 126.638786 255.250000 -13.133933 +v 127.989594 257.010406 -13.133933 +v 129.750000 258.361206 -13.133933 +v 125.741180 251.000000 -13.034033 +v 126.022591 253.137543 -13.034033 +v 126.847656 255.129410 -13.034032 +v 128.160126 256.839874 -13.034032 +v 129.870590 258.152344 -13.034032 +v 126.000000 251.000000 -12.999959 +v 126.272591 253.070557 -12.999959 +v 127.071800 255.000000 -12.999958 +v 128.343140 256.656860 -12.999958 +v 130.000000 257.928192 -12.999958 +v 125.034073 229.000000 -13.741144 +v 125.133972 229.000000 -13.499963 +v 125.292892 229.000000 -13.292856 +v 125.500000 229.000000 -13.133938 +v 125.741180 229.000000 -13.034037 +v 126.000000 229.000000 -12.999963 +v 134.000000 220.034073 -13.741145 +v 131.679443 220.339584 -13.741145 +v 129.517044 221.235275 -13.741145 +v 127.660133 222.660126 -13.741145 +v 126.235283 224.517044 -13.741145 +v 125.339584 226.679443 -13.741144 +v 125.436073 226.705307 -13.499963 +v 125.589584 226.746429 -13.292856 +v 125.789627 226.800034 -13.133938 +v 126.022591 226.862457 -13.034037 +v 126.272591 226.929443 -12.999963 +v 134.000000 220.133972 -13.499964 +v 131.705307 220.436081 -13.499964 +v 129.566986 221.321793 -13.499964 +v 127.730774 222.730774 -13.499964 +v 126.321800 224.566986 -13.499964 +v 134.000000 220.292892 -13.292857 +v 131.746429 220.589584 -13.292857 +v 129.646454 221.459427 -13.292857 +v 127.843147 222.843140 -13.292857 +v 126.459427 224.646454 -13.292857 +v 134.000000 220.500000 -13.133939 +v 131.800034 220.789627 -13.133939 +v 129.750000 221.638779 -13.133939 +v 127.989594 222.989594 -13.133939 +v 126.638786 224.750000 -13.133939 +v 134.000000 220.741180 -13.034038 +v 131.862457 221.022598 -13.034038 +v 129.870590 221.847656 -13.034038 +v 128.160126 223.160126 -13.034038 +v 126.847656 224.870590 -13.034038 +v 134.000000 221.000000 -12.999964 +v 131.929443 221.272598 -12.999964 +v 130.000000 222.071793 -12.999964 +v 128.343140 223.343140 -12.999964 +v 127.071800 225.000000 -12.999964 +v 186.000000 220.034073 -13.741145 +v 186.000000 220.133972 -13.499964 +v 186.000000 220.292892 -13.292857 +v 186.000000 220.500000 -13.133939 +v 186.000000 220.741180 -13.034038 +v 186.000000 221.000000 -12.999964 +v 188.070557 221.272598 -12.999964 +v 188.137543 221.022598 -13.034038 +v 190.000000 222.071793 -12.999964 +v 190.129410 221.847656 -13.034038 +v 191.656860 223.343140 -12.999964 +v 191.839874 223.160126 -13.034038 +v 192.928207 225.000000 -12.999964 +v 193.152344 224.870590 -13.034038 +v 193.727402 226.929443 -12.999963 +v 193.977402 226.862457 -13.034037 +v 194.210373 226.800034 -13.133938 +v 194.410416 226.746429 -13.292856 +v 194.563919 226.705307 -13.499963 +v 194.660416 226.679443 -13.741144 +v 188.199966 220.789627 -13.133939 +v 190.250000 221.638779 -13.133939 +v 192.010406 222.989594 -13.133939 +v 193.361221 224.750000 -13.133939 +v 188.253571 220.589584 -13.292857 +v 190.353546 221.459427 -13.292857 +v 192.156860 222.843140 -13.292857 +v 193.540573 224.646454 -13.292857 +v 188.294693 220.436081 -13.499964 +v 190.433014 221.321793 -13.499964 +v 192.269226 222.730774 -13.499964 +v 193.678207 224.566986 -13.499964 +v 188.320557 220.339584 -13.741145 +v 190.482956 221.235275 -13.741145 +v 192.339874 222.660126 -13.741145 +v 193.764725 224.517044 -13.741145 +v 194.000000 3.974728 -31.000000 +v 194.000000 20.000006 -30.999996 +v 194.258820 3.974728 -30.965925 +v 194.258820 20.000006 -30.965921 +v 194.500000 3.974728 -30.866026 +v 194.500000 20.000006 -30.866022 +v 194.707108 3.974728 -30.707108 +v 194.707108 20.000006 -30.707104 +v 194.866028 3.974728 -30.500000 +v 194.866028 20.000006 -30.499996 +v 194.965927 3.974728 -30.258820 +v 194.965927 20.000006 -30.258816 +v 195.000000 3.974728 -30.000000 +v 195.000000 20.000006 -29.999996 +v 194.720581 -1.303926 -30.000000 +v 194.372025 -3.924798 -30.000000 +v 194.571930 -2.287664 -30.258820 +v 194.338379 -3.919414 -30.258820 +v 194.239746 -3.903631 -30.500000 +v 194.472824 -2.275143 -30.500000 +v 194.082809 -3.878523 -30.707108 +v 194.315155 -2.255225 -30.707108 +v 193.878311 -3.845802 -30.866026 +v 194.109680 -2.229268 -30.866026 +v 193.640152 -3.807698 -30.965925 +v 193.870392 -2.199040 -30.965925 +v 193.384598 -3.766807 -31.000000 +v 193.726166 -1.198353 -31.000000 +v 193.931488 1.384566 -31.000000 +v 194.930099 1.331706 -30.000000 +v 191.943054 -19.105928 -30.000004 +v 191.909409 -19.100544 -30.258823 +v 191.810760 -19.084761 -30.500004 +v 191.653839 -19.059652 -30.707111 +v 191.449326 -19.026932 -30.866030 +v 191.211182 -18.988829 -30.965929 +v 190.955612 -18.947937 -31.000004 +v 185.030960 -24.999994 -30.000004 +v 185.030960 -24.965919 -30.258823 +v 186.663300 -24.807013 -30.000004 +v 186.833878 -24.728561 -30.258823 +v 188.205627 -24.238708 -30.000004 +v 188.513931 -24.032663 -30.258823 +v 189.572906 -23.326416 -30.000004 +v 189.956619 -22.925648 -30.258823 +v 190.689758 -22.120438 -30.000004 +v 191.063629 -21.482958 -30.258823 +v 191.494598 -20.687267 -30.000004 +v 191.759537 -19.802908 -30.258823 +v 191.663040 -19.777052 -30.500004 +v 191.509537 -19.735922 -30.707111 +v 191.309479 -19.682318 -30.866030 +v 191.076523 -19.619896 -30.965929 +v 190.571228 -20.303371 -31.000004 +v 190.451263 -21.129404 -30.965929 +v 189.881363 -21.531803 -31.000004 +v 189.456619 -22.425648 -30.965929 +v 188.924057 -22.565498 -31.000004 +v 188.160370 -23.420290 -30.965929 +v 187.752106 -23.347464 -31.000004 +v 186.650864 -24.045549 -30.965929 +v 186.430099 -23.834581 -31.000004 +v 185.030960 -24.258814 -30.965929 +v 185.030960 -23.999994 -31.000004 +v 185.030960 -24.866020 -30.500004 +v 186.808029 -24.632065 -30.500004 +v 188.463974 -23.946146 -30.500004 +v 189.885986 -22.855007 -30.500004 +v 190.977112 -21.433008 -30.500004 +v 185.030960 -24.707102 -30.707111 +v 186.766891 -24.478561 -30.707111 +v 188.384521 -23.808519 -30.707111 +v 189.773605 -22.742636 -30.707111 +v 190.839493 -21.353548 -30.707111 +v 185.030960 -24.499994 -30.866030 +v 186.713287 -24.278513 -30.866030 +v 188.280960 -23.629160 -30.866030 +v 189.627167 -22.596188 -30.866030 +v 190.660126 -21.249994 -30.866030 +v 136.518784 -24.999994 -30.000004 +v 136.518784 -24.965919 -30.258823 +v 136.518784 -24.866020 -30.500004 +v 136.518784 -24.707102 -30.707111 +v 136.518784 -24.499994 -30.866030 +v 136.518784 -24.258814 -30.965929 +v 136.518784 -23.999994 -31.000004 +v 130.240479 -21.095625 -30.000004 +v 129.712067 -19.633606 -30.000004 +v 129.790207 -19.802908 -30.258823 +v 129.745193 -19.625654 -30.258823 +v 129.842346 -19.602339 -30.500004 +v 129.886703 -19.777052 -30.500004 +v 129.996872 -19.565250 -30.707111 +v 130.040207 -19.735922 -30.707111 +v 130.198257 -19.516918 -30.866030 +v 130.240265 -19.682318 -30.866030 +v 130.432785 -19.460634 -30.965929 +v 130.473221 -19.619896 -30.965929 +v 130.684448 -19.400232 -31.000004 +v 131.137375 -20.653393 -31.000004 +v 131.098480 -21.129404 -30.965929 +v 131.855713 -21.775684 -31.000004 +v 132.093124 -22.425648 -30.965929 +v 132.804031 -22.711758 -31.000004 +v 133.389374 -23.420290 -30.965929 +v 133.935577 -23.415442 -31.000004 +v 134.898880 -24.045549 -30.965929 +v 135.194519 -23.852032 -31.000004 +v 134.836456 -24.278513 -30.866030 +v 133.268784 -23.629160 -30.866030 +v 131.922577 -22.596188 -30.866030 +v 130.889618 -21.249994 -30.866030 +v 134.782852 -24.478561 -30.707111 +v 133.165222 -23.808519 -30.707111 +v 131.776138 -22.742636 -30.707111 +v 130.710251 -21.353548 -30.707111 +v 134.741714 -24.632065 -30.500004 +v 133.085770 -23.946146 -30.500004 +v 131.663773 -22.855007 -30.500004 +v 130.572632 -21.433008 -30.500004 +v 134.715866 -24.728561 -30.258823 +v 133.035812 -24.032663 -30.258823 +v 131.593124 -22.925648 -30.258823 +v 130.486115 -21.482958 -30.258823 +v 134.973816 -24.827372 -30.000004 +v 133.505035 -24.318016 -30.000004 +v 132.184921 -23.497051 -30.000004 +v 131.078537 -22.404966 -30.000004 +v 126.380638 -5.752640 -30.000000 +v 126.413765 -5.744688 -30.258820 +v 126.510910 -5.721374 -30.500000 +v 126.665443 -5.684287 -30.707108 +v 126.866829 -5.635954 -30.866026 +v 127.101349 -5.579669 -30.965925 +v 127.353020 -5.519267 -31.000000 +v 125.000000 5.916007 -29.999998 +v 125.034073 5.916007 -30.258818 +v 125.154037 1.994290 -30.000000 +v 125.615196 -1.903264 -30.000000 +v 125.133972 5.916007 -30.499998 +v 125.292892 5.916007 -30.707106 +v 125.500000 5.916007 -30.866024 +v 125.741180 5.916007 -30.965923 +v 126.602890 -1.746879 -31.000000 +v 126.000000 5.916007 -30.999998 +v 126.150955 2.072724 -31.000000 +v 125.000000 20.000006 -29.999996 +v 125.034073 20.000006 -30.258816 +v 125.133972 20.000006 -30.499996 +v 125.292892 20.000006 -30.707104 +v 125.500000 20.000006 -30.866022 +v 125.741180 20.000006 -30.965921 +v 126.000000 20.000006 -30.999996 +v 125.000000 5.916004 -13.999999 +v 125.154037 1.994287 -14.000000 +v 125.615196 -1.903267 -14.000000 +v 126.380638 -5.752643 -14.000001 +v 129.712067 -19.633610 -14.000003 +v 130.240479 -21.095629 -14.000004 +v 131.078537 -22.404970 -14.000004 +v 132.184921 -23.497055 -14.000004 +v 133.505035 -24.318020 -14.000004 +v 134.973816 -24.827375 -14.000004 +v 136.518784 -24.999998 -14.000004 +v 185.030960 -24.999998 -14.000004 +v 186.663300 -24.807016 -14.000004 +v 188.205627 -24.238712 -14.000004 +v 189.572906 -23.326420 -14.000004 +v 190.689758 -22.120441 -14.000004 +v 191.494598 -20.687271 -14.000004 +v 191.943054 -19.105932 -14.000003 +v 194.372025 -3.924801 -14.000001 +v 194.720581 -1.303929 -14.000000 +v 194.930099 1.331703 -14.000000 +v 195.000000 3.974725 -13.999999 +v 195.000000 20.000002 -13.999997 +v 194.965927 3.974725 -13.741180 +v 194.965927 20.000002 -13.741179 +v 194.866028 3.974725 -13.499999 +v 194.866028 20.000002 -13.499997 +v 194.707108 3.974725 -13.292892 +v 194.707108 20.000002 -13.292891 +v 194.500000 3.974725 -13.133974 +v 194.500000 20.000002 -13.133972 +v 194.258820 3.974725 -13.034073 +v 194.258820 20.000002 -13.034071 +v 194.000000 3.974725 -12.999999 +v 194.000000 20.000002 -12.999997 +v 193.384598 -3.766810 -13.000001 +v 193.640152 -3.807701 -13.034075 +v 193.726166 -1.198356 -13.000000 +v 193.931488 1.384563 -13.000000 +v 193.878311 -3.845805 -13.133976 +v 194.082809 -3.878526 -13.292894 +v 194.239746 -3.903634 -13.500001 +v 194.338379 -3.919417 -13.741182 +v 190.955612 -18.947941 -13.000003 +v 191.211182 -18.988832 -13.034077 +v 191.449326 -19.026936 -13.133978 +v 191.653839 -19.059656 -13.292896 +v 191.810760 -19.084764 -13.500003 +v 191.909409 -19.100548 -13.741184 +v 185.030960 -23.999998 -13.000004 +v 185.030960 -24.258818 -13.034078 +v 186.430099 -23.834585 -13.000004 +v 186.650864 -24.045553 -13.034078 +v 187.752106 -23.347467 -13.000004 +v 188.160370 -23.420294 -13.034078 +v 188.924057 -22.565502 -13.000004 +v 189.456619 -22.425652 -13.034078 +v 189.881363 -21.531807 -13.000004 +v 190.451263 -21.129408 -13.034078 +v 190.571228 -20.303375 -13.000003 +v 191.076523 -19.619900 -13.034077 +v 191.309479 -19.682322 -13.133978 +v 191.509537 -19.735926 -13.292896 +v 191.663040 -19.777056 -13.500003 +v 191.759537 -19.802912 -13.741184 +v 191.063629 -21.482962 -13.741185 +v 189.956619 -22.925652 -13.741185 +v 188.513931 -24.032667 -13.741185 +v 186.833878 -24.728565 -13.741185 +v 185.030960 -24.965923 -13.741185 +v 185.030960 -24.499998 -13.133979 +v 186.713287 -24.278517 -13.133979 +v 188.280960 -23.629164 -13.133979 +v 189.627167 -22.596191 -13.133979 +v 190.660126 -21.249998 -13.133979 +v 185.030960 -24.707106 -13.292897 +v 186.766891 -24.478565 -13.292897 +v 188.384521 -23.808523 -13.292897 +v 189.773605 -22.742640 -13.292897 +v 190.839493 -21.353552 -13.292897 +v 185.030960 -24.866024 -13.500004 +v 186.808029 -24.632069 -13.500004 +v 188.463974 -23.946150 -13.500004 +v 189.885986 -22.855011 -13.500004 +v 190.977112 -21.433012 -13.500004 +v 136.518784 -23.999998 -13.000004 +v 136.518784 -24.258818 -13.034078 +v 136.518784 -24.499998 -13.133979 +v 136.518784 -24.707106 -13.292897 +v 136.518784 -24.866024 -13.500004 +v 136.518784 -24.965923 -13.741185 +v 131.137375 -20.653397 -13.000004 +v 130.684448 -19.400236 -13.000003 +v 130.473221 -19.619900 -13.034077 +v 130.432785 -19.460638 -13.034077 +v 130.198257 -19.516922 -13.133978 +v 130.240265 -19.682322 -13.133978 +v 129.996872 -19.565254 -13.292896 +v 130.040207 -19.735926 -13.292896 +v 129.842346 -19.602343 -13.500003 +v 129.886703 -19.777056 -13.500003 +v 129.745193 -19.625658 -13.741184 +v 129.790207 -19.802912 -13.741184 +v 130.486115 -21.482962 -13.741185 +v 131.593124 -22.925652 -13.741185 +v 133.035812 -24.032667 -13.741185 +v 134.715866 -24.728565 -13.741185 +v 134.741714 -24.632069 -13.500004 +v 133.085770 -23.946150 -13.500004 +v 131.663773 -22.855011 -13.500004 +v 130.572632 -21.433012 -13.500004 +v 134.782852 -24.478565 -13.292897 +v 133.165222 -23.808523 -13.292897 +v 131.776138 -22.742640 -13.292897 +v 130.710251 -21.353552 -13.292897 +v 134.836456 -24.278517 -13.133979 +v 133.268784 -23.629164 -13.133979 +v 131.922577 -22.596191 -13.133979 +v 130.889618 -21.249998 -13.133979 +v 134.898880 -24.045553 -13.034078 +v 133.389374 -23.420294 -13.034078 +v 132.093124 -22.425652 -13.034078 +v 131.098480 -21.129408 -13.034078 +v 135.194519 -23.852036 -13.000004 +v 133.935577 -23.415445 -13.000004 +v 132.804031 -22.711761 -13.000004 +v 131.855713 -21.775688 -13.000004 +v 127.353020 -5.519270 -13.000001 +v 127.101349 -5.579672 -13.034075 +v 126.866829 -5.635957 -13.133976 +v 126.665443 -5.684289 -13.292894 +v 126.510910 -5.721376 -13.500001 +v 126.413765 -5.744690 -13.741182 +v 126.000000 5.916004 -12.999999 +v 125.741180 5.916004 -13.034073 +v 126.150955 2.072721 -13.000000 +v 126.129601 -0.257763 -13.034074 +v 126.602890 -1.746882 -13.000000 +v 125.500000 5.916004 -13.133974 +v 125.890320 -0.287991 -13.133975 +v 125.684853 -0.313948 -13.292893 +v 125.527184 -0.333866 -13.500000 +v 125.428070 -0.346387 -13.741181 +v 125.292892 5.916004 -13.292892 +v 125.133972 5.916004 -13.499999 +v 125.034073 5.916004 -13.741180 +v 126.000000 20.000002 -12.999997 +v 125.741180 20.000002 -13.034071 +v 125.500000 20.000002 -13.133972 +v 125.292892 20.000002 -13.292891 +v 125.133972 20.000002 -13.499997 +v 125.034073 20.000002 -13.741179 +v 125.000000 20.000002 -13.999997 +v 105.938271 109.965538 -30.999983 +v 103.842422 112.959908 -30.999981 +v 102.532974 116.372261 -30.999981 +v 102.087685 120.000008 -30.999981 +v 102.532974 123.627754 -30.999979 +v 103.842422 127.040108 -30.999979 +v 105.938271 130.034470 -30.999979 +v 160.000000 190.103058 -30.999969 +v 79.031021 109.965538 -30.999983 +v 76.935173 112.959908 -30.999981 +v 75.625732 116.372261 -30.999981 +v 75.180435 120.000008 -30.999981 +v 75.625732 123.627754 -30.999979 +v 76.935173 127.040108 -30.999979 +v 79.031021 130.034470 -30.999979 +v 180.000000 20.000006 -30.999996 +v 160.000000 20.000006 -30.999996 +v 160.000000 49.896946 -30.999992 +v 177.244446 211.941147 -4.999966 +v 177.500000 210.000000 -4.999966 +v 177.244446 208.058853 -4.999966 +v 176.495193 206.250000 -4.999967 +v 175.303299 204.696701 -4.999967 +v 173.750000 203.504807 -4.999967 +v 171.941147 202.755554 -4.999967 +v 170.000000 202.500000 -4.999967 +v 168.058853 202.755554 -4.999967 +v 166.250000 203.504807 -4.999967 +v 164.696701 204.696701 -4.999967 +v 163.504807 206.250000 -4.999967 +v 162.755554 208.058853 -4.999966 +v 162.500000 210.000000 -4.999966 +v 162.755554 211.941147 -4.999966 +v 163.504807 213.750000 -4.999965 +v 164.696701 215.303299 -4.999965 +v 166.250000 216.495193 -4.999965 +v 168.058853 217.244446 -4.999965 +v 170.000000 217.500000 -4.999965 +v 171.941147 217.244446 -4.999965 +v 173.750000 216.495193 -4.999965 +v 175.303299 215.303299 -4.999965 +v 176.495193 213.750000 -4.999965 +v 9.000000 260.000000 0.000042 +v 9.000000 260.000000 -4.999958 +v 6.670629 259.693329 0.000042 +v 6.670629 259.693329 -4.999958 +v 4.500000 258.794220 0.000042 +v 4.500000 258.794220 -4.999958 +v 2.636039 257.363953 0.000042 +v 2.636039 257.363953 -4.999958 +v 1.205771 255.500000 0.000042 +v 1.205771 255.500000 -4.999959 +v 0.306668 253.329376 0.000041 +v 0.306668 253.329376 -4.999959 +v 0.000000 251.000000 0.000041 +v 0.000000 251.000000 -4.999959 +v 0.000000 9.000001 -4.999999 +v 0.000000 9.000000 0.000001 +v 261.000000 0.000001 -5.000000 +v 270.000000 9.000001 -4.999999 +v 9.000000 0.000001 -5.000000 +v 270.000000 251.000000 -4.999959 +v 261.000000 260.000000 -4.999958 +v 263.329376 259.693329 -4.999958 +v 265.500000 258.794220 -4.999958 +v 267.363953 257.363953 -4.999958 +v 268.794220 255.500000 -4.999959 +v 269.693329 253.329376 -4.999959 +v 269.693329 6.670630 -4.999999 +v 268.794220 4.500001 -4.999999 +v 267.363953 2.636040 -5.000000 +v 265.500000 1.205772 -5.000000 +v 263.329376 0.306669 -5.000000 +v 6.670629 0.306669 -5.000000 +v 4.500000 1.205772 -5.000000 +v 2.636039 2.636040 -5.000000 +v 1.205771 4.500001 -4.999999 +v 0.306668 6.670630 -4.999999 +v 270.000000 251.000000 0.000041 +v 269.693329 253.329376 0.000041 +v 268.794220 255.500000 0.000042 +v 267.363953 257.363953 0.000042 +v 265.500000 258.794220 0.000042 +v 263.329376 259.693329 0.000042 +v 261.000000 260.000000 0.000042 +v 270.000000 9.000000 0.000001 +v 261.000000 0.000000 0.000000 +v 263.329376 0.306668 0.000000 +v 265.500000 1.205771 0.000000 +v 267.363953 2.636039 0.000000 +v 268.794220 4.500000 0.000001 +v 269.693329 6.670629 0.000001 +v 0.306668 6.670629 0.000001 +v 1.205771 4.500000 0.000001 +v 2.636039 2.636039 0.000000 +v 4.500000 1.205771 0.000000 +v 6.670629 0.306668 0.000000 +v 9.000000 0.000000 0.000000 +vt 0.217339 0.786783 +vt 0.192612 0.786783 +vt 0.217339 0.781403 +vt 0.192612 0.781403 +vt 0.217339 0.776024 +vt 0.192612 0.776024 +vt 0.217339 0.770644 +vt 0.192612 0.770644 +vt 0.217339 0.765265 +vt 0.192612 0.765265 +vt 0.217340 0.759886 +vt 0.192612 0.759886 +vt 0.217340 0.754507 +vt 0.192612 0.754507 +vt 0.217340 0.749127 +vt 0.192612 0.749127 +vt 0.217340 0.743748 +vt 0.192612 0.743748 +vt 0.217340 0.738368 +vt 0.192612 0.738368 +vt 0.217340 0.732989 +vt 0.192612 0.732989 +vt 0.217340 0.727610 +vt 0.192612 0.727610 +vt 0.217340 0.722231 +vt 0.192612 0.722231 +vt 0.217340 0.716851 +vt 0.192612 0.716851 +vt 0.217340 0.711472 +vt 0.192612 0.711472 +vt 0.217339 0.840576 +vt 0.192612 0.840576 +vt 0.217339 0.835197 +vt 0.192612 0.835197 +vt 0.217339 0.829817 +vt 0.192612 0.829817 +vt 0.217339 0.824438 +vt 0.192612 0.824438 +vt 0.217339 0.819059 +vt 0.192612 0.819059 +vt 0.217339 0.813680 +vt 0.192612 0.813680 +vt 0.217339 0.808300 +vt 0.192612 0.808300 +vt 0.217339 0.802921 +vt 0.192612 0.802921 +vt 0.217339 0.797541 +vt 0.192612 0.797541 +vt 0.217339 0.792162 +vt 0.192612 0.792162 +vt 0.217340 0.651321 +vt 0.192612 0.651321 +vt 0.217340 0.645942 +vt 0.192612 0.645942 +vt 0.217340 0.640562 +vt 0.192612 0.640562 +vt 0.217340 0.635183 +vt 0.192612 0.635183 +vt 0.217340 0.629804 +vt 0.192612 0.629804 +vt 0.217340 0.624424 +vt 0.192612 0.624424 +vt 0.217340 0.619045 +vt 0.192612 0.619045 +vt 0.217340 0.613666 +vt 0.192612 0.613666 +vt 0.217340 0.608286 +vt 0.192612 0.608286 +vt 0.217340 0.602907 +vt 0.192612 0.602907 +vt 0.217340 0.597528 +vt 0.192612 0.597528 +vt 0.217340 0.592148 +vt 0.192612 0.592148 +vt 0.217340 0.586769 +vt 0.192612 0.586769 +vt 0.217340 0.581390 +vt 0.192612 0.581390 +vt 0.217340 0.710494 +vt 0.192612 0.710494 +vt 0.217340 0.705115 +vt 0.192612 0.705115 +vt 0.217340 0.699735 +vt 0.192612 0.699735 +vt 0.217340 0.694356 +vt 0.192612 0.694356 +vt 0.217340 0.688976 +vt 0.192612 0.688976 +vt 0.217340 0.683597 +vt 0.192612 0.683597 +vt 0.217340 0.678218 +vt 0.192612 0.678218 +vt 0.217340 0.672839 +vt 0.192612 0.672839 +vt 0.217340 0.667459 +vt 0.192612 0.667459 +vt 0.217340 0.662080 +vt 0.192612 0.662080 +vt 0.217340 0.656700 +vt 0.192612 0.656700 +vt 0.310442 0.065987 +vt 0.310752 0.060445 +vt 0.314203 0.028452 +vt 0.310267 0.054869 +vt 0.308997 0.049687 +vt 0.306986 0.045373 +vt 0.304377 0.042377 +vt 0.301405 0.040977 +vt 0.298319 0.041245 +vt 0.282384 0.038962 +vt 0.295107 0.042958 +vt 0.292223 0.046072 +vt 0.289826 0.050257 +vt 0.287988 0.055189 +vt 0.286762 0.060657 +vt 0.286225 0.066429 +vt 0.282821 0.121322 +vt 0.211025 0.281065 +vt 0.286525 0.072171 +vt 0.287521 0.077556 +vt 0.289128 0.082241 +vt 0.291223 0.085947 +vt 0.293653 0.088477 +vt 0.296259 0.089725 +vt 0.298869 0.089639 +vt 0.301334 0.088262 +vt 0.283108 0.493049 +vt 0.301326 0.527104 +vt 0.298968 0.525452 +vt 0.304768 0.084951 +vt 0.304459 0.530106 +vt 0.307736 0.078943 +vt 0.307427 0.535493 +vt 0.310186 0.544468 +vt 0.314203 0.580411 +vt 0.199690 0.312837 +vt 0.200026 0.307700 +vt 0.205875 0.307678 +vt 0.199681 0.302565 +vt 0.206469 0.298068 +vt 0.198674 0.297786 +vt 0.208221 0.289015 +vt 0.197076 0.293693 +vt 0.194997 0.290567 +vt 0.192577 0.288625 +vt 0.189985 0.288003 +vt 0.175077 0.281428 +vt 0.187392 0.288684 +vt 0.184981 0.290679 +vt 0.182916 0.293849 +vt 0.181340 0.297968 +vt 0.180356 0.302748 +vt 0.172359 0.289391 +vt 0.180025 0.307871 +vt 0.170675 0.298405 +vt 0.170119 0.307958 +vt 0.170720 0.317498 +vt 0.172445 0.326473 +vt 0.180374 0.312988 +vt 0.175198 0.334374 +vt 0.181375 0.317749 +vt 0.182963 0.321839 +vt 0.185035 0.324973 +vt 0.187447 0.326929 +vt 0.190035 0.327570 +vt 0.192625 0.326897 +vt 0.211020 0.334174 +vt 0.283180 0.574246 +vt 0.195037 0.324911 +vt 0.197106 0.321751 +vt 0.208223 0.326280 +vt 0.198694 0.317630 +vt 0.206471 0.317271 +vt 0.286760 0.547097 +vt 0.287296 0.552594 +vt 0.298640 0.570034 +vt 0.301646 0.569879 +vt 0.304497 0.568138 +vt 0.310028 0.555298 +vt 0.310454 0.549755 +vt 0.296438 0.525141 +vt 0.293901 0.526169 +vt 0.291534 0.528492 +vt 0.289505 0.531992 +vt 0.287961 0.536460 +vt 0.287021 0.541609 +vt 0.288510 0.557767 +vt 0.290333 0.562366 +vt 0.292706 0.566149 +vt 0.295534 0.568798 +vt 0.306967 0.564918 +vt 0.308852 0.560501 +vt 0.175292 0.043640 +vt 0.173407 0.040307 +vt 0.174440 0.044040 +vt 0.172989 0.039817 +vt 0.173592 0.044475 +vt 0.172549 0.039414 +vt 0.172747 0.044945 +vt 0.172088 0.039101 +vt 0.171907 0.045452 +vt 0.171070 0.045990 +vt 0.171605 0.038886 +vt 0.170238 0.046564 +vt 0.171102 0.038770 +vt 0.169412 0.047170 +vt 0.170581 0.038762 +vt 0.168592 0.047806 +vt 0.174435 0.038840 +vt 0.174284 0.038936 +vt 0.173976 0.039115 +vt 0.173907 0.039122 +vt 0.173613 0.039341 +vt 0.173565 0.039339 +vt 0.173298 0.039531 +vt 0.173249 0.039525 +vt 0.173104 0.039767 +vt 0.173013 0.039739 +vt 0.173059 0.039970 +vt 0.172846 0.039862 +vt 0.172630 0.039755 +vt 0.172411 0.039653 +vt 0.172189 0.039558 +vt 0.171967 0.039472 +vt 0.171746 0.039400 +vt 0.174133 0.039001 +vt 0.173837 0.039129 +vt 0.173518 0.039339 +vt 0.173199 0.039520 +vt 0.172921 0.039713 +vt 0.173983 0.039034 +vt 0.173767 0.039136 +vt 0.173470 0.039339 +vt 0.173149 0.039516 +vt 0.172829 0.039689 +vt 0.173833 0.039037 +vt 0.173697 0.039143 +vt 0.173423 0.039341 +vt 0.173098 0.039513 +vt 0.172738 0.039669 +vt 0.173686 0.039008 +vt 0.173630 0.039150 +vt 0.173377 0.039345 +vt 0.173048 0.039511 +vt 0.172649 0.039655 +vt 0.173542 0.038946 +vt 0.173566 0.039157 +vt 0.173332 0.039351 +vt 0.172999 0.039513 +vt 0.172563 0.039649 +vt 0.175083 0.038334 +vt 0.175113 0.038199 +vt 0.175134 0.038064 +vt 0.175147 0.037928 +vt 0.175152 0.037794 +vt 0.175149 0.037662 +vt 0.175137 0.037533 +vt 0.175904 0.036019 +vt 0.175867 0.036155 +vt 0.175858 0.036378 +vt 0.175829 0.036442 +vt 0.175764 0.036670 +vt 0.175751 0.036728 +vt 0.175603 0.036913 +vt 0.175599 0.036954 +vt 0.175457 0.037347 +vt 0.175454 0.037344 +vt 0.175282 0.037800 +vt 0.175284 0.037754 +vt 0.175285 0.037708 +vt 0.175287 0.037663 +vt 0.175288 0.037619 +vt 0.175290 0.037577 +vt 0.175291 0.037537 +vt 0.175825 0.036280 +vt 0.175801 0.036506 +vt 0.175739 0.036788 +vt 0.175594 0.036993 +vt 0.175450 0.037342 +vt 0.175776 0.036391 +vt 0.175773 0.036570 +vt 0.175728 0.036848 +vt 0.175590 0.037031 +vt 0.175447 0.037339 +vt 0.175721 0.036490 +vt 0.175746 0.036633 +vt 0.175719 0.036910 +vt 0.175585 0.037069 +vt 0.175444 0.037337 +vt 0.175662 0.036573 +vt 0.175720 0.036694 +vt 0.175710 0.036975 +vt 0.175581 0.037105 +vt 0.175442 0.037336 +vt 0.175597 0.036640 +vt 0.175695 0.036754 +vt 0.175704 0.037042 +vt 0.175578 0.037142 +vt 0.175441 0.037335 +vt 0.175631 0.052174 +vt 0.175940 0.052558 +vt 0.176265 0.052875 +vt 0.176603 0.053124 +vt 0.176954 0.053302 +vt 0.177316 0.053406 +vt 0.177687 0.053433 +vt 0.176337 0.053465 +vt 0.176392 0.053463 +vt 0.176420 0.053309 +vt 0.176443 0.053323 +vt 0.176451 0.053149 +vt 0.176470 0.053157 +vt 0.176442 0.052986 +vt 0.176470 0.052993 +vt 0.176363 0.052804 +vt 0.176423 0.052820 +vt 0.176154 0.052586 +vt 0.176303 0.052664 +vt 0.176455 0.052742 +vt 0.176609 0.052818 +vt 0.176765 0.052890 +vt 0.176921 0.052956 +vt 0.177076 0.053015 +vt 0.176446 0.053474 +vt 0.176467 0.053337 +vt 0.176489 0.053166 +vt 0.176499 0.053001 +vt 0.176485 0.052836 +vt 0.176499 0.053496 +vt 0.176490 0.053352 +vt 0.176508 0.053175 +vt 0.176528 0.053008 +vt 0.176546 0.052851 +vt 0.176551 0.053531 +vt 0.176513 0.053367 +vt 0.176527 0.053183 +vt 0.176556 0.053016 +vt 0.176607 0.052864 +vt 0.176601 0.053577 +vt 0.176535 0.053383 +vt 0.176546 0.053191 +vt 0.176585 0.053023 +vt 0.176667 0.052875 +vt 0.176649 0.053637 +vt 0.176556 0.053398 +vt 0.176563 0.053199 +vt 0.176613 0.053029 +vt 0.176724 0.052881 +vt 0.176480 0.055043 +vt 0.176461 0.055290 +vt 0.176455 0.055536 +vt 0.176459 0.055777 +vt 0.176475 0.056014 +vt 0.176504 0.056245 +vt 0.176544 0.056467 +vt 0.177046 0.057279 +vt 0.177028 0.058060 +vt 0.176798 0.057464 +vt 0.176752 0.057846 +vt 0.176636 0.057165 +vt 0.176605 0.057352 +vt 0.176539 0.056739 +vt 0.176529 0.056854 +vt 0.176510 0.056251 +vt 0.176506 0.056348 +vt 0.176493 0.055716 +vt 0.176494 0.055837 +vt 0.176495 0.055959 +vt 0.176497 0.056081 +vt 0.176498 0.056201 +vt 0.176500 0.056319 +vt 0.176502 0.056432 +vt 0.176984 0.058837 +vt 0.176704 0.058231 +vt 0.176573 0.057539 +vt 0.176518 0.056970 +vt 0.176503 0.056445 +vt 0.176915 0.059612 +vt 0.176655 0.058618 +vt 0.176539 0.057725 +vt 0.176506 0.057085 +vt 0.176499 0.056541 +vt 0.176820 0.060384 +vt 0.176603 0.059007 +vt 0.176504 0.057910 +vt 0.176494 0.057200 +vt 0.176494 0.056637 +vt 0.176699 0.061154 +vt 0.176547 0.059393 +vt 0.176467 0.058090 +vt 0.176480 0.057313 +vt 0.176489 0.056732 +vt 0.176550 0.061923 +vt 0.176489 0.059775 +vt 0.176427 0.058263 +vt 0.176466 0.057423 +vt 0.176482 0.056825 +vt 0.178681 0.057080 +vt 0.178334 0.058660 +vt 0.177925 0.060177 +vt 0.177454 0.061623 +vt 0.176925 0.062989 +vt 0.176339 0.064268 +vt 0.175698 0.065452 +vt 0.177137 0.049396 +vt 0.176974 0.050249 +vt 0.176848 0.050984 +vt 0.176755 0.051615 +vt 0.176858 0.052209 +vt 0.176809 0.052743 +vt 0.176795 0.053207 +vt 0.176816 0.053614 +vt 0.176638 0.053012 +vt 0.176651 0.052923 +vt 0.176668 0.052824 +vt 0.176686 0.052712 +vt 0.176730 0.052612 +vt 0.176752 0.052462 +vt 0.176776 0.052299 +vt 0.176806 0.052126 +vt 0.178518 0.034772 +vt 0.178089 0.034727 +vt 0.177712 0.034685 +vt 0.177389 0.034659 +vt 0.176633 0.035719 +vt 0.175970 0.036494 +vt 0.175390 0.037434 +vt 0.174886 0.038527 +vt 0.175195 0.038182 +vt 0.174817 0.038616 +vt 0.174498 0.039157 +vt 0.174239 0.039800 +vt 0.173892 0.040663 +vt 0.173719 0.041452 +vt 0.173607 0.042355 +vt 0.173563 0.043373 +vt 0.178028 0.051056 +vt 0.175766 0.044710 +vt 0.269988 0.972405 +vt 0.298859 0.972541 +vt 0.270011 0.973256 +vt 0.298824 0.973474 +vt 0.270023 0.974113 +vt 0.298806 0.974415 +vt 0.270022 0.974977 +vt 0.298803 0.975364 +vt 0.270008 0.975847 +vt 0.298818 0.976322 +vt 0.269976 0.976724 +vt 0.298845 0.977288 +vt 0.269933 0.977610 +vt 0.298893 0.978260 +vt 0.254640 0.950521 +vt 0.255470 0.950291 +vt 0.257205 0.959361 +vt 0.257602 0.958884 +vt 0.259129 0.964581 +vt 0.259407 0.964150 +vt 0.261118 0.969246 +vt 0.261357 0.968753 +vt 0.263611 0.973131 +vt 0.263797 0.972535 +vt 0.266526 0.975864 +vt 0.266652 0.975164 +vt 0.266775 0.974473 +vt 0.266892 0.973783 +vt 0.267004 0.973095 +vt 0.267114 0.972409 +vt 0.267222 0.971724 +vt 0.256292 0.950169 +vt 0.258007 0.958445 +vt 0.259687 0.963728 +vt 0.261594 0.968267 +vt 0.263982 0.971949 +vt 0.257100 0.950145 +vt 0.258415 0.958026 +vt 0.259966 0.963301 +vt 0.261826 0.967778 +vt 0.264160 0.971363 +vt 0.257896 0.950207 +vt 0.258827 0.957628 +vt 0.260245 0.962876 +vt 0.262055 0.967291 +vt 0.264336 0.970781 +vt 0.258680 0.950372 +vt 0.259241 0.957250 +vt 0.260525 0.962452 +vt 0.262284 0.966805 +vt 0.264511 0.970200 +vt 0.259450 0.950643 +vt 0.259654 0.956888 +vt 0.260806 0.962030 +vt 0.262511 0.966319 +vt 0.264685 0.969620 +vt 0.254640 0.815252 +vt 0.255472 0.815496 +vt 0.256291 0.815635 +vt 0.257098 0.815668 +vt 0.257891 0.815585 +vt 0.258671 0.815399 +vt 0.259436 0.815110 +vt 0.269912 0.788684 +vt 0.269955 0.789560 +vt 0.266555 0.790389 +vt 0.266671 0.791083 +vt 0.263659 0.793034 +vt 0.263835 0.793633 +vt 0.261171 0.796827 +vt 0.261400 0.797329 +vt 0.259179 0.801394 +vt 0.259447 0.801835 +vt 0.257242 0.806497 +vt 0.257630 0.806993 +vt 0.258024 0.807461 +vt 0.258427 0.807890 +vt 0.258833 0.808292 +vt 0.259242 0.808673 +vt 0.259649 0.809037 +vt 0.269981 0.790434 +vt 0.266781 0.791775 +vt 0.264005 0.794228 +vt 0.261624 0.797829 +vt 0.259715 0.802277 +vt 0.269997 0.791302 +vt 0.266892 0.792461 +vt 0.264177 0.794813 +vt 0.261849 0.798320 +vt 0.259987 0.802711 +vt 0.270000 0.792165 +vt 0.267001 0.793143 +vt 0.264349 0.795393 +vt 0.262073 0.798808 +vt 0.260261 0.803139 +vt 0.269989 0.793022 +vt 0.267109 0.793824 +vt 0.264519 0.795971 +vt 0.262296 0.799294 +vt 0.260536 0.803565 +vt 0.269966 0.793873 +vt 0.267215 0.794504 +vt 0.264689 0.796547 +vt 0.262519 0.799779 +vt 0.260812 0.803989 +vt 0.298872 0.788102 +vt 0.298824 0.789084 +vt 0.298791 0.790053 +vt 0.298778 0.791014 +vt 0.298782 0.791964 +vt 0.298802 0.792906 +vt 0.298837 0.793838 +vt 0.314203 0.815751 +vt 0.313372 0.815981 +vt 0.311639 0.806911 +vt 0.311243 0.807387 +vt 0.309719 0.801694 +vt 0.309442 0.802122 +vt 0.307738 0.797035 +vt 0.307499 0.797525 +vt 0.305272 0.793144 +vt 0.305082 0.793732 +vt 0.302398 0.790274 +vt 0.302258 0.790984 +vt 0.302120 0.791688 +vt 0.301992 0.792393 +vt 0.301868 0.793097 +vt 0.301748 0.793800 +vt 0.301630 0.794502 +vt 0.312550 0.816103 +vt 0.310838 0.807826 +vt 0.309162 0.802544 +vt 0.307262 0.798007 +vt 0.304893 0.794313 +vt 0.311741 0.816127 +vt 0.310429 0.808245 +vt 0.308883 0.802969 +vt 0.307030 0.798492 +vt 0.304710 0.794894 +vt 0.310944 0.816064 +vt 0.310017 0.808641 +vt 0.308604 0.803392 +vt 0.306800 0.798975 +vt 0.304530 0.795473 +vt 0.310160 0.815898 +vt 0.309604 0.809018 +vt 0.308324 0.803815 +vt 0.306571 0.799459 +vt 0.304351 0.796050 +vt 0.309390 0.815627 +vt 0.309190 0.809379 +vt 0.308043 0.804236 +vt 0.306343 0.799941 +vt 0.304173 0.796626 +vt 0.314203 0.951134 +vt 0.313370 0.950890 +vt 0.312551 0.950751 +vt 0.311743 0.950718 +vt 0.310949 0.950802 +vt 0.310169 0.950989 +vt 0.309404 0.951279 +vt 0.309195 0.957353 +vt 0.309603 0.957717 +vt 0.308037 0.962403 +vt 0.308313 0.962825 +vt 0.306334 0.966618 +vt 0.306558 0.967101 +vt 0.304169 0.969863 +vt 0.304343 0.970437 +vt 0.301637 0.971928 +vt 0.301753 0.972625 +vt 0.301871 0.973322 +vt 0.301992 0.974020 +vt 0.302115 0.974720 +vt 0.302239 0.975425 +vt 0.302370 0.976130 +vt 0.310011 0.958096 +vt 0.308588 0.963250 +vt 0.306782 0.967583 +vt 0.304518 0.971011 +vt 0.310417 0.958498 +vt 0.308861 0.963677 +vt 0.307006 0.968067 +vt 0.304693 0.971587 +vt 0.310820 0.958926 +vt 0.309133 0.964109 +vt 0.307232 0.968555 +vt 0.304869 0.972167 +vt 0.311214 0.959393 +vt 0.309401 0.964549 +vt 0.307456 0.969051 +vt 0.305044 0.972756 +vt 0.311602 0.959889 +vt 0.309669 0.964989 +vt 0.307686 0.969549 +vt 0.305224 0.973349 +vt 0.026456 0.339805 +vt 0.027842 0.341046 +vt 0.026381 0.339822 +vt 0.027777 0.340745 +vt 0.026276 0.339803 +vt 0.027703 0.340452 +vt 0.026173 0.339775 +vt 0.027617 0.340174 +vt 0.026072 0.339739 +vt 0.027517 0.339913 +vt 0.025973 0.339695 +vt 0.027396 0.339667 +vt 0.025902 0.339704 +vt 0.027214 0.339403 +vt 0.024967 0.340828 +vt 0.024501 0.341159 +vt 0.024829 0.341238 +vt 0.024644 0.341353 +vt 0.024768 0.341586 +vt 0.024889 0.341446 +vt 0.024873 0.341854 +vt 0.024962 0.341638 +vt 0.024955 0.342154 +vt 0.025046 0.341808 +vt 0.025014 0.342482 +vt 0.025139 0.341953 +vt 0.025047 0.342836 +vt 0.025414 0.341689 +vt 0.025934 0.340752 +vt 0.025432 0.340238 +vt 0.022668 0.342089 +vt 0.022581 0.342214 +vt 0.022519 0.342357 +vt 0.022479 0.342510 +vt 0.022460 0.342668 +vt 0.022464 0.342826 +vt 0.022494 0.342975 +vt 0.020877 0.345119 +vt 0.020900 0.344600 +vt 0.021248 0.344299 +vt 0.021322 0.343997 +vt 0.021564 0.343801 +vt 0.021645 0.343593 +vt 0.021853 0.343426 +vt 0.021948 0.343251 +vt 0.022130 0.343071 +vt 0.022244 0.342888 +vt 0.022404 0.342665 +vt 0.022550 0.342469 +vt 0.022529 0.342545 +vt 0.022507 0.342630 +vt 0.022486 0.342716 +vt 0.022466 0.342795 +vt 0.022335 0.342836 +vt 0.022219 0.342887 +vt 0.022111 0.342918 +vt 0.021962 0.343035 +vt 0.021892 0.342996 +vt 0.021716 0.343108 +vt 0.021689 0.342971 +vt 0.021491 0.342993 +vt 0.021517 0.342715 +vt 0.021274 0.342754 +vt 0.021432 0.342378 +vt 0.020955 0.344098 +vt 0.021362 0.343750 +vt 0.021663 0.343474 +vt 0.021952 0.343199 +vt 0.022239 0.342890 +vt 0.021036 0.343621 +vt 0.021404 0.343500 +vt 0.021681 0.343353 +vt 0.021956 0.343145 +vt 0.022232 0.342891 +vt 0.021142 0.343172 +vt 0.021447 0.343247 +vt 0.021699 0.343230 +vt 0.021959 0.343091 +vt 0.022226 0.342890 +vt 0.018793 0.331271 +vt 0.018547 0.331242 +vt 0.018298 0.331288 +vt 0.018052 0.331399 +vt 0.017813 0.331576 +vt 0.017581 0.331821 +vt 0.017364 0.332144 +vt 0.018614 0.330744 +vt 0.018790 0.330532 +vt 0.018694 0.330613 +vt 0.018722 0.330665 +vt 0.018645 0.330753 +vt 0.018624 0.330677 +vt 0.018563 0.330812 +vt 0.018550 0.330730 +vt 0.018479 0.330844 +vt 0.018474 0.330767 +vt 0.018394 0.330846 +vt 0.018398 0.330788 +vt 0.018310 0.330799 +vt 0.018404 0.330909 +vt 0.018427 0.330938 +vt 0.018378 0.331106 +vt 0.018362 0.331179 +vt 0.018296 0.331329 +vt 0.018243 0.331440 +vt 0.018154 0.331576 +vt 0.018046 0.331723 +vt 0.017913 0.331861 +vt 0.018136 0.331631 +vt 0.018282 0.331395 +vt 0.018384 0.331149 +vt 0.018457 0.330913 +vt 0.018230 0.331548 +vt 0.018323 0.331351 +vt 0.018408 0.331119 +vt 0.018488 0.330886 +vt 0.018325 0.331474 +vt 0.018363 0.331309 +vt 0.018432 0.331091 +vt 0.018520 0.330859 +vt 0.018420 0.331406 +vt 0.018404 0.331269 +vt 0.018456 0.331063 +vt 0.018552 0.330831 +vt 0.018528 0.331344 +vt 0.018444 0.331277 +vt 0.018449 0.331131 +vt 0.018508 0.330946 +vt 0.019349 0.329300 +vt 0.019279 0.329219 +vt 0.019169 0.329097 +vt 0.019058 0.328975 +vt 0.018946 0.328853 +vt 0.018835 0.328733 +vt 0.018744 0.328639 +vt 0.019877 0.327636 +vt 0.019800 0.327481 +vt 0.019729 0.328168 +vt 0.019544 0.328733 +vt 0.019685 0.327282 +vt 0.019570 0.327082 +vt 0.019456 0.326881 +vt 0.019342 0.326678 +vt 0.018946 0.327978 +vt 0.019247 0.326500 +vt 0.019117 0.327272 +vt 0.020360 0.327136 +vt 0.020313 0.326856 +vt 0.020274 0.326611 +vt 0.020226 0.326377 +vt 0.020167 0.326155 +vt 0.020099 0.325943 +vt 0.020026 0.325739 +vt 0.019841 0.326729 +vt 0.019535 0.327301 +vt 0.019244 0.327915 +vt 0.018987 0.328525 +vt 0.018600 0.329583 +vt 0.018641 0.329712 +vt 0.018590 0.330012 +vt 0.018479 0.330350 +vt 0.018324 0.330703 +vt 0.018108 0.331062 +vt 0.017781 0.331427 +vt 0.017233 0.331831 +vt 0.018053 0.348729 +vt 0.019271 0.347684 +vt 0.020227 0.346853 +vt 0.021030 0.346108 +vt 0.021724 0.345403 +vt 0.022325 0.344756 +vt 0.022785 0.344333 +vt 0.022929 0.344353 +vt 0.024541 0.343541 +vt 0.025036 0.342868 +vt 0.025544 0.342145 +vt 0.025986 0.341420 +vt 0.027103 0.340513 +vt 0.025977 0.341144 +vt 0.026926 0.340129 +vt 0.025933 0.340772 +vt 0.026713 0.339902 +vt 0.025893 0.340397 +vt 0.026483 0.339742 +vt 0.025858 0.340019 +vt 0.026237 0.339638 +vt 0.025828 0.339637 +vt 0.025954 0.339602 +vt 0.025828 0.339329 +vt 0.025532 0.339720 +vt 0.023548 0.342878 +vt 0.023697 0.342927 +vt 0.024327 0.341707 +vt 0.025067 0.340526 +vt 0.023880 0.343052 +vt 0.024060 0.343186 +vt 0.024238 0.343329 +vt 0.024414 0.343479 +vt 0.023690 0.342360 +vt 0.023349 0.343003 +vt 0.023139 0.343311 +vt 0.022995 0.343573 +vt 0.022905 0.343831 +vt 0.022872 0.344088 +vt 0.019712 0.347915 +vt 0.019510 0.348188 +vt 0.020179 0.347775 +vt 0.020106 0.347687 +vt 0.020805 0.347336 +vt 0.020863 0.347091 +vt 0.021481 0.346679 +vt 0.021631 0.346293 +vt 0.022154 0.345819 +vt 0.022364 0.345285 +vt 0.022799 0.344719 +vt 0.023069 0.343984 +vt 0.023373 0.343311 +vt 0.023280 0.343161 +vt 0.022988 0.344032 +vt 0.022903 0.344121 +vt 0.022817 0.344227 +vt 0.022728 0.344331 +vt 0.022825 0.344084 +vt 0.022071 0.345151 +vt 0.021342 0.345958 +vt 0.020501 0.346768 +vt 0.019523 0.347616 +vt 0.018388 0.348761 +vt 0.019269 0.348417 +vt 0.019959 0.347666 +vt 0.020768 0.346998 +vt 0.021554 0.346197 +vt 0.022287 0.345237 +vt 0.019000 0.348591 +vt 0.019813 0.347649 +vt 0.020677 0.346916 +vt 0.021481 0.346111 +vt 0.022212 0.345202 +vt 0.018706 0.348707 +vt 0.019667 0.347633 +vt 0.020587 0.346840 +vt 0.021410 0.346032 +vt 0.022141 0.345174 +vt 0.018801 0.331201 +vt 0.018534 0.331105 +vt 0.018263 0.331099 +vt 0.017994 0.331170 +vt 0.017731 0.331315 +vt 0.017473 0.331533 +vt 0.018721 0.329759 +vt 0.018949 0.329339 +vt 0.018982 0.329456 +vt 0.019083 0.329409 +vt 0.019003 0.329585 +vt 0.018945 0.329537 +vt 0.018901 0.329679 +vt 0.018872 0.329602 +vt 0.018801 0.329722 +vt 0.018789 0.329646 +vt 0.018709 0.329723 +vt 0.018711 0.329681 +vt 0.018577 0.330074 +vt 0.018426 0.330484 +vt 0.018229 0.330898 +vt 0.017948 0.331302 +vt 0.018057 0.331239 +vt 0.018273 0.330865 +vt 0.018446 0.330455 +vt 0.018600 0.330038 +vt 0.018168 0.331181 +vt 0.018317 0.330831 +vt 0.018465 0.330426 +vt 0.018621 0.330001 +vt 0.018280 0.331129 +vt 0.018361 0.330797 +vt 0.018485 0.330395 +vt 0.018640 0.329962 +vt 0.018390 0.331083 +vt 0.018404 0.330764 +vt 0.018502 0.330364 +vt 0.018655 0.329920 +vt 0.018509 0.331076 +vt 0.018434 0.330838 +vt 0.018468 0.330522 +vt 0.018565 0.330157 +vt 0.019454 0.329185 +vt 0.018934 0.329352 +vt 0.019158 0.329384 +vt 0.018954 0.329220 +vt 0.019017 0.329548 +vt 0.018966 0.329075 +vt 0.018905 0.329647 +vt 0.018974 0.328932 +vt 0.018978 0.328789 +vt 0.018980 0.328649 +vt 0.020504 0.326826 +vt 0.020399 0.326838 +vt 0.019937 0.327626 +vt 0.019577 0.328038 +vt 0.019416 0.328433 +vt 0.020282 0.326826 +vt 0.019529 0.327961 +vt 0.019482 0.327884 +vt 0.019435 0.327805 +vt 0.019388 0.327725 +vt 0.020166 0.326807 +vt 0.020052 0.326781 +vt 0.019938 0.326749 +vt 0.020175 0.327047 +vt 0.020344 0.326695 +vt 0.020421 0.326544 +vt 0.020474 0.326435 +vt 0.020516 0.326332 +vt 0.020542 0.326233 +vt 0.020512 0.326171 +vt 0.217584 0.631713 +vt 0.233678 0.610235 +vt 0.269432 0.787124 +vt 0.287745 0.762686 +vt 0.238185 0.604720 +vt 0.290653 0.758580 +vt 0.242894 0.599928 +vt 0.293448 0.754172 +vt 0.296122 0.749474 +vt 0.247777 0.595889 +vt 0.311618 0.720772 +vt 0.312874 0.699527 +vt 0.312874 0.717826 +vt 0.313752 0.714376 +vt 0.314203 0.710612 +vt 0.314203 0.706741 +vt 0.313752 0.702977 +vt 0.275884 0.588655 +vt 0.266180 0.582335 +vt 0.267957 0.581459 +vt 0.269787 0.581390 +vt 0.271580 0.582129 +vt 0.273247 0.583642 +vt 0.274706 0.585854 +vt 0.041866 0.115036 +vt 0.043020 0.107791 +vt 0.048589 0.118325 +vt 0.049198 0.113228 +vt 0.044947 0.100979 +vt 0.050386 0.108695 +vt 0.052107 0.104882 +vt 0.047620 0.095047 +vt 0.054286 0.101950 +vt 0.050801 0.090152 +vt 0.054425 0.086726 +vt 0.056858 0.100058 +vt 0.058253 0.084831 +vt 0.059760 0.099306 +vt 0.142316 0.083872 +vt 0.139419 0.087089 +vt 0.014170 0.072258 +vt 0.015397 0.061413 +vt 0.022599 0.075285 +vt 0.023867 0.068264 +vt 0.017916 0.051130 +vt 0.025787 0.061644 +vt 0.028322 0.055753 +vt 0.021563 0.042091 +vt 0.031321 0.050777 +vt 0.026110 0.034835 +vt 0.031286 0.029810 +vt 0.034667 0.046999 +vt 0.036764 0.027343 +vt 0.038213 0.044551 +vt 0.029719 0.340077 +vt 0.022548 0.325778 +vt 0.040190 0.278081 +vt 0.166696 0.043968 +vt 0.166717 0.044600 +vt 0.166791 0.045205 +vt 0.166742 0.028933 +vt 0.166915 0.045771 +vt 0.167083 0.046291 +vt 0.167304 0.046774 +vt 0.167543 0.047172 +vt 0.167733 0.047462 +vt 0.041838 0.272141 +vt 0.014170 0.325778 +vt 0.180231 0.078961 +vt 0.035174 0.351683 +vt 0.175458 0.068806 +vt 0.175307 0.068385 +vt 0.175216 0.067903 +vt 0.175190 0.067386 +vt 0.175234 0.066840 +vt 0.175363 0.066272 +vt 0.020174 0.326147 +vt 0.020312 0.326838 +vt 0.020309 0.327038 +vt 0.022740 0.330459 +vt 0.020666 0.326018 +vt 0.020562 0.326316 +vt 0.020572 0.326213 +vt 0.020393 0.326598 +vt 0.026039 0.339139 +vt 0.027196 0.340158 +vt 0.027006 0.339657 +vt 0.027377 0.339494 +vt 0.026023 0.339515 +vt 0.026255 0.339595 +vt 0.026947 0.340044 +vt 0.027712 0.340443 +vt 0.198512 0.891009 +vt 0.198512 0.841554 +vt 0.201201 0.891009 +vt 0.201201 0.841554 +vt 0.203891 0.891009 +vt 0.203891 0.841554 +vt 0.206581 0.891009 +vt 0.206581 0.841554 +vt 0.209270 0.891009 +vt 0.209270 0.841554 +vt 0.211960 0.891009 +vt 0.211960 0.841554 +vt 0.214650 0.891009 +vt 0.214650 0.841554 +vt 0.217339 0.891009 +vt 0.217339 0.841554 +vt 0.254395 0.825757 +vt 0.229668 0.825757 +vt 0.254395 0.820378 +vt 0.229668 0.820378 +vt 0.254395 0.814999 +vt 0.229668 0.814999 +vt 0.254395 0.809619 +vt 0.229668 0.809619 +vt 0.254395 0.804240 +vt 0.229668 0.804240 +vt 0.254395 0.798861 +vt 0.229668 0.798861 +vt 0.254395 0.793481 +vt 0.229668 0.793481 +vt 0.254395 0.788102 +vt 0.229668 0.788102 +vt 0.171615 0.891009 +vt 0.171615 0.841554 +vt 0.174305 0.891009 +vt 0.174305 0.841554 +vt 0.176994 0.891009 +vt 0.176994 0.841554 +vt 0.179684 0.891009 +vt 0.179684 0.841554 +vt 0.182374 0.891009 +vt 0.182374 0.841554 +vt 0.185063 0.891009 +vt 0.185063 0.841554 +vt 0.187753 0.891009 +vt 0.187753 0.841554 +vt 0.190443 0.891009 +vt 0.190443 0.841554 +vt 0.193132 0.891009 +vt 0.193132 0.841554 +vt 0.195822 0.891009 +vt 0.195822 0.841554 +vt 0.496770 0.360900 +vt 0.494253 0.362711 +vt 0.496344 0.358534 +vt 0.494119 0.360392 +vt 0.495791 0.356126 +vt 0.493746 0.358519 +vt 0.495034 0.353878 +vt 0.493181 0.356986 +vt 0.494068 0.351903 +vt 0.492436 0.355749 +vt 0.492936 0.350248 +vt 0.491505 0.354803 +vt 0.491699 0.348859 +vt 0.490343 0.354114 +vt 0.375646 0.344190 +vt 0.490445 0.349374 +vt 0.375749 0.339450 +vt 0.377394 0.515644 +vt 0.378611 0.516112 +vt 0.357290 0.610646 +vt 0.379850 0.515952 +vt 0.362229 0.621886 +vt 0.381074 0.515145 +vt 0.382333 0.513486 +vt 0.470186 0.519810 +vt 0.383373 0.510938 +vt 0.469267 0.517200 +vt 0.383999 0.508203 +vt 0.468755 0.514421 +vt 0.428861 0.433622 +vt 0.468634 0.511614 +vt 0.430084 0.433434 +vt 0.468845 0.509246 +vt 0.431119 0.432698 +vt 0.469312 0.507246 +vt 0.431993 0.431501 +vt 0.470014 0.505563 +vt 0.432685 0.429903 +vt 0.470902 0.504307 +vt 0.433148 0.428013 +vt 0.471946 0.503517 +vt 0.433393 0.425798 +vt 0.473166 0.503208 +vt 0.433377 0.423282 +vt 0.384242 0.505321 +vt 0.427645 0.433165 +vt 0.384149 0.502829 +vt 0.426624 0.432259 +vt 0.383772 0.500666 +vt 0.425784 0.430905 +vt 0.383135 0.498782 +vt 0.425152 0.429177 +vt 0.382286 0.497301 +vt 0.424768 0.427198 +vt 0.381251 0.496267 +vt 0.424626 0.424929 +vt 0.380008 0.495691 +vt 0.371466 0.353005 +vt 0.378721 0.495724 +vt 0.377482 0.496417 +vt 0.376315 0.497744 +vt 0.375263 0.499714 +vt 0.374417 0.502331 +vt 0.373971 0.505379 +vt 0.374173 0.508446 +vt 0.374672 0.510996 +vt 0.375354 0.512991 +vt 0.376283 0.514578 +vt 0.433029 0.421049 +vt 0.432413 0.419104 +vt 0.431553 0.417492 +vt 0.430464 0.416272 +vt 0.429173 0.415545 +vt 0.427873 0.416118 +vt 0.426767 0.417159 +vt 0.425870 0.418598 +vt 0.425193 0.420395 +vt 0.424763 0.422519 +vt 0.472673 0.522685 +vt 0.473838 0.522978 +vt 0.494816 0.622129 +vt 0.474966 0.522686 +vt 0.499793 0.612545 +vt 0.476030 0.521845 +vt 0.476954 0.520495 +vt 0.477672 0.518727 +vt 0.478198 0.516501 +vt 0.478495 0.513775 +vt 0.478431 0.510693 +vt 0.477687 0.507988 +vt 0.476741 0.505878 +vt 0.475653 0.504364 +vt 0.474454 0.503460 +vt 0.471429 0.521684 +vt 0.499531 0.615319 +vt 0.498997 0.617527 +vt 0.498251 0.619267 +vt 0.497319 0.620592 +vt 0.496196 0.621528 +vt 0.360740 0.620948 +vt 0.359552 0.619689 +vt 0.358607 0.618064 +vt 0.357896 0.616064 +vt 0.357437 0.613638 +vt 0.371640 0.350548 +vt 0.372066 0.348566 +vt 0.372686 0.346978 +vt 0.373478 0.345740 +vt 0.374446 0.344828 +vt 0.496050 0.627989 +vt 0.497427 0.626828 +vt 0.498821 0.625423 +vt 0.500137 0.623588 +vt 0.501303 0.621257 +vt 0.502262 0.618493 +vt 0.503027 0.615451 +vt 0.494813 0.627609 +vt 0.362227 0.627365 +vt 0.354029 0.612867 +vt 0.354551 0.615931 +vt 0.355237 0.619056 +vt 0.356187 0.621983 +vt 0.357409 0.624569 +vt 0.358848 0.626749 +vt 0.360425 0.628591 +vt 0.374445 0.339142 +vt 0.373259 0.340271 +vt 0.372063 0.341617 +vt 0.370943 0.343334 +vt 0.369966 0.345474 +vt 0.369178 0.347978 +vt 0.368568 0.350711 +vt 0.354734 0.610083 +vt 0.368910 0.352442 +vt 0.496731 0.362491 +vt 0.502272 0.612325 +vt 0.549955 0.936679 +vt 0.546329 0.933675 +vt 0.553846 0.937703 +vt 0.543215 0.928896 +vt 0.540826 0.922668 +vt 0.539324 0.915416 +vt 0.538811 0.907633 +vt 0.989866 0.907633 +vt 0.989866 0.099076 +vt 0.538811 0.099076 +vt 0.974831 0.069007 +vt 0.553846 0.069007 +vt 0.539324 0.091294 +vt 0.540826 0.084041 +vt 0.543215 0.077814 +vt 0.546329 0.073035 +vt 0.549955 0.070031 +vt 0.978722 0.070032 +vt 0.982348 0.073035 +vt 0.985462 0.077814 +vt 0.987851 0.084041 +vt 0.989354 0.091294 +vt 0.974831 0.937702 +vt 0.989354 0.915416 +vt 0.987852 0.922668 +vt 0.985462 0.928895 +vt 0.982349 0.933674 +vt 0.978723 0.936678 +vn 0.9659 0.2588 0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.9659 -0.2588 -0.0000 +vn 0.8660 -0.5000 -0.0000 +vn 0.7071 -0.7071 -0.0000 +vn 0.5000 -0.8660 -0.0000 +vn 0.2588 -0.9659 -0.0000 +vn 0.0000 -1.0000 -0.0000 +vn -0.2588 -0.9659 -0.0000 +vn -0.5000 -0.8660 -0.0000 +vn -0.7071 -0.7071 -0.0000 +vn -0.8660 -0.5000 -0.0000 +vn -0.9659 -0.2588 -0.0000 +vn -1.0000 0.0000 -0.0000 +vn -0.9659 0.2588 0.0000 +vn -0.8660 0.5000 0.0000 +vn -0.7071 0.7071 0.0000 +vn -0.5000 0.8660 0.0000 +vn -0.2588 0.9659 0.0000 +vn -0.0000 1.0000 0.0000 +vn 0.2588 0.9659 0.0000 +vn 0.5000 0.8660 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.8660 0.5000 0.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 -0.9808 -0.1951 +vn 0.0000 -0.9659 -0.2588 +vn 0.0000 -0.9239 -0.3827 +vn -0.0000 -0.8660 -0.5000 +vn -0.0000 -0.8315 -0.5556 +vn -0.0000 -0.7071 -0.7071 +vn 0.0000 -0.5556 -0.8315 +vn -0.0000 -0.5000 -0.8660 +vn -0.0000 -0.3827 -0.9239 +vn -0.0000 -0.2588 -0.9659 +vn -0.0000 -0.1951 -0.9808 +vn -0.0000 0.0000 -1.0000 +vn -0.9659 0.0000 -0.2588 +vn -0.9330 -0.2500 -0.2589 +vn -0.8365 -0.4830 -0.2588 +vn -0.6830 -0.6830 -0.2588 +vn -0.4830 -0.8365 -0.2588 +vn -0.2500 -0.9330 -0.2588 +vn -0.2241 -0.8365 -0.5000 +vn -0.1830 -0.6830 -0.7071 +vn -0.1294 -0.4830 -0.8660 +vn -0.0670 -0.2500 -0.9659 +vn -0.8660 -0.0000 -0.5000 +vn -0.8365 -0.2241 -0.5000 +vn -0.7500 -0.4330 -0.5000 +vn -0.6124 -0.6124 -0.5000 +vn -0.4330 -0.7500 -0.5000 +vn -0.7071 -0.0000 -0.7071 +vn -0.6830 -0.1830 -0.7071 +vn -0.6124 -0.3536 -0.7071 +vn -0.5000 -0.5000 -0.7071 +vn -0.3536 -0.6124 -0.7071 +vn -0.5000 -0.0000 -0.8660 +vn -0.4830 -0.1294 -0.8660 +vn -0.4330 -0.2500 -0.8660 +vn -0.3536 -0.3536 -0.8660 +vn -0.2500 -0.4330 -0.8660 +vn -0.2588 0.0000 -0.9659 +vn -0.2500 -0.0670 -0.9659 +vn -0.2241 -0.1294 -0.9659 +vn -0.1830 -0.1830 -0.9659 +vn -0.1294 -0.2241 -0.9659 +vn 0.0000 0.9659 -0.2588 +vn -0.2500 0.9330 -0.2588 +vn -0.4830 0.8365 -0.2588 +vn -0.6830 0.6830 -0.2588 +vn -0.8365 0.4830 -0.2588 +vn -0.9330 0.2500 -0.2588 +vn -0.8365 0.2241 -0.5000 +vn -0.6830 0.1830 -0.7071 +vn -0.4830 0.1294 -0.8660 +vn -0.2500 0.0670 -0.9659 +vn -0.0000 0.8660 -0.5000 +vn -0.2241 0.8365 -0.5000 +vn -0.4330 0.7500 -0.5000 +vn -0.6124 0.6124 -0.5000 +vn -0.7500 0.4330 -0.5000 +vn -0.0000 0.7071 -0.7071 +vn -0.1830 0.6830 -0.7071 +vn -0.3536 0.6124 -0.7071 +vn -0.5000 0.5000 -0.7071 +vn -0.6124 0.3536 -0.7071 +vn -0.0000 0.5000 -0.8660 +vn -0.1294 0.4830 -0.8660 +vn -0.2500 0.4330 -0.8660 +vn -0.3535 0.3535 -0.8660 +vn -0.4330 0.2500 -0.8660 +vn 0.0000 0.2588 -0.9659 +vn -0.0670 0.2500 -0.9659 +vn -0.1294 0.2242 -0.9659 +vn -0.1830 0.1830 -0.9659 +vn -0.2241 0.1294 -0.9659 +vn 0.9659 -0.0000 -0.2588 +vn 0.9330 0.2500 -0.2588 +vn 0.8365 0.4830 -0.2588 +vn 0.6830 0.6830 -0.2588 +vn 0.4830 0.8365 -0.2588 +vn 0.2500 0.9330 -0.2588 +vn 0.2241 0.8365 -0.5000 +vn 0.1830 0.6830 -0.7071 +vn 0.1294 0.4830 -0.8660 +vn 0.0670 0.2500 -0.9659 +vn 0.8660 0.0000 -0.5000 +vn 0.8365 0.2241 -0.5000 +vn 0.7500 0.4330 -0.5000 +vn 0.6124 0.6124 -0.5000 +vn 0.4330 0.7500 -0.5000 +vn 0.7071 0.0000 -0.7071 +vn 0.6830 0.1830 -0.7071 +vn 0.6124 0.3536 -0.7071 +vn 0.5000 0.5000 -0.7071 +vn 0.3536 0.6124 -0.7071 +vn 0.5000 0.0000 -0.8660 +vn 0.4830 0.1294 -0.8660 +vn 0.4330 0.2500 -0.8660 +vn 0.3536 0.3536 -0.8660 +vn 0.2500 0.4330 -0.8660 +vn 0.2588 -0.0000 -0.9659 +vn 0.2500 0.0670 -0.9659 +vn 0.2241 0.1294 -0.9659 +vn 0.1830 0.1830 -0.9659 +vn 0.1294 0.2241 -0.9659 +vn 0.2500 -0.9330 -0.2588 +vn 0.4830 -0.8365 -0.2588 +vn 0.6830 -0.6830 -0.2588 +vn 0.8365 -0.4830 -0.2588 +vn 0.9330 -0.2500 -0.2588 +vn 0.8365 -0.2241 -0.5000 +vn 0.6830 -0.1830 -0.7071 +vn 0.4830 -0.1294 -0.8660 +vn 0.2500 -0.0670 -0.9659 +vn 0.2241 -0.8365 -0.5000 +vn 0.4330 -0.7500 -0.5000 +vn 0.6124 -0.6124 -0.5000 +vn 0.7500 -0.4330 -0.5000 +vn 0.1830 -0.6830 -0.7071 +vn 0.3536 -0.6124 -0.7071 +vn 0.5000 -0.5000 -0.7071 +vn 0.6124 -0.3536 -0.7071 +vn 0.1294 -0.4830 -0.8660 +vn 0.2500 -0.4330 -0.8660 +vn 0.3536 -0.3536 -0.8660 +vn 0.4330 -0.2500 -0.8660 +vn 0.0670 -0.2500 -0.9659 +vn 0.1294 -0.2242 -0.9659 +vn 0.1830 -0.1830 -0.9659 +vn 0.2242 -0.1294 -0.9659 +vn 0.0000 -0.9659 -0.2589 +vn 0.2588 -0.0000 0.9659 +vn 0.5000 0.0000 0.8660 +vn 0.7071 0.0000 0.7071 +vn 0.8660 0.0000 0.5000 +vn 0.9659 -0.0000 0.2588 +vn -0.0000 0.9659 0.2588 +vn 0.2500 0.9330 0.2588 +vn 0.4830 0.8365 0.2588 +vn 0.6830 0.6830 0.2588 +vn 0.8365 0.4830 0.2588 +vn 0.9330 0.2500 0.2589 +vn 0.8365 0.2241 0.5000 +vn 0.6830 0.1830 0.7071 +vn 0.4830 0.1294 0.8660 +vn 0.2500 0.0670 0.9659 +vn 0.0000 0.8660 0.5000 +vn 0.2241 0.8365 0.5000 +vn 0.4330 0.7500 0.5000 +vn 0.6124 0.6124 0.5000 +vn 0.7500 0.4330 0.5000 +vn 0.0000 0.7071 0.7071 +vn 0.1830 0.6830 0.7071 +vn 0.3535 0.6124 0.7071 +vn 0.5000 0.5000 0.7071 +vn 0.6124 0.3536 0.7071 +vn 0.0000 0.5000 0.8660 +vn 0.1294 0.4830 0.8660 +vn 0.2500 0.4330 0.8660 +vn 0.3535 0.3535 0.8660 +vn 0.4330 0.2500 0.8660 +vn -0.0000 0.2588 0.9659 +vn 0.0670 0.2500 0.9659 +vn 0.1294 0.2241 0.9659 +vn 0.1830 0.1830 0.9659 +vn 0.2241 0.1294 0.9659 +vn -0.9659 -0.0000 0.2588 +vn -0.9330 0.2500 0.2588 +vn -0.8365 0.4830 0.2588 +vn -0.6830 0.6830 0.2588 +vn -0.4830 0.8365 0.2588 +vn -0.2500 0.9330 0.2588 +vn -0.2241 0.8365 0.5000 +vn -0.1830 0.6830 0.7071 +vn -0.1294 0.4830 0.8660 +vn -0.0670 0.2500 0.9659 +vn -0.8660 0.0000 0.5000 +vn -0.8365 0.2241 0.5000 +vn -0.7500 0.4330 0.5000 +vn -0.6124 0.6124 0.5000 +vn -0.4330 0.7500 0.5000 +vn -0.7071 0.0000 0.7071 +vn -0.6830 0.1830 0.7071 +vn -0.6124 0.3535 0.7071 +vn -0.5000 0.5000 0.7071 +vn -0.3536 0.6124 0.7071 +vn -0.5000 0.0000 0.8660 +vn -0.4830 0.1294 0.8660 +vn -0.4330 0.2500 0.8660 +vn -0.3536 0.3536 0.8660 +vn -0.2500 0.4330 0.8660 +vn -0.2588 -0.0000 0.9659 +vn -0.2500 0.0670 0.9659 +vn -0.2241 0.1294 0.9659 +vn -0.1830 0.1830 0.9659 +vn -0.1294 0.2242 0.9659 +vn 0.0000 -0.9659 0.2588 +vn -0.2500 -0.9330 0.2588 +vn -0.4830 -0.8365 0.2588 +vn -0.6830 -0.6830 0.2588 +vn -0.8365 -0.4830 0.2588 +vn -0.9330 -0.2500 0.2588 +vn -0.8365 -0.2241 0.5000 +vn -0.6830 -0.1830 0.7071 +vn -0.4830 -0.1294 0.8660 +vn -0.2500 -0.0670 0.9659 +vn -0.0000 -0.8660 0.5000 +vn -0.2241 -0.8365 0.5000 +vn -0.4330 -0.7500 0.5000 +vn -0.6124 -0.6124 0.5000 +vn -0.7500 -0.4330 0.5000 +vn -0.0000 -0.7071 0.7071 +vn -0.1830 -0.6830 0.7071 +vn -0.3535 -0.6124 0.7071 +vn -0.5000 -0.5000 0.7071 +vn -0.6124 -0.3535 0.7071 +vn -0.0000 -0.5000 0.8660 +vn -0.1294 -0.4830 0.8660 +vn -0.2500 -0.4330 0.8660 +vn -0.3535 -0.3535 0.8660 +vn -0.4330 -0.2500 0.8660 +vn 0.0000 -0.2588 0.9659 +vn -0.0670 -0.2500 0.9659 +vn -0.1294 -0.2242 0.9659 +vn -0.1830 -0.1830 0.9659 +vn -0.2241 -0.1294 0.9659 +vn 0.0670 -0.2500 0.9659 +vn 0.1294 -0.2241 0.9659 +vn 0.1830 -0.1830 0.9659 +vn 0.2241 -0.1294 0.9659 +vn 0.2500 -0.0670 0.9659 +vn 0.4830 -0.1294 0.8660 +vn 0.6830 -0.1830 0.7071 +vn 0.8365 -0.2241 0.5000 +vn 0.9330 -0.2500 0.2588 +vn 0.1294 -0.4830 0.8660 +vn 0.2500 -0.4330 0.8660 +vn 0.3536 -0.3536 0.8660 +vn 0.4330 -0.2500 0.8660 +vn 0.1830 -0.6830 0.7071 +vn 0.3536 -0.6124 0.7071 +vn 0.5000 -0.5000 0.7071 +vn 0.6124 -0.3536 0.7071 +vn 0.2241 -0.8365 0.5000 +vn 0.4330 -0.7500 0.5000 +vn 0.6124 -0.6124 0.5000 +vn 0.7500 -0.4330 0.5000 +vn 0.2500 -0.9330 0.2588 +vn 0.4830 -0.8365 0.2588 +vn 0.6830 -0.6830 0.2588 +vn 0.8365 -0.4830 0.2588 +vn 0.9944 -0.1056 -0.0000 +vn 0.9874 -0.1580 0.0000 +vn 0.9583 -0.1211 -0.2588 +vn 0.9538 -0.1526 -0.2588 +vn 0.8552 -0.1368 -0.5000 +vn 0.8592 -0.1086 -0.5000 +vn 0.6982 -0.1117 -0.7071 +vn 0.7015 -0.0886 -0.7071 +vn 0.4937 -0.0790 -0.8660 +vn 0.4961 -0.0627 -0.8660 +vn 0.2556 -0.0409 -0.9659 +vn 0.2568 -0.0324 -0.9659 +vn 0.9986 -0.0528 -0.0000 +vn 0.8551 -0.1368 -0.5000 +vn 0.2332 -0.9724 0.0000 +vn 0.4535 -0.8912 -0.0000 +vn 0.4829 -0.8365 -0.2588 +vn 0.6489 -0.7609 0.0000 +vn 0.8084 -0.5886 0.0000 +vn 0.9234 -0.3839 -0.0000 +vn 0.8365 -0.2242 -0.5000 +vn 0.3535 -0.6124 -0.7071 +vn 0.3536 -0.3535 -0.8660 +vn -0.8969 -0.4422 0.0000 +vn -0.9724 -0.2334 -0.0000 +vn -0.9330 -0.2500 -0.2588 +vn -0.9393 -0.2254 -0.2588 +vn -0.8421 -0.2021 -0.5000 +vn -0.8365 -0.2242 -0.5000 +vn -0.6876 -0.1650 -0.7071 +vn -0.4862 -0.1167 -0.8660 +vn -0.2517 -0.0604 -0.9659 +vn -0.1294 -0.2242 -0.9659 +vn -0.3536 -0.3535 -0.8660 +vn -0.2207 -0.9753 0.0000 +vn -0.4305 -0.9026 -0.0000 +vn -0.6191 -0.7853 -0.0000 +vn -0.7772 -0.6293 0.0000 +vn -0.9392 -0.2254 -0.2588 +vn -0.9969 -0.0784 0.0000 +vn -0.9877 -0.1564 0.0000 +vn 0.0000 0.0001 -1.0000 +vn 0.0000 -0.0001 -1.0000 +vn 0.2556 -0.0409 0.9659 +vn 0.4937 -0.0790 0.8660 +vn 0.6982 -0.1117 0.7071 +vn 0.8552 -0.1368 0.5000 +vn 0.9538 -0.1526 0.2588 +vn 0.8551 -0.1368 0.5000 +vn 0.1294 -0.2242 0.9659 +vn 0.8365 -0.2242 0.5000 +vn 0.4829 -0.8365 0.2588 +vn 0.3536 -0.3535 0.8660 +vn -0.2517 -0.0604 0.9659 +vn -0.4862 -0.1167 0.8660 +vn -0.6876 -0.1650 0.7071 +vn -0.8421 -0.2021 0.5000 +vn -0.9392 -0.2254 0.2588 +vn -0.3536 -0.6124 0.7071 +vn -0.3536 -0.3535 0.8660 +vn -0.1294 -0.2241 0.9659 +vn -0.9393 -0.2254 0.2588 +vn -0.2568 -0.0324 0.9659 +vn -0.4960 -0.0627 0.8660 +vn -0.7015 -0.0886 0.7071 +vn -0.8592 -0.1085 0.5000 +vn -0.9583 -0.1211 0.2588 +vn 0.7433 0.6690 0.0000 +vn 0.8830 0.4693 0.0000 +vn 0.7433 0.6689 0.0000 +vn 0.9703 0.2419 0.0000 +vn 0.9703 0.2418 0.0000 +vn 0.9703 -0.2419 -0.0000 +vn 0.9703 -0.2418 -0.0000 +vn 0.8830 -0.4693 -0.0000 +vn 0.7433 -0.6690 0.0000 +vn -0.7433 -0.6690 -0.0000 +vn -0.8830 -0.4693 -0.0000 +vn -0.9703 -0.2418 -0.0000 +vn -0.9703 -0.2419 -0.0000 +vn -0.9703 0.2418 0.0000 +vn -0.9703 0.2419 0.0000 +vn -0.8830 0.4693 0.0000 +vn -0.7433 0.6690 0.0000 +vn -0.7433 0.6690 -0.0001 +vn -0.7433 0.6690 0.0001 +vn -0.7433 0.6689 -0.0002 +s 1 +f 1/1/1 2/2/1 3/3/2 +f 3/3/2 2/2/1 4/4/2 +f 3/3/2 4/4/2 5/5/3 +f 5/5/3 4/4/2 6/6/3 +f 5/5/3 6/6/3 7/7/4 +f 7/7/4 6/6/3 8/8/4 +f 7/7/4 8/8/4 9/9/5 +f 9/9/5 8/8/4 10/10/5 +f 9/9/5 10/10/5 11/11/6 +f 11/11/6 10/10/5 12/12/6 +f 11/11/6 12/12/6 13/13/7 +f 13/13/7 12/12/6 14/14/7 +f 13/13/7 14/14/7 15/15/8 +f 15/15/8 14/14/7 16/16/8 +f 15/15/8 16/16/8 17/17/9 +f 17/17/9 16/16/8 18/18/9 +f 17/17/9 18/18/9 19/19/10 +f 19/19/10 18/18/9 20/20/10 +f 19/19/10 20/20/10 21/21/11 +f 21/21/11 20/20/10 22/22/11 +f 21/21/11 22/22/11 23/23/12 +f 23/23/12 22/22/11 24/24/12 +f 23/23/12 24/24/12 25/25/13 +f 25/25/13 24/24/12 26/26/13 +f 25/25/13 26/26/13 27/27/14 +f 27/27/14 26/26/13 28/28/14 +f 27/27/14 28/28/14 29/29/15 +f 29/29/15 28/28/14 30/30/15 +f 29/31/15 30/32/15 31/33/16 +f 31/33/16 30/32/15 32/34/16 +f 31/33/16 32/34/16 33/35/17 +f 33/35/17 32/34/16 34/36/17 +f 33/35/17 34/36/17 35/37/18 +f 35/37/18 34/36/17 36/38/18 +f 35/37/18 36/38/18 37/39/19 +f 37/39/19 36/38/18 38/40/19 +f 37/39/19 38/40/19 39/41/20 +f 39/41/20 38/40/19 40/42/20 +f 39/41/20 40/42/20 41/43/21 +f 41/43/21 40/42/20 42/44/21 +f 41/43/21 42/44/21 43/45/22 +f 43/45/22 42/44/21 44/46/22 +f 43/45/22 44/46/22 45/47/23 +f 45/47/23 44/46/22 46/48/23 +f 45/47/23 46/48/23 47/49/24 +f 47/49/24 46/48/23 48/50/24 +f 47/49/24 48/50/24 1/1/1 +f 1/1/1 48/50/24 2/2/1 +f 49/51/1 50/52/1 51/53/2 +f 51/53/2 50/52/1 52/54/2 +f 51/53/2 52/54/2 53/55/3 +f 53/55/3 52/54/2 54/56/3 +f 53/55/3 54/56/3 55/57/4 +f 55/57/4 54/56/3 56/58/4 +f 55/57/4 56/58/4 57/59/5 +f 57/59/5 56/58/4 58/60/5 +f 57/59/5 58/60/5 59/61/6 +f 59/61/6 58/60/5 60/62/6 +f 59/61/6 60/62/6 61/63/7 +f 61/63/7 60/62/6 62/64/7 +f 61/63/7 62/64/7 63/65/8 +f 63/65/8 62/64/7 64/66/8 +f 63/65/8 64/66/8 65/67/9 +f 65/67/9 64/66/8 66/68/9 +f 65/67/9 66/68/9 67/69/10 +f 67/69/10 66/68/9 68/70/10 +f 67/69/10 68/70/10 69/71/11 +f 69/71/11 68/70/10 70/72/11 +f 69/71/11 70/72/11 71/73/12 +f 71/73/12 70/72/11 72/74/12 +f 71/73/12 72/74/12 73/75/13 +f 73/75/13 72/74/12 74/76/13 +f 73/75/13 74/76/13 75/77/14 +f 75/77/14 74/76/13 76/78/14 +f 75/79/14 76/80/14 77/81/15 +f 77/81/15 76/80/14 78/82/15 +f 77/81/15 78/82/15 79/83/16 +f 79/83/16 78/82/15 80/84/16 +f 79/83/16 80/84/16 81/85/17 +f 81/85/17 80/84/16 82/86/17 +f 81/85/17 82/86/17 83/87/18 +f 83/87/18 82/86/17 84/88/18 +f 83/87/18 84/88/18 85/89/19 +f 85/89/19 84/88/18 86/90/19 +f 85/89/19 86/90/19 87/91/20 +f 87/91/20 86/90/19 88/92/20 +f 87/91/20 88/92/20 89/93/21 +f 89/93/21 88/92/20 90/94/21 +f 89/93/21 90/94/21 91/95/22 +f 91/95/22 90/94/21 92/96/22 +f 91/95/22 92/96/22 93/97/23 +f 93/97/23 92/96/22 94/98/23 +f 93/97/23 94/98/23 95/99/24 +f 95/99/24 94/98/23 96/100/24 +f 95/99/24 96/100/24 49/51/1 +f 49/51/1 96/100/24 50/52/1 +f 1/101/25 3/102/25 97/103/25 +f 97/103/25 3/102/25 5/104/25 +f 97/103/25 5/104/25 7/105/25 +f 7/105/25 9/106/25 97/103/25 +f 97/103/25 9/106/25 11/107/25 +f 97/103/25 11/107/25 13/108/25 +f 13/108/25 15/109/25 97/103/25 +f 97/103/25 15/109/25 98/110/25 +f 98/110/25 15/109/25 17/111/25 +f 98/110/25 17/111/25 19/112/25 +f 19/112/25 21/113/25 98/110/25 +f 98/110/25 21/113/25 23/114/25 +f 98/110/25 23/114/25 25/115/25 +f 25/115/25 27/116/25 98/110/25 +f 98/110/25 27/116/25 99/117/25 +f 98/110/25 99/117/25 100/118/25 +f 27/116/25 29/119/25 99/117/25 +f 99/117/25 29/119/25 31/120/25 +f 99/117/25 31/120/25 33/121/25 +f 33/121/25 35/122/25 99/117/25 +f 99/117/25 35/122/25 37/123/25 +f 99/117/25 37/123/25 39/124/25 +f 39/124/25 41/125/25 99/117/25 +f 99/117/25 41/125/25 43/126/25 +f 99/117/25 43/126/25 101/127/25 +f 101/127/25 43/126/25 102/128/25 +f 101/127/25 102/128/25 103/129/25 +f 43/126/25 45/130/25 102/128/25 +f 102/128/25 45/130/25 104/131/25 +f 104/131/25 45/130/25 47/132/25 +f 104/131/25 47/132/25 105/133/25 +f 105/133/25 47/132/25 1/101/25 +f 105/133/25 1/101/25 106/134/25 +f 106/134/25 1/101/25 97/103/25 +f 106/134/25 97/103/25 107/135/25 +f 49/136/25 51/137/25 108/138/25 +f 108/138/25 51/137/25 53/139/25 +f 108/138/25 53/139/25 109/140/25 +f 109/140/25 53/139/25 55/141/25 +f 109/140/25 55/141/25 110/142/25 +f 110/142/25 55/141/25 57/143/25 +f 110/142/25 57/143/25 100/118/25 +f 100/118/25 57/143/25 59/144/25 +f 100/118/25 59/144/25 61/145/25 +f 61/145/25 63/146/25 100/118/25 +f 100/118/25 63/146/25 98/110/25 +f 98/110/25 63/146/25 111/147/25 +f 111/147/25 63/146/25 65/148/25 +f 111/147/25 65/148/25 67/149/25 +f 67/149/25 69/150/25 111/147/25 +f 111/147/25 69/150/25 71/151/25 +f 111/147/25 71/151/25 73/152/25 +f 111/147/25 73/152/25 112/153/25 +f 112/153/25 73/152/25 75/154/25 +f 112/153/25 75/154/25 113/155/25 +f 113/155/25 75/154/25 114/156/25 +f 114/156/25 75/154/25 115/157/25 +f 115/157/25 75/154/25 116/158/25 +f 116/158/25 75/154/25 77/159/25 +f 116/158/25 77/159/25 117/160/25 +f 117/160/25 77/159/25 79/161/25 +f 117/160/25 79/161/25 81/162/25 +f 81/162/25 83/163/25 117/160/25 +f 117/160/25 83/163/25 85/164/25 +f 117/160/25 85/164/25 87/165/25 +f 89/166/25 118/167/25 87/165/25 +f 87/165/25 118/167/25 119/168/25 +f 87/165/25 119/168/25 117/160/25 +f 89/166/25 91/169/25 118/167/25 +f 118/167/25 91/169/25 93/170/25 +f 118/167/25 93/170/25 120/171/25 +f 120/171/25 93/170/25 95/172/25 +f 120/171/25 95/172/25 121/173/25 +f 121/173/25 95/172/25 49/136/25 +f 121/173/25 49/136/25 108/138/25 +f 118/167/25 101/127/25 119/168/25 +f 119/168/25 101/127/25 122/174/25 +f 119/168/25 122/174/25 123/175/25 +f 119/168/25 124/176/25 107/135/25 +f 107/135/25 124/176/25 125/177/25 +f 107/135/25 125/177/25 126/178/25 +f 127/179/25 128/180/25 107/135/25 +f 107/135/25 128/180/25 106/134/25 +f 103/129/25 129/181/25 101/127/25 +f 101/127/25 129/181/25 130/182/25 +f 101/127/25 130/182/25 131/183/25 +f 131/183/25 132/184/25 101/127/25 +f 101/127/25 132/184/25 133/185/25 +f 101/127/25 133/185/25 134/186/25 +f 134/186/25 122/174/25 101/127/25 +f 123/175/25 135/187/25 119/168/25 +f 119/168/25 135/187/25 136/188/25 +f 119/168/25 136/188/25 137/189/25 +f 137/189/25 138/190/25 119/168/25 +f 119/168/25 138/190/25 124/176/25 +f 126/178/25 139/191/25 107/135/25 +f 107/135/25 139/191/25 140/192/25 +f 107/135/25 140/192/25 127/179/25 +f 141/193/8 142/194/8 143/195/26 +f 143/195/26 142/194/8 144/196/27 +f 143/195/26 144/196/27 145/197/28 +f 145/197/28 144/196/27 146/198/29 +f 145/197/28 146/198/29 147/199/30 +f 147/199/30 146/198/29 148/200/31 +f 147/199/30 148/200/31 149/201/31 +f 149/201/31 148/200/31 150/202/32 +f 150/202/32 148/200/31 151/203/33 +f 150/202/32 151/203/33 152/204/34 +f 152/204/34 151/203/33 153/205/35 +f 152/204/34 153/205/35 154/206/36 +f 154/206/36 153/205/35 155/207/37 +f 154/206/36 155/207/37 156/208/37 +f 157/209/14 158/210/38 159/211/13 +f 159/211/13 158/210/38 160/212/39 +f 159/211/13 160/212/39 161/213/12 +f 161/213/12 160/212/39 162/214/40 +f 161/213/12 162/214/40 163/215/11 +f 163/215/11 162/214/40 164/216/41 +f 163/215/11 164/216/41 165/217/10 +f 165/217/10 164/216/41 166/218/42 +f 165/217/10 166/218/42 167/219/9 +f 167/219/9 166/218/42 168/220/43 +f 167/219/9 168/220/43 142/194/8 +f 142/194/8 168/220/43 144/196/27 +f 144/196/27 168/220/43 169/221/44 +f 144/196/27 169/221/44 146/198/29 +f 146/198/29 169/221/44 170/222/45 +f 146/198/29 170/222/45 148/200/31 +f 148/200/31 170/222/45 171/223/46 +f 148/200/31 171/223/46 151/203/33 +f 151/203/33 171/223/46 172/224/47 +f 151/203/33 172/224/47 153/205/35 +f 153/205/35 172/224/47 173/225/37 +f 153/205/35 173/225/37 155/207/37 +f 158/210/38 174/226/48 160/212/39 +f 160/212/39 174/226/48 175/227/49 +f 160/212/39 175/227/49 162/214/40 +f 162/214/40 175/227/49 176/228/50 +f 162/214/40 176/228/50 164/216/41 +f 164/216/41 176/228/50 177/229/51 +f 164/216/41 177/229/51 166/218/42 +f 166/218/42 177/229/51 178/230/52 +f 166/218/42 178/230/52 168/220/43 +f 168/220/43 178/230/52 169/221/44 +f 174/226/48 179/231/53 175/227/49 +f 175/227/49 179/231/53 180/232/54 +f 175/227/49 180/232/54 176/228/50 +f 176/228/50 180/232/54 181/233/55 +f 176/228/50 181/233/55 177/229/51 +f 177/229/51 181/233/55 182/234/56 +f 177/229/51 182/234/56 178/230/52 +f 178/230/52 182/234/56 183/235/57 +f 178/230/52 183/235/57 169/221/44 +f 169/221/44 183/235/57 170/222/45 +f 179/231/53 184/236/58 180/232/54 +f 180/232/54 184/236/58 185/237/59 +f 180/232/54 185/237/59 181/233/55 +f 181/233/55 185/237/59 186/238/60 +f 181/233/55 186/238/60 182/234/56 +f 182/234/56 186/238/60 187/239/61 +f 182/234/56 187/239/61 183/235/57 +f 183/235/57 187/239/61 188/240/62 +f 183/235/57 188/240/62 170/222/45 +f 170/222/45 188/240/62 171/223/46 +f 184/236/58 189/241/63 185/237/59 +f 185/237/59 189/241/63 190/242/64 +f 185/237/59 190/242/64 186/238/60 +f 186/238/60 190/242/64 191/243/65 +f 186/238/60 191/243/65 187/239/61 +f 187/239/61 191/243/65 192/244/66 +f 187/239/61 192/244/66 188/240/62 +f 188/240/62 192/244/66 193/245/67 +f 188/240/62 193/245/67 171/223/46 +f 171/223/46 193/245/67 172/224/47 +f 189/241/63 194/246/37 190/242/64 +f 190/242/64 194/246/37 195/247/37 +f 190/242/64 195/247/37 191/243/65 +f 191/243/65 195/247/37 196/248/37 +f 191/243/65 196/248/37 192/244/66 +f 192/244/66 196/248/37 197/249/37 +f 192/244/66 197/249/37 193/245/67 +f 193/245/67 197/249/37 198/250/37 +f 193/245/67 198/250/37 172/224/47 +f 172/224/47 198/250/37 173/225/37 +f 157/209/14 199/251/14 158/210/38 +f 158/210/38 199/251/14 200/252/38 +f 158/210/38 200/252/38 174/226/48 +f 174/226/48 200/252/38 201/253/48 +f 174/226/48 201/253/48 179/231/53 +f 179/231/53 201/253/48 202/254/53 +f 179/231/53 202/254/53 184/236/58 +f 184/236/58 202/254/53 203/255/58 +f 184/236/58 203/255/58 189/241/63 +f 189/241/63 203/255/58 204/256/63 +f 189/241/63 204/256/63 194/246/37 +f 194/246/37 204/256/63 205/257/37 +f 206/258/20 207/259/68 208/260/19 +f 208/260/19 207/259/68 209/261/69 +f 208/260/19 209/261/69 210/262/18 +f 210/262/18 209/261/69 211/263/70 +f 210/262/18 211/263/70 212/264/17 +f 212/264/17 211/263/70 213/265/71 +f 212/264/17 213/265/71 214/266/16 +f 214/266/16 213/265/71 215/267/72 +f 214/266/16 215/267/72 216/268/15 +f 216/268/15 215/267/72 217/269/73 +f 216/268/15 217/269/73 199/251/14 +f 199/251/14 217/269/73 200/252/38 +f 200/252/38 217/269/73 218/270/74 +f 200/252/38 218/270/74 201/253/48 +f 201/253/48 218/270/74 219/271/75 +f 201/253/48 219/271/75 202/254/53 +f 202/254/53 219/271/75 220/272/76 +f 202/254/53 220/272/76 203/255/58 +f 203/255/58 220/272/76 221/273/77 +f 203/255/58 221/273/77 204/256/63 +f 204/256/63 221/273/77 222/274/37 +f 204/256/63 222/274/37 205/257/37 +f 207/259/68 223/275/78 209/261/69 +f 209/261/69 223/275/78 224/276/79 +f 209/261/69 224/276/79 211/263/70 +f 211/263/70 224/276/79 225/277/80 +f 211/263/70 225/277/80 213/265/71 +f 213/265/71 225/277/80 226/278/81 +f 213/265/71 226/278/81 215/267/72 +f 215/267/72 226/278/81 227/279/82 +f 215/267/72 227/279/82 217/269/73 +f 217/269/73 227/279/82 218/270/74 +f 223/275/78 228/280/83 224/276/79 +f 224/276/79 228/280/83 229/281/84 +f 224/276/79 229/281/84 225/277/80 +f 225/277/80 229/281/84 230/282/85 +f 225/277/80 230/282/85 226/278/81 +f 226/278/81 230/282/85 231/283/86 +f 226/278/81 231/283/86 227/279/82 +f 227/279/82 231/283/86 232/284/87 +f 227/279/82 232/284/87 218/270/74 +f 218/270/74 232/284/87 219/271/75 +f 228/280/83 233/285/88 229/281/84 +f 229/281/84 233/285/88 234/286/89 +f 229/281/84 234/286/89 230/282/85 +f 230/282/85 234/286/89 235/287/90 +f 230/282/85 235/287/90 231/283/86 +f 231/283/86 235/287/90 236/288/91 +f 231/283/86 236/288/91 232/284/87 +f 232/284/87 236/288/91 237/289/92 +f 232/284/87 237/289/92 219/271/75 +f 219/271/75 237/289/92 220/272/76 +f 233/285/88 238/290/93 234/286/89 +f 234/286/89 238/290/93 239/291/94 +f 234/286/89 239/291/94 235/287/90 +f 235/287/90 239/291/94 240/292/95 +f 235/287/90 240/292/95 236/288/91 +f 236/288/91 240/292/95 241/293/96 +f 236/288/91 241/293/96 237/289/92 +f 237/289/92 241/293/96 242/294/97 +f 237/289/92 242/294/97 220/272/76 +f 220/272/76 242/294/97 221/273/77 +f 238/290/93 243/295/37 239/291/94 +f 239/291/94 243/295/37 244/296/37 +f 239/291/94 244/296/37 240/292/95 +f 240/292/95 244/296/37 245/297/37 +f 240/292/95 245/297/37 241/293/96 +f 241/293/96 245/297/37 246/298/37 +f 241/293/96 246/298/37 242/294/97 +f 242/294/97 246/298/37 247/299/37 +f 242/294/97 247/299/37 221/273/77 +f 221/273/77 247/299/37 222/274/37 +f 206/258/20 248/300/20 207/259/68 +f 207/259/68 248/300/20 249/301/68 +f 207/259/68 249/301/68 223/275/78 +f 223/275/78 249/301/68 250/302/78 +f 223/275/78 250/302/78 228/280/83 +f 228/280/83 250/302/78 251/303/83 +f 228/280/83 251/303/83 233/285/88 +f 233/285/88 251/303/83 252/304/88 +f 233/285/88 252/304/88 238/290/93 +f 238/290/93 252/304/88 253/305/93 +f 238/290/93 253/305/93 243/295/37 +f 243/295/37 253/305/93 254/306/37 +f 255/307/2 256/308/98 257/309/1 +f 257/309/1 256/308/98 258/310/99 +f 257/309/1 258/310/99 259/311/24 +f 259/311/24 258/310/99 260/312/100 +f 259/311/24 260/312/100 261/313/23 +f 261/313/23 260/312/100 262/314/101 +f 261/313/23 262/314/101 263/315/22 +f 263/315/22 262/314/101 264/316/102 +f 263/315/22 264/316/102 265/317/21 +f 265/317/21 264/316/102 266/318/103 +f 265/317/21 266/318/103 248/300/20 +f 248/300/20 266/318/103 249/301/68 +f 249/301/68 266/318/103 267/319/104 +f 249/301/68 267/319/104 250/302/78 +f 250/302/78 267/319/104 268/320/105 +f 250/302/78 268/320/105 251/303/83 +f 251/303/83 268/320/105 269/321/106 +f 251/303/83 269/321/106 252/304/88 +f 252/304/88 269/321/106 270/322/107 +f 252/304/88 270/322/107 253/305/93 +f 253/305/93 270/322/107 271/323/37 +f 253/305/93 271/323/37 254/306/37 +f 256/308/98 272/324/108 258/310/99 +f 258/310/99 272/324/108 273/325/109 +f 258/310/99 273/325/109 260/312/100 +f 260/312/100 273/325/109 274/326/110 +f 260/312/100 274/326/110 262/314/101 +f 262/314/101 274/326/110 275/327/111 +f 262/314/101 275/327/111 264/316/102 +f 264/316/102 275/327/111 276/328/112 +f 264/316/102 276/328/112 266/318/103 +f 266/318/103 276/328/112 267/319/104 +f 272/324/108 277/329/113 273/325/109 +f 273/325/109 277/329/113 278/330/114 +f 273/325/109 278/330/114 274/326/110 +f 274/326/110 278/330/114 279/331/115 +f 274/326/110 279/331/115 275/327/111 +f 275/327/111 279/331/115 280/332/116 +f 275/327/111 280/332/116 276/328/112 +f 276/328/112 280/332/116 281/333/117 +f 276/328/112 281/333/117 267/319/104 +f 267/319/104 281/333/117 268/320/105 +f 277/329/113 282/334/118 278/330/114 +f 278/330/114 282/334/118 283/335/119 +f 278/330/114 283/335/119 279/331/115 +f 279/331/115 283/335/119 284/336/120 +f 279/331/115 284/336/120 280/332/116 +f 280/332/116 284/336/120 285/337/121 +f 280/332/116 285/337/121 281/333/117 +f 281/333/117 285/337/121 286/338/122 +f 281/333/117 286/338/122 268/320/105 +f 268/320/105 286/338/122 269/321/106 +f 282/334/118 287/339/123 283/335/119 +f 283/335/119 287/339/123 288/340/124 +f 283/335/119 288/340/124 284/336/120 +f 284/336/120 288/340/124 289/341/125 +f 284/336/120 289/341/125 285/337/121 +f 285/337/121 289/341/125 290/342/126 +f 285/337/121 290/342/126 286/338/122 +f 286/338/122 290/342/126 291/343/127 +f 286/338/122 291/343/127 269/321/106 +f 269/321/106 291/343/127 270/322/107 +f 287/339/123 292/344/37 288/340/124 +f 288/340/124 292/344/37 293/345/37 +f 288/340/124 293/345/37 289/341/125 +f 289/341/125 293/345/37 294/346/37 +f 289/341/125 294/346/37 290/342/126 +f 290/342/126 294/346/37 295/347/37 +f 290/342/126 295/347/37 291/343/127 +f 291/343/127 295/347/37 296/348/37 +f 291/343/127 296/348/37 270/322/107 +f 270/322/107 296/348/37 271/323/37 +f 255/307/2 297/349/2 256/308/98 +f 256/308/98 297/349/2 298/350/98 +f 256/308/98 298/350/98 272/324/108 +f 272/324/108 298/350/98 299/351/108 +f 272/324/108 299/351/108 277/329/113 +f 277/329/113 299/351/108 300/352/113 +f 277/329/113 300/352/113 282/334/118 +f 282/334/118 300/352/113 301/353/118 +f 282/334/118 301/353/118 287/339/123 +f 287/339/123 301/353/118 302/354/123 +f 287/339/123 302/354/123 292/344/37 +f 292/344/37 302/354/123 303/355/37 +f 304/356/8 305/357/27 306/358/7 +f 306/358/7 305/357/27 307/359/128 +f 306/358/7 307/359/128 308/360/6 +f 308/360/6 307/359/128 309/361/129 +f 308/360/6 309/361/129 310/362/5 +f 310/362/5 309/361/129 311/363/130 +f 310/362/5 311/363/130 312/364/4 +f 312/364/4 311/363/130 313/365/131 +f 312/364/4 313/365/131 314/366/3 +f 314/366/3 313/365/131 315/367/132 +f 314/366/3 315/367/132 297/349/2 +f 297/349/2 315/367/132 298/350/98 +f 298/350/98 315/367/132 316/368/133 +f 298/350/98 316/368/133 299/351/108 +f 299/351/108 316/368/133 317/369/134 +f 299/351/108 317/369/134 300/352/113 +f 300/352/113 317/369/134 318/370/135 +f 300/352/113 318/370/135 301/353/118 +f 301/353/118 318/370/135 319/371/136 +f 301/353/118 319/371/136 302/354/123 +f 302/354/123 319/371/136 320/372/37 +f 302/354/123 320/372/37 303/355/37 +f 305/357/27 321/373/29 307/359/128 +f 307/359/128 321/373/29 322/374/137 +f 307/359/128 322/374/137 309/361/129 +f 309/361/129 322/374/137 323/375/138 +f 309/361/129 323/375/138 311/363/130 +f 311/363/130 323/375/138 324/376/139 +f 311/363/130 324/376/139 313/365/131 +f 313/365/131 324/376/139 325/377/140 +f 313/365/131 325/377/140 315/367/132 +f 315/367/132 325/377/140 316/368/133 +f 321/373/29 326/378/31 322/374/137 +f 322/374/137 326/378/31 327/379/141 +f 322/374/137 327/379/141 323/375/138 +f 323/375/138 327/379/141 328/380/142 +f 323/375/138 328/380/142 324/376/139 +f 324/376/139 328/380/142 329/381/143 +f 324/376/139 329/381/143 325/377/140 +f 325/377/140 329/381/143 330/382/144 +f 325/377/140 330/382/144 316/368/133 +f 316/368/133 330/382/144 317/369/134 +f 326/378/31 331/383/33 327/379/141 +f 327/379/141 331/383/33 332/384/145 +f 327/379/141 332/384/145 328/380/142 +f 328/380/142 332/384/145 333/385/146 +f 328/380/142 333/385/146 329/381/143 +f 329/381/143 333/385/146 334/386/147 +f 329/381/143 334/386/147 330/382/144 +f 330/382/144 334/386/147 335/387/148 +f 330/382/144 335/387/148 317/369/134 +f 317/369/134 335/387/148 318/370/135 +f 331/383/33 336/388/35 332/384/145 +f 332/384/145 336/388/35 337/389/149 +f 332/384/145 337/389/149 333/385/146 +f 333/385/146 337/389/149 338/390/150 +f 333/385/146 338/390/150 334/386/147 +f 334/386/147 338/390/150 339/391/151 +f 334/386/147 339/391/151 335/387/148 +f 335/387/148 339/391/151 340/392/152 +f 335/387/148 340/392/152 318/370/135 +f 318/370/135 340/392/152 319/371/136 +f 336/388/35 341/393/37 337/389/149 +f 337/389/149 341/393/37 342/394/37 +f 337/389/149 342/394/37 338/390/150 +f 338/390/150 342/394/37 343/395/37 +f 338/390/150 343/395/37 339/391/151 +f 339/391/151 343/395/37 344/396/37 +f 339/391/151 344/396/37 340/392/152 +f 340/392/152 344/396/37 345/397/37 +f 340/392/152 345/397/37 319/371/136 +f 319/371/136 345/397/37 320/372/37 +f 304/356/8 346/398/8 305/357/27 +f 305/357/27 346/398/8 347/399/153 +f 305/357/27 347/399/153 321/373/29 +f 321/373/29 347/399/153 348/400/29 +f 321/373/29 348/400/29 326/378/31 +f 326/378/31 348/400/29 349/401/31 +f 326/378/31 349/401/31 331/383/33 +f 331/383/33 349/401/31 350/402/33 +f 331/383/33 350/402/33 336/388/35 +f 336/388/35 350/402/33 351/403/35 +f 336/388/35 351/403/35 341/393/37 +f 341/393/37 351/403/35 352/404/37 +f 353/405/8 304/356/8 354/406/7 +f 354/406/7 304/356/8 306/358/7 +f 354/406/7 306/358/7 355/407/6 +f 355/407/6 306/358/7 308/360/6 +f 355/407/6 308/360/6 356/408/5 +f 356/408/5 308/360/6 310/362/5 +f 356/409/5 310/362/5 357/410/4 +f 357/410/4 310/362/5 312/364/4 +f 357/410/4 312/364/4 358/411/3 +f 358/411/3 312/364/4 314/366/3 +f 358/411/3 314/366/3 359/412/2 +f 359/412/2 314/366/3 297/349/2 +f 255/307/2 360/413/2 297/349/2 +f 297/349/2 360/413/2 359/412/2 +f 360/413/2 255/307/2 361/414/1 +f 361/414/1 255/307/2 257/309/1 +f 361/414/1 257/309/1 362/415/24 +f 362/415/24 257/309/1 259/311/24 +f 362/415/24 259/311/24 363/416/23 +f 363/416/23 259/311/24 261/313/23 +f 363/417/23 261/313/23 364/418/22 +f 364/418/22 261/313/23 263/315/22 +f 364/418/22 263/315/22 365/419/21 +f 365/419/21 263/315/22 265/317/21 +f 365/419/21 265/317/21 366/420/20 +f 366/420/20 265/317/21 248/300/20 +f 206/258/20 367/421/20 248/300/20 +f 248/300/20 367/421/20 366/420/20 +f 367/421/20 206/258/20 368/422/19 +f 368/422/19 206/258/20 208/260/19 +f 368/422/19 208/260/19 369/423/18 +f 369/423/18 208/260/19 210/262/18 +f 369/423/18 210/262/18 370/424/17 +f 370/424/17 210/262/18 212/264/17 +f 370/425/17 212/264/17 371/426/16 +f 371/426/16 212/264/17 214/266/16 +f 371/426/16 214/266/16 372/427/15 +f 372/427/15 214/266/16 216/268/15 +f 372/427/15 216/268/15 373/428/14 +f 373/428/14 216/268/15 199/251/14 +f 157/209/14 374/429/14 199/251/14 +f 199/251/14 374/429/14 373/428/14 +f 374/429/14 157/209/14 375/430/13 +f 375/430/13 157/209/14 159/211/13 +f 375/430/13 159/211/13 376/431/12 +f 376/431/12 159/211/13 161/213/12 +f 376/431/12 161/213/12 377/432/11 +f 377/432/11 161/213/12 163/215/11 +f 377/433/11 163/215/11 378/434/10 +f 378/434/10 163/215/11 165/217/10 +f 378/434/10 165/217/10 379/435/9 +f 379/435/9 165/217/10 167/219/9 +f 379/435/9 167/219/9 380/436/8 +f 380/436/8 167/219/9 142/194/8 +f 346/398/8 304/356/8 107/437/8 +f 107/437/8 304/356/8 353/405/8 +f 107/437/8 353/405/8 119/438/8 +f 119/438/8 353/405/8 380/436/8 +f 119/438/8 380/436/8 142/194/8 +f 142/194/8 141/193/8 119/438/8 +f 381/439/25 382/440/25 383/441/154 +f 383/441/154 382/440/25 384/442/154 +f 383/441/154 384/442/154 385/443/155 +f 385/443/155 384/442/154 386/444/155 +f 385/443/155 386/444/155 387/445/156 +f 387/445/156 386/444/155 388/446/156 +f 387/445/156 388/446/156 389/447/157 +f 389/447/157 388/446/156 390/448/157 +f 389/447/157 390/448/157 391/449/158 +f 391/449/158 390/448/157 392/450/158 +f 391/449/158 392/450/158 360/451/2 +f 360/451/2 392/450/158 359/452/2 +f 366/453/20 393/454/159 365/455/21 +f 365/455/21 393/454/159 394/456/160 +f 365/455/21 394/456/160 364/457/22 +f 364/457/22 394/456/160 395/458/161 +f 364/457/22 395/458/161 363/459/23 +f 363/459/23 395/458/161 396/460/162 +f 363/459/23 396/460/162 362/461/24 +f 362/461/24 396/460/162 397/462/163 +f 362/461/24 397/462/163 361/463/1 +f 361/463/1 397/462/163 398/464/164 +f 361/463/1 398/464/164 360/451/2 +f 360/451/2 398/464/164 391/449/158 +f 391/449/158 398/464/164 399/465/165 +f 391/449/158 399/465/165 389/447/157 +f 389/447/157 399/465/165 400/466/166 +f 389/447/157 400/466/166 387/445/156 +f 387/445/156 400/466/166 401/467/167 +f 387/445/156 401/467/167 385/443/155 +f 385/443/155 401/467/167 402/468/168 +f 385/443/155 402/468/168 383/441/154 +f 383/441/154 402/468/168 403/469/25 +f 383/441/154 403/469/25 381/439/25 +f 393/454/159 404/470/169 394/456/160 +f 394/456/160 404/470/169 405/471/170 +f 394/456/160 405/471/170 395/458/161 +f 395/458/161 405/471/170 406/472/171 +f 395/458/161 406/472/171 396/460/162 +f 396/460/162 406/472/171 407/473/172 +f 396/460/162 407/473/172 397/462/163 +f 397/462/163 407/473/172 408/474/173 +f 397/462/163 408/474/173 398/464/164 +f 398/464/164 408/474/173 399/465/165 +f 404/470/169 409/475/174 405/471/170 +f 405/471/170 409/475/174 410/476/175 +f 405/471/170 410/476/175 406/472/171 +f 406/472/171 410/476/175 411/477/176 +f 406/472/171 411/477/176 407/473/172 +f 407/473/172 411/477/176 412/478/177 +f 407/473/172 412/478/177 408/474/173 +f 408/474/173 412/478/177 413/479/178 +f 408/474/173 413/479/178 399/465/165 +f 399/465/165 413/479/178 400/466/166 +f 409/475/174 414/480/179 410/476/175 +f 410/476/175 414/480/179 415/481/180 +f 410/476/175 415/481/180 411/477/176 +f 411/477/176 415/481/180 416/482/181 +f 411/477/176 416/482/181 412/478/177 +f 412/478/177 416/482/181 417/483/182 +f 412/478/177 417/483/182 413/479/178 +f 413/479/178 417/483/182 418/484/183 +f 413/479/178 418/484/183 400/466/166 +f 400/466/166 418/484/183 401/467/167 +f 414/480/179 419/485/184 415/481/180 +f 415/481/180 419/485/184 420/486/185 +f 415/481/180 420/486/185 416/482/181 +f 416/482/181 420/486/185 421/487/186 +f 416/482/181 421/487/186 417/483/182 +f 417/483/182 421/487/186 422/488/187 +f 417/483/182 422/488/187 418/484/183 +f 418/484/183 422/488/187 423/489/188 +f 418/484/183 423/489/188 401/467/167 +f 401/467/167 423/489/188 402/468/168 +f 419/485/184 424/490/25 420/486/185 +f 420/486/185 424/490/25 425/491/25 +f 420/486/185 425/491/25 421/487/186 +f 421/487/186 425/491/25 426/492/25 +f 421/487/186 426/492/25 422/488/187 +f 422/488/187 426/492/25 427/493/25 +f 422/488/187 427/493/25 423/489/188 +f 423/489/188 427/493/25 428/494/25 +f 423/489/188 428/494/25 402/468/168 +f 402/468/168 428/494/25 403/469/25 +f 366/453/20 367/495/20 393/454/159 +f 393/454/159 367/495/20 429/496/159 +f 393/454/159 429/496/159 404/470/169 +f 404/470/169 429/496/159 430/497/169 +f 404/470/169 430/497/169 409/475/174 +f 409/475/174 430/497/169 431/498/174 +f 409/475/174 431/498/174 414/480/179 +f 414/480/179 431/498/174 432/499/179 +f 414/480/179 432/499/179 419/485/184 +f 419/485/184 432/499/179 433/500/184 +f 419/485/184 433/500/184 424/490/25 +f 424/490/25 433/500/184 434/501/25 +f 373/502/14 435/503/189 372/504/15 +f 372/504/15 435/503/189 436/505/190 +f 372/504/15 436/505/190 371/506/16 +f 371/506/16 436/505/190 437/507/191 +f 371/506/16 437/507/191 370/508/17 +f 370/508/17 437/507/191 438/509/192 +f 370/508/17 438/509/192 369/510/18 +f 369/510/18 438/509/192 439/511/193 +f 369/510/18 439/511/193 368/512/19 +f 368/512/19 439/511/193 440/513/194 +f 368/512/19 440/513/194 367/495/20 +f 367/495/20 440/513/194 429/496/159 +f 429/496/159 440/513/194 441/514/195 +f 429/496/159 441/514/195 430/497/169 +f 430/497/169 441/514/195 442/515/196 +f 430/497/169 442/515/196 431/498/174 +f 431/498/174 442/515/196 443/516/197 +f 431/498/174 443/516/197 432/499/179 +f 432/499/179 443/516/197 444/517/198 +f 432/499/179 444/517/198 433/500/184 +f 433/500/184 444/517/198 445/518/25 +f 433/500/184 445/518/25 434/501/25 +f 435/503/189 446/519/199 436/505/190 +f 436/505/190 446/519/199 447/520/200 +f 436/505/190 447/520/200 437/507/191 +f 437/507/191 447/520/200 448/521/201 +f 437/507/191 448/521/201 438/509/192 +f 438/509/192 448/521/201 449/522/202 +f 438/509/192 449/522/202 439/511/193 +f 439/511/193 449/522/202 450/523/203 +f 439/511/193 450/523/203 440/513/194 +f 440/513/194 450/523/203 441/514/195 +f 446/519/199 451/524/204 447/520/200 +f 447/520/200 451/524/204 452/525/205 +f 447/520/200 452/525/205 448/521/201 +f 448/521/201 452/525/205 453/526/206 +f 448/521/201 453/526/206 449/522/202 +f 449/522/202 453/526/206 454/527/207 +f 449/522/202 454/527/207 450/523/203 +f 450/523/203 454/527/207 455/528/208 +f 450/523/203 455/528/208 441/514/195 +f 441/514/195 455/528/208 442/515/196 +f 451/524/204 456/529/209 452/525/205 +f 452/525/205 456/529/209 457/530/210 +f 452/525/205 457/530/210 453/526/206 +f 453/526/206 457/530/210 458/531/211 +f 453/526/206 458/531/211 454/527/207 +f 454/527/207 458/531/211 459/532/212 +f 454/527/207 459/532/212 455/528/208 +f 455/528/208 459/532/212 460/533/213 +f 455/528/208 460/533/213 442/515/196 +f 442/515/196 460/533/213 443/516/197 +f 456/529/209 461/534/214 457/530/210 +f 457/530/210 461/534/214 462/535/215 +f 457/530/210 462/535/215 458/531/211 +f 458/531/211 462/535/215 463/536/216 +f 458/531/211 463/536/216 459/532/212 +f 459/532/212 463/536/216 464/537/217 +f 459/532/212 464/537/217 460/533/213 +f 460/533/213 464/537/217 465/538/218 +f 460/533/213 465/538/218 443/516/197 +f 443/516/197 465/538/218 444/517/198 +f 461/534/214 466/539/25 462/535/215 +f 462/535/215 466/539/25 467/540/25 +f 462/535/215 467/540/25 463/536/216 +f 463/536/216 467/540/25 468/541/25 +f 463/536/216 468/541/25 464/537/217 +f 464/537/217 468/541/25 469/542/25 +f 464/537/217 469/542/25 465/538/218 +f 465/538/218 469/542/25 470/543/25 +f 465/538/218 470/543/25 444/517/198 +f 444/517/198 470/543/25 445/518/25 +f 373/502/14 374/544/14 435/503/189 +f 435/503/189 374/544/14 471/545/189 +f 435/503/189 471/545/189 446/519/199 +f 446/519/199 471/545/189 472/546/199 +f 446/519/199 472/546/199 451/524/204 +f 451/524/204 472/546/199 473/547/204 +f 451/524/204 473/547/204 456/529/209 +f 456/529/209 473/547/204 474/548/209 +f 456/529/209 474/548/209 461/534/214 +f 461/534/214 474/548/209 475/549/214 +f 461/534/214 475/549/214 466/539/25 +f 466/539/25 475/549/214 476/550/25 +f 380/551/8 477/552/219 379/553/9 +f 379/553/9 477/552/219 478/554/220 +f 379/553/9 478/554/220 378/555/10 +f 378/555/10 478/554/220 479/556/221 +f 378/555/10 479/556/221 377/557/11 +f 377/557/11 479/556/221 480/558/222 +f 377/557/11 480/558/222 376/559/12 +f 376/559/12 480/558/222 481/560/223 +f 376/559/12 481/560/223 375/561/13 +f 375/561/13 481/560/223 482/562/224 +f 375/561/13 482/562/224 374/544/14 +f 374/544/14 482/562/224 471/545/189 +f 471/545/189 482/562/224 483/563/225 +f 471/545/189 483/563/225 472/546/199 +f 472/546/199 483/563/225 484/564/226 +f 472/546/199 484/564/226 473/547/204 +f 473/547/204 484/564/226 485/565/227 +f 473/547/204 485/565/227 474/548/209 +f 474/548/209 485/565/227 486/566/228 +f 474/548/209 486/566/228 475/549/214 +f 475/549/214 486/566/228 487/567/25 +f 475/549/214 487/567/25 476/550/25 +f 477/552/219 488/568/229 478/554/220 +f 478/554/220 488/568/229 489/569/230 +f 478/554/220 489/569/230 479/556/221 +f 479/556/221 489/569/230 490/570/231 +f 479/556/221 490/570/231 480/558/222 +f 480/558/222 490/570/231 491/571/232 +f 480/558/222 491/571/232 481/560/223 +f 481/560/223 491/571/232 492/572/233 +f 481/560/223 492/572/233 482/562/224 +f 482/562/224 492/572/233 483/563/225 +f 488/568/229 493/573/234 489/569/230 +f 489/569/230 493/573/234 494/574/235 +f 489/569/230 494/574/235 490/570/231 +f 490/570/231 494/574/235 495/575/236 +f 490/570/231 495/575/236 491/571/232 +f 491/571/232 495/575/236 496/576/237 +f 491/571/232 496/576/237 492/572/233 +f 492/572/233 496/576/237 497/577/238 +f 492/572/233 497/577/238 483/563/225 +f 483/563/225 497/577/238 484/564/226 +f 493/573/234 498/578/239 494/574/235 +f 494/574/235 498/578/239 499/579/240 +f 494/574/235 499/579/240 495/575/236 +f 495/575/236 499/579/240 500/580/241 +f 495/575/236 500/580/241 496/576/237 +f 496/576/237 500/580/241 501/581/242 +f 496/576/237 501/581/242 497/577/238 +f 497/577/238 501/581/242 502/582/243 +f 497/577/238 502/582/243 484/564/226 +f 484/564/226 502/582/243 485/565/227 +f 498/578/239 503/583/244 499/579/240 +f 499/579/240 503/583/244 504/584/245 +f 499/579/240 504/584/245 500/580/241 +f 500/580/241 504/584/245 505/585/246 +f 500/580/241 505/585/246 501/581/242 +f 501/581/242 505/585/246 506/586/247 +f 501/581/242 506/586/247 502/582/243 +f 502/582/243 506/586/247 507/587/248 +f 502/582/243 507/587/248 485/565/227 +f 485/565/227 507/587/248 486/566/228 +f 503/583/244 508/588/25 504/584/245 +f 504/584/245 508/588/25 509/589/25 +f 504/584/245 509/589/25 505/585/246 +f 505/585/246 509/589/25 510/590/25 +f 505/585/246 510/590/25 506/586/247 +f 506/586/247 510/590/25 511/591/25 +f 506/586/247 511/591/25 507/587/248 +f 507/587/248 511/591/25 512/592/25 +f 507/587/248 512/592/25 486/566/228 +f 486/566/228 512/592/25 487/567/25 +f 380/551/8 353/593/8 477/552/219 +f 477/552/219 353/593/8 513/594/219 +f 477/552/219 513/594/219 488/568/229 +f 488/568/229 513/594/219 514/595/229 +f 488/568/229 514/595/229 493/573/234 +f 493/573/234 514/595/229 515/596/234 +f 493/573/234 515/596/234 498/578/239 +f 498/578/239 515/596/234 516/597/239 +f 498/578/239 516/597/239 503/583/244 +f 503/583/244 516/597/239 517/598/244 +f 503/583/244 517/598/244 508/588/25 +f 508/588/25 517/598/244 518/599/25 +f 518/599/25 517/598/244 519/600/25 +f 519/600/25 517/598/244 520/601/249 +f 519/600/25 520/601/249 521/602/25 +f 521/602/25 520/601/249 522/603/250 +f 521/602/25 522/603/250 523/604/25 +f 523/604/25 522/603/250 524/605/251 +f 523/604/25 524/605/251 525/606/25 +f 525/606/25 524/605/251 526/607/252 +f 525/606/25 526/607/252 527/608/25 +f 527/608/25 526/607/252 528/609/253 +f 527/608/25 528/609/253 382/440/25 +f 382/440/25 528/609/253 384/442/154 +f 384/442/154 528/609/253 529/610/254 +f 384/442/154 529/610/254 386/444/155 +f 386/444/155 529/610/254 530/611/255 +f 386/444/155 530/611/255 388/446/156 +f 388/446/156 530/611/255 531/612/256 +f 388/446/156 531/612/256 390/448/157 +f 390/448/157 531/612/256 532/613/257 +f 390/448/157 532/613/257 392/450/158 +f 392/450/158 532/613/257 358/614/3 +f 392/450/158 358/614/3 359/452/2 +f 517/598/244 516/597/239 520/601/249 +f 520/601/249 516/597/239 533/615/258 +f 520/601/249 533/615/258 522/603/250 +f 522/603/250 533/615/258 534/616/259 +f 522/603/250 534/616/259 524/605/251 +f 524/605/251 534/616/259 535/617/260 +f 524/605/251 535/617/260 526/607/252 +f 526/607/252 535/617/260 536/618/261 +f 526/607/252 536/618/261 528/609/253 +f 528/609/253 536/618/261 529/610/254 +f 516/597/239 515/596/234 533/615/258 +f 533/615/258 515/596/234 537/619/262 +f 533/615/258 537/619/262 534/616/259 +f 534/616/259 537/619/262 538/620/263 +f 534/616/259 538/620/263 535/617/260 +f 535/617/260 538/620/263 539/621/264 +f 535/617/260 539/621/264 536/618/261 +f 536/618/261 539/621/264 540/622/265 +f 536/618/261 540/622/265 529/610/254 +f 529/610/254 540/622/265 530/611/255 +f 515/596/234 514/595/229 537/619/262 +f 537/619/262 514/595/229 541/623/266 +f 537/619/262 541/623/266 538/620/263 +f 538/620/263 541/623/266 542/624/267 +f 538/620/263 542/624/267 539/621/264 +f 539/621/264 542/624/267 543/625/268 +f 539/621/264 543/625/268 540/622/265 +f 540/622/265 543/625/268 544/626/269 +f 540/622/265 544/626/269 530/611/255 +f 530/611/255 544/626/269 531/612/256 +f 514/595/229 513/594/219 541/623/266 +f 541/623/266 513/594/219 545/627/270 +f 541/623/266 545/627/270 542/624/267 +f 542/624/267 545/627/270 546/628/271 +f 542/624/267 546/628/271 543/625/268 +f 543/625/268 546/628/271 547/629/272 +f 543/625/268 547/629/272 544/626/269 +f 544/626/269 547/629/272 548/630/273 +f 544/626/269 548/630/273 531/612/256 +f 531/612/256 548/630/273 532/613/257 +f 513/594/219 353/593/8 545/627/270 +f 545/627/270 353/593/8 354/631/7 +f 545/627/270 354/631/7 546/628/271 +f 546/628/271 354/631/7 355/632/6 +f 546/628/271 355/632/6 547/629/272 +f 547/629/272 355/632/6 356/633/5 +f 547/629/272 356/633/5 548/630/273 +f 548/630/273 356/633/5 357/634/4 +f 548/630/273 357/634/4 532/613/257 +f 532/613/257 357/634/4 358/614/3 +f 381/439/25 466/539/25 382/440/25 +f 382/440/25 466/539/25 476/550/25 +f 382/440/25 476/550/25 518/599/25 +f 518/599/25 476/550/25 508/588/25 +f 508/588/25 476/550/25 487/567/25 +f 508/588/25 487/567/25 512/592/25 +f 403/469/25 424/490/25 381/439/25 +f 381/439/25 424/490/25 434/501/25 +f 381/439/25 434/501/25 466/539/25 +f 466/539/25 434/501/25 467/540/25 +f 467/540/25 434/501/25 468/541/25 +f 468/541/25 434/501/25 469/542/25 +f 469/542/25 434/501/25 470/543/25 +f 470/543/25 434/501/25 445/518/25 +f 403/469/25 428/494/25 424/490/25 +f 424/490/25 428/494/25 427/493/25 +f 424/490/25 427/493/25 426/492/25 +f 426/492/25 425/491/25 424/490/25 +f 512/592/25 511/591/25 508/588/25 +f 508/588/25 511/591/25 510/590/25 +f 508/588/25 510/590/25 509/589/25 +f 519/600/25 521/602/25 518/599/25 +f 518/599/25 521/602/25 523/604/25 +f 518/599/25 523/604/25 525/606/25 +f 525/606/25 527/608/25 518/599/25 +f 518/599/25 527/608/25 382/440/25 +f 549/635/37 550/636/37 551/637/123 +f 551/637/123 550/636/37 552/638/123 +f 551/637/123 552/638/123 553/639/118 +f 553/639/118 552/638/123 554/640/118 +f 553/639/118 554/640/118 555/641/113 +f 555/641/113 554/640/118 556/642/113 +f 555/641/113 556/642/113 557/643/108 +f 557/643/108 556/642/113 558/644/108 +f 557/643/108 558/644/108 559/645/98 +f 559/645/98 558/644/108 560/646/98 +f 559/645/98 560/646/98 561/647/2 +f 561/647/2 560/646/98 562/648/2 +f 563/649/274 564/650/275 565/651/276 +f 565/651/276 564/650/275 566/652/277 +f 565/651/276 566/652/277 567/653/278 +f 565/651/276 567/653/278 568/654/279 +f 568/654/279 567/653/278 569/655/280 +f 568/654/279 569/655/280 570/656/281 +f 570/656/281 569/655/280 571/657/282 +f 570/656/281 571/657/282 572/658/283 +f 572/658/283 571/657/282 573/659/284 +f 572/658/283 573/659/284 574/660/285 +f 574/660/285 573/659/284 575/661/37 +f 574/660/285 575/661/37 576/662/37 +f 576/662/37 577/663/37 574/660/285 +f 574/660/285 577/663/37 551/637/123 +f 574/660/285 551/637/123 553/639/118 +f 577/663/37 549/635/37 551/637/123 +f 574/660/285 553/639/118 572/658/283 +f 572/658/283 553/639/118 555/641/113 +f 572/658/283 555/641/113 570/656/281 +f 570/656/281 555/641/113 557/643/108 +f 570/656/281 557/643/108 568/654/279 +f 568/654/279 557/643/108 559/645/98 +f 568/654/279 559/645/98 565/651/276 +f 565/651/276 559/645/98 578/664/286 +f 565/651/276 578/664/286 563/649/274 +f 559/645/98 561/647/2 578/664/286 +f 564/650/275 579/665/275 566/652/277 +f 566/652/277 579/665/275 580/666/277 +f 566/652/277 580/666/277 567/653/278 +f 567/653/278 580/666/277 581/667/287 +f 567/653/278 581/667/287 569/655/280 +f 569/655/280 581/667/287 582/668/280 +f 569/655/280 582/668/280 571/657/282 +f 571/657/282 582/668/280 583/669/282 +f 571/657/282 583/669/282 573/659/284 +f 573/659/284 583/669/282 584/670/284 +f 573/659/284 584/670/284 575/661/37 +f 575/661/37 584/670/284 585/671/37 +f 586/672/8 587/673/27 588/674/288 +f 588/674/288 587/673/27 589/675/128 +f 588/674/288 589/675/128 590/676/289 +f 590/676/289 589/675/128 591/677/290 +f 590/676/289 591/677/290 592/678/291 +f 592/678/291 591/677/290 593/679/130 +f 592/678/291 593/679/130 594/680/292 +f 594/680/292 593/679/130 595/681/131 +f 594/680/292 595/681/131 596/682/293 +f 596/682/293 595/681/131 597/683/132 +f 596/682/293 597/683/132 579/665/275 +f 579/665/275 597/683/132 580/666/277 +f 580/666/277 597/683/132 598/684/294 +f 580/666/277 598/684/294 581/667/287 +f 581/667/287 598/684/294 599/685/134 +f 581/667/287 599/685/134 582/668/280 +f 582/668/280 599/685/134 600/686/135 +f 582/668/280 600/686/135 583/669/282 +f 583/669/282 600/686/135 601/687/136 +f 583/669/282 601/687/136 584/670/284 +f 584/670/284 601/687/136 585/671/37 +f 585/671/37 601/687/136 602/688/37 +f 602/688/37 601/687/136 603/689/152 +f 602/688/37 603/689/152 604/690/37 +f 604/690/37 603/689/152 605/691/151 +f 604/690/37 605/691/151 606/692/37 +f 606/692/37 605/691/151 607/693/150 +f 606/692/37 607/693/150 608/694/37 +f 608/694/37 607/693/150 609/695/149 +f 608/694/37 609/695/149 610/696/37 +f 610/696/37 609/695/149 611/697/35 +f 610/696/37 611/697/35 612/698/37 +f 587/673/27 613/699/29 589/675/128 +f 589/675/128 613/699/29 614/700/137 +f 589/675/128 614/700/137 591/677/290 +f 591/677/290 614/700/137 615/701/138 +f 591/677/290 615/701/138 593/679/130 +f 593/679/130 615/701/138 616/702/139 +f 593/679/130 616/702/139 595/681/131 +f 595/681/131 616/702/139 617/703/140 +f 595/681/131 617/703/140 597/683/132 +f 597/683/132 617/703/140 598/684/294 +f 613/699/29 618/704/31 614/700/137 +f 614/700/137 618/704/31 619/705/141 +f 614/700/137 619/705/141 615/701/138 +f 615/701/138 619/705/141 620/706/295 +f 615/701/138 620/706/295 616/702/139 +f 616/702/139 620/706/295 621/707/143 +f 616/702/139 621/707/143 617/703/140 +f 617/703/140 621/707/143 622/708/144 +f 617/703/140 622/708/144 598/684/294 +f 598/684/294 622/708/144 599/685/134 +f 618/704/31 623/709/33 619/705/141 +f 619/705/141 623/709/33 624/710/145 +f 619/705/141 624/710/145 620/706/295 +f 620/706/295 624/710/145 625/711/146 +f 620/706/295 625/711/146 621/707/143 +f 621/707/143 625/711/146 626/712/296 +f 621/707/143 626/712/296 622/708/144 +f 622/708/144 626/712/296 627/713/148 +f 622/708/144 627/713/148 599/685/134 +f 599/685/134 627/713/148 600/686/135 +f 623/709/33 611/697/35 624/710/145 +f 624/710/145 611/697/35 609/695/149 +f 624/710/145 609/695/149 625/711/146 +f 625/711/146 609/695/149 607/693/150 +f 625/711/146 607/693/150 626/712/296 +f 626/712/296 607/693/150 605/691/151 +f 626/712/296 605/691/151 627/713/148 +f 627/713/148 605/691/151 603/689/152 +f 627/713/148 603/689/152 600/686/135 +f 600/686/135 603/689/152 601/687/136 +f 586/672/8 628/714/8 587/673/27 +f 587/673/27 628/714/8 629/715/27 +f 587/673/27 629/715/27 613/699/29 +f 613/699/29 629/715/27 630/716/29 +f 613/699/29 630/716/29 618/704/31 +f 618/704/31 630/716/29 631/717/31 +f 618/704/31 631/717/31 623/709/33 +f 623/709/33 631/717/31 632/718/33 +f 623/709/33 632/718/33 611/697/35 +f 611/697/35 632/718/33 633/719/35 +f 611/697/35 633/719/35 612/698/37 +f 612/698/37 633/719/35 634/720/37 +f 635/721/297 636/722/298 637/723/299 +f 637/723/299 636/722/298 638/724/300 +f 637/723/299 638/724/300 639/725/301 +f 637/723/299 639/725/301 640/726/302 +f 640/726/302 639/725/301 641/727/303 +f 640/726/302 641/727/303 642/728/54 +f 642/728/54 641/727/303 643/729/304 +f 642/728/54 643/729/304 644/730/59 +f 644/730/59 643/729/304 645/731/305 +f 644/730/59 645/731/305 646/732/64 +f 646/732/64 645/731/305 647/733/37 +f 646/732/64 647/733/37 648/734/37 +f 646/732/64 648/734/37 649/735/65 +f 649/735/65 648/734/37 650/736/37 +f 649/735/65 650/736/37 651/737/66 +f 651/737/66 650/736/37 652/738/37 +f 651/737/66 652/738/37 653/739/306 +f 653/739/306 652/738/37 654/740/37 +f 653/739/306 654/740/37 655/741/47 +f 655/741/47 654/740/37 656/742/37 +f 655/741/47 656/742/37 633/719/35 +f 633/719/35 656/742/37 634/720/37 +f 633/719/35 632/718/33 655/741/47 +f 655/741/47 632/718/33 657/743/46 +f 655/741/47 657/743/46 653/739/306 +f 653/739/306 657/743/46 658/744/62 +f 653/739/306 658/744/62 651/737/66 +f 651/737/66 658/744/62 659/745/307 +f 651/737/66 659/745/307 649/735/65 +f 649/735/65 659/745/307 660/746/60 +f 649/735/65 660/746/60 646/732/64 +f 646/732/64 660/746/60 644/730/59 +f 632/718/33 631/717/31 657/743/46 +f 657/743/46 631/717/31 661/747/45 +f 657/743/46 661/747/45 658/744/62 +f 658/744/62 661/747/45 662/748/57 +f 658/744/62 662/748/57 659/745/307 +f 659/745/307 662/748/57 663/749/56 +f 659/745/307 663/749/56 660/746/60 +f 660/746/60 663/749/56 664/750/55 +f 660/746/60 664/750/55 644/730/59 +f 644/730/59 664/750/55 642/728/54 +f 631/717/31 630/716/29 661/747/45 +f 661/747/45 630/716/29 665/751/44 +f 661/747/45 665/751/44 662/748/57 +f 662/748/57 665/751/44 666/752/52 +f 662/748/57 666/752/52 663/749/56 +f 663/749/56 666/752/52 667/753/51 +f 663/749/56 667/753/51 664/750/55 +f 664/750/55 667/753/51 668/754/50 +f 664/750/55 668/754/50 642/728/54 +f 642/728/54 668/754/50 640/726/302 +f 630/716/29 629/715/27 665/751/44 +f 665/751/44 629/715/27 669/755/43 +f 665/751/44 669/755/43 666/752/52 +f 666/752/52 669/755/43 670/756/42 +f 666/752/52 670/756/42 667/753/51 +f 667/753/51 670/756/42 671/757/41 +f 667/753/51 671/757/41 668/754/50 +f 668/754/50 671/757/41 672/758/40 +f 668/754/50 672/758/40 640/726/302 +f 640/726/302 672/758/40 637/723/299 +f 628/714/8 673/759/308 629/715/27 +f 629/715/27 673/759/308 669/755/43 +f 673/759/308 674/760/309 669/755/43 +f 669/755/43 674/760/309 670/756/42 +f 674/760/309 675/761/310 670/756/42 +f 670/756/42 675/761/310 671/757/41 +f 675/761/310 676/762/311 671/757/41 +f 671/757/41 676/762/311 672/758/40 +f 676/762/311 635/721/297 672/758/40 +f 672/758/40 635/721/297 637/723/299 +f 636/722/298 677/763/298 638/724/300 +f 638/724/300 677/763/298 678/764/312 +f 638/724/300 678/764/312 639/725/301 +f 639/725/301 678/764/312 679/765/301 +f 639/725/301 679/765/301 641/727/303 +f 641/727/303 679/765/301 680/766/303 +f 641/727/303 680/766/303 643/729/304 +f 643/729/304 680/766/303 681/767/304 +f 643/729/304 681/767/304 645/731/305 +f 645/731/305 681/767/304 682/768/305 +f 645/731/305 682/768/305 647/733/37 +f 647/733/37 682/768/305 683/769/37 +f 684/770/14 685/771/38 686/772/313 +f 686/772/313 685/771/38 687/773/314 +f 687/773/314 685/771/38 678/764/312 +f 687/773/314 678/764/312 677/763/298 +f 685/771/38 688/774/48 678/764/312 +f 678/764/312 688/774/48 679/765/301 +f 679/765/301 688/774/48 689/775/53 +f 679/765/301 689/775/53 680/766/303 +f 680/766/303 689/775/53 690/776/58 +f 680/766/303 690/776/58 681/767/304 +f 681/767/304 690/776/58 691/777/63 +f 681/767/304 691/777/63 682/768/305 +f 682/768/305 691/777/63 692/778/315 +f 682/768/305 692/778/315 683/769/37 +f 693/779/37 694/780/316 691/777/63 +f 691/777/63 694/780/316 692/778/315 +f 684/770/14 695/781/14 685/771/38 +f 685/771/38 695/781/14 696/782/38 +f 685/771/38 696/782/38 688/774/48 +f 688/774/48 696/782/38 697/783/48 +f 688/774/48 697/783/48 689/775/53 +f 689/775/53 697/783/48 698/784/53 +f 689/775/53 698/784/53 690/776/58 +f 690/776/58 698/784/53 699/785/58 +f 690/776/58 699/785/58 691/777/63 +f 691/777/63 699/785/58 700/786/63 +f 691/777/63 700/786/63 693/779/37 +f 693/779/37 700/786/63 701/787/37 +f 702/788/14 684/770/14 703/789/313 +f 703/789/313 684/770/14 686/772/313 +f 703/789/313 686/772/313 704/790/314 +f 704/790/314 686/772/313 687/773/314 +f 704/790/314 687/773/314 705/791/298 +f 705/791/298 687/773/314 677/763/298 +f 677/763/298 636/722/298 705/791/298 +f 705/791/298 636/722/298 706/792/298 +f 636/722/298 635/721/297 706/793/298 +f 706/793/298 635/721/297 707/794/297 +f 707/794/297 635/721/297 676/762/311 +f 707/794/297 676/762/311 708/795/311 +f 708/795/311 676/762/311 709/796/310 +f 709/796/310 676/762/311 675/761/310 +f 709/796/310 675/761/310 710/797/309 +f 710/797/309 675/761/310 674/760/309 +f 710/797/309 674/760/309 673/759/308 +f 710/797/309 673/759/308 711/798/308 +f 711/798/308 673/759/308 628/714/8 +f 711/798/308 628/714/8 712/799/8 +f 628/714/8 586/672/8 712/799/8 +f 712/799/8 586/672/8 713/800/8 +f 586/672/8 588/674/288 713/800/8 +f 713/800/8 588/674/288 714/801/288 +f 714/801/288 588/674/288 590/676/289 +f 714/801/288 590/676/289 715/802/289 +f 715/802/289 590/676/289 716/803/291 +f 716/803/291 590/676/289 592/678/291 +f 716/803/291 592/678/291 717/804/292 +f 717/804/292 592/678/291 594/680/292 +f 717/804/292 594/680/292 596/682/293 +f 717/804/292 596/682/293 718/805/293 +f 718/805/293 596/682/293 579/665/275 +f 718/805/293 579/665/275 719/806/275 +f 579/665/275 564/650/275 719/807/275 +f 719/807/275 564/650/275 720/808/275 +f 720/808/275 564/650/275 721/809/274 +f 721/809/274 564/650/275 563/649/274 +f 721/809/274 563/649/274 722/810/286 +f 722/810/286 563/649/274 578/664/286 +f 722/810/286 578/664/286 723/811/2 +f 723/811/2 578/664/286 561/647/2 +f 561/647/2 562/648/2 723/811/2 +f 723/811/2 562/648/2 724/812/2 +f 723/811/2 724/812/2 725/813/158 +f 725/813/158 724/812/2 726/814/158 +f 725/813/158 726/814/158 727/815/157 +f 727/815/157 726/814/158 728/816/157 +f 727/815/157 728/816/157 729/817/156 +f 729/817/156 728/816/157 730/818/156 +f 729/817/156 730/818/156 731/819/155 +f 731/819/155 730/818/156 732/820/155 +f 731/819/155 732/820/155 733/821/154 +f 733/821/154 732/820/155 734/822/154 +f 733/821/154 734/822/154 735/823/25 +f 735/823/25 734/822/154 736/824/25 +f 737/825/25 738/826/317 739/827/25 +f 739/827/25 738/826/317 733/821/154 +f 739/827/25 733/821/154 740/828/25 +f 740/828/25 733/821/154 735/823/25 +f 738/826/317 741/829/318 733/821/154 +f 733/821/154 741/829/318 731/819/155 +f 731/819/155 741/829/318 742/830/319 +f 731/819/155 742/830/319 729/817/156 +f 729/817/156 742/830/319 743/831/320 +f 729/817/156 743/831/320 727/815/157 +f 727/815/157 743/831/320 744/832/321 +f 727/815/157 744/832/321 725/813/158 +f 725/813/158 744/832/321 721/809/274 +f 725/813/158 721/809/274 722/810/286 +f 744/832/321 720/808/275 721/809/274 +f 722/810/286 723/811/2 725/813/158 +f 737/825/25 745/833/25 738/826/317 +f 738/826/317 745/833/25 746/834/317 +f 738/826/317 746/834/317 741/829/318 +f 741/829/318 746/834/317 747/835/318 +f 741/829/318 747/835/318 742/830/319 +f 742/830/319 747/835/318 748/836/319 +f 742/830/319 748/836/319 743/831/320 +f 743/831/320 748/836/319 749/837/322 +f 743/831/320 749/837/322 744/832/321 +f 744/832/321 749/837/322 750/838/321 +f 744/832/321 750/838/321 720/808/275 +f 720/808/275 750/838/321 719/807/275 +f 751/839/25 752/840/244 753/841/25 +f 753/841/25 752/840/244 754/842/249 +f 753/841/25 754/842/249 755/843/25 +f 755/843/25 754/842/249 756/844/323 +f 755/843/25 756/844/323 757/845/25 +f 757/845/25 756/844/323 758/846/251 +f 757/845/25 758/846/251 759/847/25 +f 759/847/25 758/846/251 760/848/252 +f 759/847/25 760/848/252 761/849/25 +f 761/849/25 760/848/252 762/850/253 +f 761/849/25 762/850/253 745/851/25 +f 745/851/25 762/850/253 746/852/317 +f 746/852/317 762/850/253 763/853/254 +f 746/852/317 763/853/254 747/835/318 +f 747/835/318 763/853/254 764/854/255 +f 747/835/318 764/854/255 748/836/319 +f 748/836/319 764/854/255 765/855/324 +f 748/836/319 765/855/324 749/837/322 +f 749/837/322 765/855/324 766/856/257 +f 749/837/322 766/856/257 750/857/321 +f 750/857/321 766/856/257 719/806/275 +f 719/806/275 766/856/257 718/805/293 +f 718/805/293 766/856/257 767/858/273 +f 718/805/293 767/858/273 717/804/292 +f 717/804/292 767/858/273 768/859/272 +f 717/804/292 768/859/272 716/803/291 +f 716/803/291 768/859/272 769/860/325 +f 716/803/291 769/860/325 715/802/289 +f 715/802/289 769/860/325 770/861/270 +f 715/802/289 770/861/270 714/801/288 +f 714/801/288 770/861/270 771/862/219 +f 714/801/288 771/862/219 713/800/8 +f 752/840/244 772/863/239 754/842/249 +f 754/842/249 772/863/239 773/864/258 +f 754/842/249 773/864/258 756/844/323 +f 756/844/323 773/864/258 774/865/259 +f 756/844/323 774/865/259 758/846/251 +f 758/846/251 774/865/259 775/866/326 +f 758/846/251 775/866/326 760/848/252 +f 760/848/252 775/866/326 776/867/261 +f 760/848/252 776/867/261 762/850/253 +f 762/850/253 776/867/261 763/853/254 +f 772/863/239 777/868/234 773/864/258 +f 773/864/258 777/868/234 778/869/262 +f 773/864/258 778/869/262 774/865/259 +f 774/865/259 778/869/262 779/870/263 +f 774/865/259 779/870/263 775/866/326 +f 775/866/326 779/870/263 780/871/264 +f 775/866/326 780/871/264 776/867/261 +f 776/867/261 780/871/264 781/872/265 +f 776/867/261 781/872/265 763/853/254 +f 763/853/254 781/872/265 764/854/255 +f 777/868/234 782/873/229 778/869/262 +f 778/869/262 782/873/229 783/874/266 +f 778/869/262 783/874/266 779/870/263 +f 779/870/263 783/874/266 784/875/267 +f 779/870/263 784/875/267 780/871/264 +f 780/871/264 784/875/267 785/876/268 +f 780/871/264 785/876/268 781/872/265 +f 781/872/265 785/876/268 786/877/269 +f 781/872/265 786/877/269 764/854/255 +f 764/854/255 786/877/269 765/855/324 +f 782/873/229 771/862/219 783/874/266 +f 783/874/266 771/862/219 770/861/270 +f 783/874/266 770/861/270 784/875/267 +f 784/875/267 770/861/270 769/860/325 +f 784/875/267 769/860/325 785/876/268 +f 785/876/268 769/860/325 768/859/272 +f 785/876/268 768/859/272 786/877/269 +f 786/877/269 768/859/272 767/858/273 +f 786/877/269 767/858/273 765/855/324 +f 765/855/324 767/858/273 766/856/257 +f 751/839/25 787/878/25 752/840/244 +f 752/840/244 787/878/25 788/879/244 +f 752/840/244 788/879/244 772/863/239 +f 772/863/239 788/879/244 789/880/239 +f 772/863/239 789/880/239 777/868/234 +f 777/868/234 789/880/239 790/881/234 +f 777/868/234 790/881/234 782/873/229 +f 782/873/229 790/881/234 791/882/229 +f 782/873/229 791/882/229 771/862/219 +f 771/862/219 791/882/229 792/883/219 +f 771/862/219 792/883/219 713/800/8 +f 713/800/8 792/883/219 712/799/8 +f 793/884/25 794/885/25 795/886/228 +f 795/886/228 794/885/25 796/887/327 +f 795/886/228 796/887/327 797/888/328 +f 795/886/228 797/888/328 798/889/227 +f 798/889/227 797/888/328 799/890/329 +f 798/889/227 799/890/329 800/891/226 +f 800/891/226 799/890/329 801/892/330 +f 800/891/226 801/892/330 802/893/225 +f 802/893/225 801/892/330 803/894/331 +f 802/893/225 803/894/331 804/895/224 +f 804/895/224 803/894/331 706/793/298 +f 804/895/224 706/793/298 707/794/297 +f 804/895/224 707/794/297 805/896/223 +f 805/896/223 707/794/297 708/795/311 +f 805/896/223 708/795/311 806/897/222 +f 806/897/222 708/795/311 709/796/310 +f 806/897/222 709/796/310 807/898/221 +f 807/898/221 709/796/310 710/797/309 +f 807/898/221 710/797/309 808/899/220 +f 808/899/220 710/797/309 711/798/308 +f 808/899/220 711/798/308 792/883/219 +f 792/883/219 711/798/308 712/799/8 +f 792/883/219 791/882/229 808/899/220 +f 808/899/220 791/882/229 809/900/230 +f 808/899/220 809/900/230 807/898/221 +f 807/898/221 809/900/230 810/901/231 +f 807/898/221 810/901/231 806/897/222 +f 806/897/222 810/901/231 811/902/232 +f 806/897/222 811/902/232 805/896/223 +f 805/896/223 811/902/232 812/903/233 +f 805/896/223 812/903/233 804/895/224 +f 804/895/224 812/903/233 802/893/225 +f 791/882/229 790/881/234 809/900/230 +f 809/900/230 790/881/234 813/904/235 +f 809/900/230 813/904/235 810/901/231 +f 810/901/231 813/904/235 814/905/332 +f 810/901/231 814/905/332 811/902/232 +f 811/902/232 814/905/332 815/906/237 +f 811/902/232 815/906/237 812/903/233 +f 812/903/233 815/906/237 816/907/238 +f 812/903/233 816/907/238 802/893/225 +f 802/893/225 816/907/238 800/891/226 +f 790/881/234 789/880/239 813/904/235 +f 813/904/235 789/880/239 817/908/240 +f 813/904/235 817/908/240 814/905/332 +f 814/905/332 817/908/240 818/909/241 +f 814/905/332 818/909/241 815/906/237 +f 815/906/237 818/909/241 819/910/333 +f 815/906/237 819/910/333 816/907/238 +f 816/907/238 819/910/333 820/911/243 +f 816/907/238 820/911/243 800/891/226 +f 800/891/226 820/911/243 798/889/227 +f 789/880/239 788/879/244 817/908/240 +f 817/908/240 788/879/244 821/912/245 +f 817/908/240 821/912/245 818/909/241 +f 818/909/241 821/912/245 822/913/334 +f 818/909/241 822/913/334 819/910/333 +f 819/910/333 822/913/334 823/914/247 +f 819/910/333 823/914/247 820/911/243 +f 820/911/243 823/914/247 824/915/248 +f 820/911/243 824/915/248 798/889/227 +f 798/889/227 824/915/248 795/886/228 +f 787/878/25 825/916/25 788/879/244 +f 788/879/244 825/916/25 821/912/245 +f 825/916/25 826/917/25 821/912/245 +f 821/912/245 826/917/25 822/913/334 +f 826/917/25 827/918/25 822/913/334 +f 822/913/334 827/918/25 823/914/247 +f 827/918/25 828/919/25 823/914/247 +f 823/914/247 828/919/25 824/915/248 +f 828/919/25 793/884/25 824/915/248 +f 824/915/248 793/884/25 795/886/228 +f 794/920/25 829/921/25 796/922/327 +f 796/922/327 829/921/25 830/923/327 +f 796/922/327 830/923/327 797/924/328 +f 797/924/328 830/923/327 831/925/328 +f 797/924/328 831/925/328 799/926/329 +f 799/926/329 831/925/328 832/927/329 +f 799/926/329 832/927/329 801/892/330 +f 801/892/330 832/927/329 833/928/330 +f 801/892/330 833/928/330 803/894/331 +f 803/894/331 833/928/330 834/929/335 +f 803/894/331 834/929/335 706/792/298 +f 706/792/298 834/929/335 705/791/298 +f 835/930/25 836/931/214 837/932/25 +f 837/932/25 836/931/214 838/933/336 +f 837/932/25 838/933/336 839/934/25 +f 839/934/25 838/933/336 830/923/327 +f 839/934/25 830/923/327 829/921/25 +f 836/931/214 840/935/209 838/933/336 +f 838/933/336 840/935/209 841/936/337 +f 838/933/336 841/936/337 830/923/327 +f 830/923/327 841/936/337 831/925/328 +f 831/925/328 841/936/337 842/937/338 +f 831/925/328 842/937/338 832/927/329 +f 832/927/329 842/937/338 843/938/339 +f 832/927/329 843/938/339 833/928/330 +f 833/928/330 843/938/339 844/939/340 +f 833/928/330 844/939/340 834/929/335 +f 834/929/335 844/939/340 704/790/314 +f 834/929/335 704/790/314 705/791/298 +f 840/935/209 845/940/204 841/936/337 +f 841/936/337 845/940/204 842/937/338 +f 845/940/204 846/941/199 842/937/338 +f 842/937/338 846/941/199 843/938/339 +f 846/941/199 847/942/189 843/938/339 +f 843/938/339 847/942/189 844/939/340 +f 702/788/14 703/789/313 847/942/189 +f 847/942/189 703/789/313 844/939/340 +f 703/789/313 704/790/314 844/939/340 +f 835/930/25 848/943/25 836/931/214 +f 836/931/214 848/943/25 849/944/214 +f 836/931/214 849/944/214 840/935/209 +f 840/935/209 849/944/214 850/945/209 +f 840/935/209 850/945/209 845/940/204 +f 845/940/204 850/945/209 851/946/204 +f 845/940/204 851/946/204 846/941/199 +f 846/941/199 851/946/204 852/947/199 +f 846/941/199 852/947/199 847/942/189 +f 847/942/189 852/947/199 853/948/189 +f 847/942/189 853/948/189 702/788/14 +f 702/788/14 853/948/189 854/949/14 +f 848/950/25 835/951/25 736/952/25 +f 736/952/25 835/951/25 735/953/25 +f 735/953/25 835/951/25 837/954/25 +f 735/953/25 837/954/25 740/955/25 +f 740/955/25 837/954/25 839/956/25 +f 740/955/25 839/956/25 739/957/25 +f 739/957/25 839/956/25 737/958/25 +f 737/958/25 839/956/25 829/959/25 +f 737/958/25 829/959/25 745/960/25 +f 745/960/25 829/959/25 751/961/25 +f 745/960/25 751/961/25 761/962/25 +f 761/962/25 751/961/25 759/963/25 +f 759/963/25 751/961/25 757/964/25 +f 757/964/25 751/961/25 755/965/25 +f 755/965/25 751/961/25 753/966/25 +f 751/961/25 829/959/25 787/967/25 +f 787/967/25 829/959/25 794/968/25 +f 787/967/25 794/968/25 793/969/25 +f 793/969/25 828/970/25 787/967/25 +f 787/967/25 828/970/25 827/971/25 +f 787/967/25 827/971/25 826/972/25 +f 826/972/25 825/973/25 787/967/25 +f 855/974/341 856/975/342 100/976/343 +f 100/976/343 856/975/342 110/977/342 +f 110/977/342 856/975/342 857/978/344 +f 110/977/342 857/978/344 109/979/345 +f 109/979/345 857/978/344 108/980/2 +f 108/980/2 857/978/344 858/981/2 +f 108/980/2 858/981/2 121/982/346 +f 121/982/346 858/981/2 859/983/347 +f 121/982/346 859/983/347 860/984/348 +f 121/982/346 860/984/348 120/985/348 +f 120/985/348 860/984/348 861/986/349 +f 120/985/348 861/986/349 118/987/349 +f 861/986/349 862/988/349 118/987/349 +f 118/987/349 862/988/349 101/989/349 +f 111/990/350 112/991/351 863/992/350 +f 863/992/350 112/991/351 864/993/351 +f 864/993/351 112/991/351 113/994/352 +f 864/993/351 113/994/352 865/995/353 +f 865/995/353 113/994/352 866/996/14 +f 866/996/14 113/994/352 114/997/14 +f 866/996/14 114/997/14 867/998/354 +f 867/998/354 114/997/14 115/999/355 +f 867/998/354 115/999/355 116/1000/356 +f 867/998/354 116/1000/356 868/1001/356 +f 868/1001/356 116/1000/356 117/1002/357 +f 868/1001/356 117/1002/357 869/1003/357 +f 870/1004/37 862/988/37 352/404/37 +f 352/404/37 862/988/37 156/208/37 +f 352/404/37 156/208/37 254/306/37 +f 254/306/37 156/208/37 243/295/37 +f 243/295/37 156/208/37 155/207/37 +f 243/295/37 155/207/37 173/225/37 +f 550/636/37 549/635/37 870/1004/37 +f 870/1004/37 549/635/37 577/663/37 +f 870/1004/37 577/663/37 576/662/37 +f 576/662/37 575/661/37 870/1004/37 +f 870/1004/37 575/661/37 612/698/37 +f 870/1004/37 612/698/37 871/1005/37 +f 871/1005/37 612/698/37 634/720/37 +f 871/1005/37 634/720/37 693/779/37 +f 693/779/37 634/720/37 683/769/37 +f 693/779/37 683/769/37 692/778/315 +f 612/698/37 575/661/37 610/696/37 +f 610/696/37 575/661/37 585/671/37 +f 610/696/37 585/671/37 608/694/37 +f 608/694/37 585/671/37 606/692/37 +f 606/692/37 585/671/37 604/690/37 +f 604/690/37 585/671/37 602/688/37 +f 634/720/37 656/742/37 683/769/37 +f 683/769/37 656/742/37 647/733/37 +f 647/733/37 656/742/37 654/740/37 +f 647/733/37 654/740/37 652/738/37 +f 652/738/37 650/736/37 647/733/37 +f 647/733/37 650/736/37 648/734/37 +f 692/778/315 694/780/316 693/779/37 +f 693/779/37 701/787/37 871/1005/37 +f 863/992/37 855/974/37 871/1005/37 +f 871/1005/37 855/974/37 872/1006/37 +f 871/1005/37 872/1006/37 870/1004/37 +f 870/1004/37 872/1006/37 862/988/37 +f 864/993/37 869/1003/37 863/992/37 +f 863/992/37 869/1003/37 858/981/37 +f 863/992/37 858/981/37 857/978/37 +f 869/1003/37 864/993/37 868/1001/37 +f 868/1001/37 864/993/37 865/995/37 +f 868/1001/37 865/995/37 867/998/37 +f 867/998/37 865/995/37 866/996/37 +f 156/208/37 861/986/37 869/1003/37 +f 869/1003/37 861/986/37 860/984/37 +f 869/1003/37 860/984/37 859/983/37 +f 243/295/37 173/225/37 244/296/37 +f 244/296/37 173/225/37 198/250/37 +f 244/296/37 198/250/37 245/297/37 +f 245/297/37 198/250/37 194/246/37 +f 245/297/37 194/246/37 205/257/37 +f 198/250/37 197/249/37 194/246/37 +f 194/246/37 197/249/37 196/248/37 +f 194/246/37 196/248/37 195/247/37 +f 222/274/37 247/299/37 205/257/37 +f 205/257/37 247/299/37 246/298/37 +f 205/257/37 246/298/37 245/297/37 +f 271/323/37 342/394/37 254/306/37 +f 254/306/37 342/394/37 341/393/37 +f 254/306/37 341/393/37 352/404/37 +f 342/394/37 271/323/37 343/395/37 +f 343/395/37 271/323/37 296/348/37 +f 343/395/37 296/348/37 303/355/37 +f 303/355/37 296/348/37 292/344/37 +f 292/344/37 296/348/37 295/347/37 +f 292/344/37 295/347/37 294/346/37 +f 294/346/37 293/345/37 292/344/37 +f 320/372/37 345/397/37 303/355/37 +f 303/355/37 345/397/37 344/396/37 +f 303/355/37 344/396/37 343/395/37 +f 862/988/37 861/986/37 156/208/37 +f 859/983/37 858/981/37 869/1003/37 +f 857/978/37 856/975/37 863/992/37 +f 863/992/37 856/975/37 855/974/37 +f 117/1002/357 141/1007/357 869/1003/357 +f 869/1003/357 141/1007/357 143/1008/357 +f 869/1003/357 143/1008/357 145/1009/357 +f 117/1002/357 119/1010/357 141/1007/357 +f 145/1009/357 147/1011/358 869/1003/357 +f 869/1003/357 147/1011/358 149/1012/357 +f 869/1003/357 149/1012/357 150/1013/359 +f 150/1013/359 152/1014/360 869/1003/357 +f 869/1003/357 152/1014/360 154/1015/357 +f 869/1003/357 154/1015/357 156/208/358 +f 100/976/343 99/1016/341 855/974/341 +f 855/974/341 99/1016/341 872/1006/341 +f 863/992/350 871/1005/350 111/990/350 +f 111/990/350 871/1005/350 98/1017/350 +f 101/989/14 862/988/14 99/1016/14 +f 99/1016/14 862/988/14 872/1006/14 +f 107/1018/2 97/1019/2 346/1020/2 +f 346/1020/2 97/1019/2 870/1004/2 +f 346/1020/2 870/1004/2 347/1021/2 +f 347/1021/2 870/1004/2 348/1022/2 +f 348/1022/2 870/1004/2 349/1023/2 +f 349/1023/2 870/1004/2 350/1024/2 +f 350/1024/2 870/1004/2 351/1025/2 +f 351/1025/2 870/1004/2 352/404/2 +f 695/781/14 684/770/14 854/949/14 +f 854/949/14 684/770/14 702/788/14 +f 700/786/20 699/1026/20 701/787/20 +f 701/787/20 699/1026/20 698/784/20 +f 701/787/20 698/784/20 697/783/20 +f 697/783/20 696/1027/20 701/787/20 +f 701/787/20 696/1027/20 695/1028/20 +f 701/787/20 695/1028/20 871/1005/20 +f 871/1005/20 695/1028/20 98/1029/20 +f 98/1029/20 695/1028/20 854/1030/20 +f 98/1029/20 854/1030/20 848/1031/20 +f 848/1031/20 854/1030/20 853/1032/20 +f 848/1031/20 853/1032/20 852/947/20 +f 852/947/20 851/946/20 848/1031/20 +f 848/1031/20 851/946/20 850/945/20 +f 848/1031/20 850/945/20 849/1033/20 +f 848/1031/20 736/1034/20 98/1029/20 +f 98/1029/20 736/1034/20 724/1035/20 +f 98/1029/20 724/1035/20 97/1036/20 +f 97/1036/20 724/1035/20 562/1037/20 +f 97/1036/20 562/1037/20 870/1004/20 +f 870/1004/20 562/1037/20 550/636/20 +f 550/636/20 562/1037/20 560/646/20 +f 550/636/20 560/646/20 558/644/20 +f 734/1038/20 732/1039/20 736/1034/20 +f 736/1034/20 732/1039/20 730/818/20 +f 736/1034/20 730/818/20 728/816/20 +f 728/816/20 726/1040/20 736/1034/20 +f 736/1034/20 726/1040/20 724/1035/20 +f 558/644/20 556/642/20 550/636/20 +f 550/636/20 556/642/20 554/1041/20 +f 550/636/20 554/1041/20 552/638/20 +f 127/1042/1 873/1043/1 128/1044/2 +f 128/1044/2 873/1043/1 874/1045/2 +f 128/1044/2 874/1045/2 106/1046/3 +f 106/1046/3 874/1045/2 875/1047/3 +f 106/1046/3 875/1047/3 105/1048/4 +f 105/1048/4 875/1047/3 876/1049/4 +f 105/1048/4 876/1049/4 104/1050/5 +f 104/1050/5 876/1049/4 877/1051/5 +f 104/1050/5 877/1051/5 102/1052/6 +f 102/1052/6 877/1051/5 878/1053/6 +f 102/1052/6 878/1053/6 103/1054/7 +f 103/1054/7 878/1053/6 879/1055/7 +f 103/1054/7 879/1055/7 129/1056/8 +f 129/1056/8 879/1055/7 880/1057/8 +f 129/1058/8 880/1059/8 130/1060/9 +f 130/1060/9 880/1059/8 881/1061/9 +f 130/1060/9 881/1061/9 131/1062/10 +f 131/1062/10 881/1061/9 882/1063/10 +f 131/1062/10 882/1063/10 132/1064/11 +f 132/1064/11 882/1063/10 883/1065/11 +f 132/1064/11 883/1065/11 133/1066/12 +f 133/1066/12 883/1065/11 884/1067/12 +f 133/1066/12 884/1067/12 134/1068/13 +f 134/1068/13 884/1067/12 885/1069/13 +f 134/1068/13 885/1069/13 122/1070/14 +f 122/1070/14 885/1069/13 886/1071/14 +f 122/1070/14 886/1071/14 123/1072/15 +f 123/1072/15 886/1071/14 887/1073/15 +f 123/1074/15 887/1075/15 135/1076/16 +f 135/1076/16 887/1075/15 888/1077/16 +f 135/1076/16 888/1077/16 136/1078/17 +f 136/1078/17 888/1077/16 889/1079/17 +f 136/1078/17 889/1079/17 137/1080/18 +f 137/1080/18 889/1079/17 890/1081/18 +f 137/1080/18 890/1081/18 138/1082/19 +f 138/1082/19 890/1081/18 891/1083/19 +f 138/1082/19 891/1083/19 124/1084/20 +f 124/1084/20 891/1083/19 892/1085/20 +f 124/1084/20 892/1085/20 125/1086/21 +f 125/1086/21 892/1085/20 893/1087/21 +f 125/1086/21 893/1087/21 126/1088/22 +f 126/1088/22 893/1087/21 894/1089/22 +f 126/1088/22 894/1089/22 139/1090/23 +f 139/1090/23 894/1089/22 895/1091/23 +f 139/1090/23 895/1091/23 140/1092/24 +f 140/1092/24 895/1091/23 896/1093/24 +f 140/1092/24 896/1093/24 127/1042/1 +f 127/1042/1 896/1093/24 873/1043/1 +f 897/1094/20 898/1095/20 899/1096/19 +f 899/1096/19 898/1095/20 900/1097/19 +f 899/1096/19 900/1097/19 901/1098/18 +f 901/1098/18 900/1097/19 902/1099/18 +f 901/1098/18 902/1099/18 903/1100/17 +f 903/1100/17 902/1099/18 904/1101/17 +f 903/1100/17 904/1101/17 905/1102/16 +f 905/1102/16 904/1101/17 906/1103/16 +f 905/1102/16 906/1103/16 907/1104/15 +f 907/1104/15 906/1103/16 908/1105/15 +f 907/1104/15 908/1105/15 909/1106/14 +f 909/1106/14 908/1105/15 910/1107/14 +f 910/1107/14 911/1108/14 909/1109/14 +f 909/1109/14 911/1108/14 912/1110/14 +f 6/1111/37 4/1112/37 913/1113/37 +f 913/1113/37 4/1112/37 2/1114/37 +f 913/1113/37 2/1114/37 914/1115/37 +f 914/1115/37 2/1114/37 48/1116/37 +f 914/1115/37 48/1116/37 46/1117/37 +f 914/1115/37 46/1117/37 877/1118/37 +f 877/1118/37 46/1117/37 44/1119/37 +f 877/1118/37 44/1119/37 878/1120/37 +f 878/1120/37 44/1119/37 42/1121/37 +f 878/1120/37 42/1121/37 879/1122/37 +f 879/1122/37 42/1121/37 52/1123/37 +f 879/1122/37 52/1123/37 880/1124/37 +f 880/1124/37 52/1123/37 50/1125/37 +f 880/1124/37 50/1125/37 881/1126/37 +f 881/1126/37 50/1125/37 96/1127/37 +f 881/1126/37 96/1127/37 882/1128/37 +f 882/1128/37 96/1127/37 94/1129/37 +f 882/1128/37 94/1129/37 883/1130/37 +f 883/1130/37 94/1129/37 92/1131/37 +f 883/1130/37 92/1131/37 884/1132/37 +f 884/1132/37 92/1131/37 90/1133/37 +f 884/1132/37 90/1133/37 885/1134/37 +f 885/1134/37 90/1133/37 88/1135/37 +f 885/1134/37 88/1135/37 886/1136/37 +f 886/1136/37 88/1135/37 86/1137/37 +f 886/1136/37 86/1137/37 898/1095/37 +f 898/1095/37 86/1137/37 910/1107/37 +f 898/1095/37 910/1107/37 908/1105/37 +f 42/1121/37 40/1138/37 52/1123/37 +f 52/1123/37 40/1138/37 54/1139/37 +f 54/1139/37 40/1138/37 38/1140/37 +f 54/1139/37 38/1140/37 56/1141/37 +f 56/1141/37 38/1140/37 36/1142/37 +f 56/1141/37 36/1142/37 58/1143/37 +f 58/1143/37 36/1142/37 34/1144/37 +f 58/1143/37 34/1144/37 60/1145/37 +f 60/1145/37 34/1144/37 32/1146/37 +f 60/1145/37 32/1146/37 62/1147/37 +f 62/1147/37 32/1146/37 30/1148/37 +f 62/1147/37 30/1148/37 64/1149/37 +f 64/1149/37 30/1148/37 28/1150/37 +f 64/1149/37 28/1150/37 915/1151/37 +f 915/1151/37 28/1150/37 26/1152/37 +f 915/1151/37 26/1152/37 24/1153/37 +f 24/1153/37 22/1154/37 915/1151/37 +f 915/1151/37 22/1154/37 20/1155/37 +f 915/1151/37 20/1155/37 18/1156/37 +f 18/1156/37 16/1157/37 915/1151/37 +f 915/1151/37 16/1157/37 913/1113/37 +f 913/1113/37 16/1157/37 14/1158/37 +f 913/1113/37 14/1158/37 12/1159/37 +f 12/1159/37 10/1160/37 913/1113/37 +f 913/1113/37 10/1160/37 8/1161/37 +f 913/1113/37 8/1161/37 6/1111/37 +f 86/1137/37 84/1162/37 910/1107/37 +f 910/1107/37 84/1162/37 82/1163/37 +f 910/1107/37 82/1163/37 80/1164/37 +f 80/1164/37 78/1165/37 910/1107/37 +f 910/1107/37 78/1165/37 76/1166/37 +f 910/1107/37 76/1166/37 911/1108/37 +f 911/1108/37 76/1166/37 74/1167/37 +f 911/1108/37 74/1167/37 72/1168/37 +f 72/1168/37 70/1169/37 911/1108/37 +f 911/1108/37 70/1169/37 68/1170/37 +f 911/1108/37 68/1170/37 915/1151/37 +f 915/1151/37 68/1170/37 66/1171/37 +f 915/1151/37 66/1171/37 64/1149/37 +f 875/1172/37 874/1173/37 916/1174/37 +f 916/1174/37 874/1173/37 873/1175/37 +f 916/1174/37 873/1175/37 917/1176/37 +f 917/1176/37 873/1175/37 896/1177/37 +f 917/1176/37 896/1177/37 895/1178/37 +f 895/1178/37 894/1179/37 917/1176/37 +f 917/1176/37 894/1179/37 893/1180/37 +f 917/1176/37 893/1180/37 892/1181/37 +f 892/1181/37 891/1182/37 917/1176/37 +f 917/1176/37 891/1182/37 898/1095/37 +f 898/1095/37 891/1182/37 890/1183/37 +f 898/1095/37 890/1183/37 889/1184/37 +f 889/1184/37 888/1185/37 898/1095/37 +f 898/1095/37 888/1185/37 887/1186/37 +f 898/1095/37 887/1186/37 886/1136/37 +f 914/1115/37 877/1118/37 916/1174/37 +f 916/1174/37 877/1118/37 876/1187/37 +f 916/1174/37 876/1187/37 875/1172/37 +f 908/1105/37 906/1103/37 898/1095/37 +f 898/1095/37 906/1103/37 904/1101/37 +f 898/1095/37 904/1101/37 902/1099/37 +f 902/1099/37 900/1097/37 898/1095/37 +f 918/1188/37 919/1189/37 917/1176/37 +f 917/1176/37 919/1189/37 920/1190/37 +f 917/1176/37 920/1190/37 921/1191/37 +f 921/1191/37 922/1192/37 917/1176/37 +f 917/1176/37 922/1192/37 916/1174/37 +f 914/1115/37 923/1193/37 913/1113/37 +f 913/1113/37 923/1193/37 924/1194/37 +f 913/1113/37 924/1194/37 925/1195/37 +f 925/1195/37 926/1196/37 913/1113/37 +f 913/1113/37 926/1196/37 927/1197/37 +f 928/1198/37 929/1199/37 915/1151/37 +f 915/1151/37 929/1199/37 930/1200/37 +f 915/1151/37 930/1200/37 931/1201/37 +f 931/1201/37 932/1202/37 915/1151/37 +f 915/1151/37 932/1202/37 911/1108/37 +f 933/1203/2 916/1174/2 934/1204/1 +f 934/1204/1 916/1174/2 922/1192/1 +f 934/1204/1 922/1192/1 935/1205/24 +f 935/1205/24 922/1192/1 921/1191/24 +f 935/1205/24 921/1191/24 936/1206/23 +f 936/1206/23 921/1191/24 920/1190/23 +f 936/1206/23 920/1190/23 937/1207/22 +f 937/1207/22 920/1190/23 919/1189/22 +f 937/1207/22 919/1189/22 938/1208/21 +f 938/1208/21 919/1189/22 918/1188/21 +f 938/1208/21 918/1188/21 939/1209/20 +f 939/1209/20 918/1188/21 917/1176/20 +f 933/1210/2 940/1211/2 916/1174/2 +f 916/1174/2 940/1211/2 914/1115/2 +f 941/1212/8 913/1113/8 942/1213/7 +f 942/1213/7 913/1113/8 927/1197/7 +f 942/1213/7 927/1197/7 943/1214/6 +f 943/1214/6 927/1197/7 926/1196/6 +f 943/1214/6 926/1196/6 944/1215/5 +f 944/1215/5 926/1196/6 925/1195/5 +f 944/1215/5 925/1195/5 945/1216/4 +f 945/1216/4 925/1195/5 924/1194/4 +f 945/1216/4 924/1194/4 946/1217/3 +f 946/1217/3 924/1194/4 923/1193/3 +f 946/1217/3 923/1193/3 940/1218/2 +f 940/1218/2 923/1193/3 914/1115/2 +f 912/1219/14 911/1108/14 947/1220/13 +f 947/1220/13 911/1108/14 932/1202/13 +f 947/1220/13 932/1202/13 948/1221/12 +f 948/1221/12 932/1202/13 931/1201/12 +f 948/1221/12 931/1201/12 949/1222/11 +f 949/1222/11 931/1201/12 930/1200/11 +f 949/1222/11 930/1200/11 950/1223/10 +f 950/1223/10 930/1200/11 929/1199/10 +f 950/1223/10 929/1199/10 951/1224/9 +f 951/1224/9 929/1199/10 928/1198/9 +f 951/1224/9 928/1198/9 952/1225/8 +f 952/1225/8 928/1198/9 915/1151/8 +f 941/1226/8 952/1227/8 913/1113/8 +f 913/1113/8 952/1227/8 915/1151/8 +f 897/1228/20 939/1229/20 898/1095/20 +f 898/1095/20 939/1229/20 917/1176/20 +f 899/1230/25 901/1231/25 897/1232/25 +f 897/1232/25 901/1231/25 903/1233/25 +f 897/1232/25 903/1233/25 905/1234/25 +f 905/1234/25 907/1235/25 897/1232/25 +f 897/1232/25 907/1235/25 909/1236/25 +f 897/1232/25 909/1236/25 933/1237/25 +f 933/1237/25 909/1236/25 940/1238/25 +f 940/1238/25 909/1236/25 912/1239/25 +f 940/1238/25 912/1239/25 941/1240/25 +f 941/1240/25 912/1239/25 952/1241/25 +f 952/1241/25 912/1239/25 947/1242/25 +f 952/1241/25 947/1242/25 948/1243/25 +f 948/1243/25 949/1244/25 952/1241/25 +f 952/1241/25 949/1244/25 950/1245/25 +f 952/1241/25 950/1245/25 951/1246/25 +f 942/1247/25 943/1248/25 941/1240/25 +f 941/1240/25 943/1248/25 944/1249/25 +f 941/1240/25 944/1249/25 945/1250/25 +f 945/1250/25 946/1251/25 941/1240/25 +f 941/1240/25 946/1251/25 940/1238/25 +f 897/1232/25 933/1237/25 939/1252/25 +f 939/1252/25 933/1237/25 934/1253/25 +f 939/1252/25 934/1253/25 935/1254/25 +f 935/1254/25 936/1255/25 939/1252/25 +f 939/1252/25 936/1255/25 937/1256/25 +f 939/1252/25 937/1256/25 938/1257/25 diff --git a/resources/meshes/Original_Prusa_i3_MK3S_MK3_platform.stl b/resources/meshes/Original_Prusa_i3_MK3S_MK3_platform.stl new file mode 100644 index 0000000000..3b38a7daa2 Binary files /dev/null and b/resources/meshes/Original_Prusa_i3_MK3S_MK3_platform.stl differ diff --git a/resources/meshes/creality_cr10spro.stl b/resources/meshes/creality_cr10spro.stl new file mode 100644 index 0000000000..df2167d1eb Binary files /dev/null and b/resources/meshes/creality_cr10spro.stl differ diff --git a/resources/meshes/creality_ender3.stl b/resources/meshes/creality_ender3.stl new file mode 100644 index 0000000000..b1fd101aad Binary files /dev/null and b/resources/meshes/creality_ender3.stl differ diff --git a/resources/meshes/creality_ender3_platform.stl b/resources/meshes/creality_ender3_platform.stl deleted file mode 100644 index 4c3699a530..0000000000 --- a/resources/meshes/creality_ender3_platform.stl +++ /dev/null @@ -1,19854 +0,0 @@ -solid OpenSCAD_Model - facet normal 0 0 -1 - outer loop - vertex -36.5262 -13.4531 -3 - vertex -35.4871 -14.1281 -3 - vertex -35.6081 -14.799 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -35.4871 -14.1281 -3 - vertex -35.9073 -13.512 -3 - vertex -35.5739 -13.718 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -35.4871 -14.1281 -3 - vertex -36.5262 -13.4531 -3 - vertex -35.9073 -13.512 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -37.2393 -13.2576 -3 - vertex -35.6081 -14.799 -3 - vertex -37.0548 -18.7102 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -35.6081 -14.799 -3 - vertex -37.2393 -13.2576 -3 - vertex -36.5262 -13.4531 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -37.0548 -18.7102 -3 - vertex -37.5366 -12.7854 -3 - vertex -37.2393 -13.2576 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -37.3951 -12.1929 -3 - vertex -38.3729 23.836 -3 - vertex -37.6991 23.0789 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -37.3951 -12.1929 -3 - vertex -38.8382 24.6102 -3 - vertex -38.3729 23.836 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -37.3951 -12.1929 -3 - vertex -39.1303 25.4589 -3 - vertex -38.8382 24.6102 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -47.2102 -36.2359 -3 - vertex -37.5366 -12.7854 -3 - vertex -39.9072 -25.4747 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -39.9072 -25.4747 -3 - vertex -37.5366 -12.7854 -3 - vertex -37.0548 -18.7102 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -30.0976 22.0525 -3 - vertex -29.0303 22.3563 -3 - vertex -28.3511 21.9725 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -30.0976 22.0525 -3 - vertex -30.3878 23.2826 -3 - vertex -29.0303 22.3563 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -32.1178 22.3529 -3 - vertex -30.3878 23.2826 -3 - vertex -30.0976 22.0525 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -31.0943 24.213 -3 - vertex -34.2108 23.023 -3 - vertex -31.2773 24.779 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -34.2108 23.023 -3 - vertex -31.0943 24.213 -3 - vertex -32.1178 22.3529 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -30.3878 23.2826 -3 - vertex -32.1178 22.3529 -3 - vertex -31.0943 24.213 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -26.0647 23.8437 -3 - vertex -26.0224 24.2804 -3 - vertex -24.664 24.0122 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -27.3687 23.7586 -3 - vertex -26.0224 24.2804 -3 - vertex -26.0647 23.8437 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -27.3687 23.7586 -3 - vertex -28.1365 24.9019 -3 - vertex -26.0224 24.2804 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -28.4642 23.8513 -3 - vertex -28.1365 24.9019 -3 - vertex -27.3687 23.7586 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -29.3958 24.13 -3 - vertex -28.1365 24.9019 -3 - vertex -28.4642 23.8513 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -29.3958 24.13 -3 - vertex -29.9035 25.8898 -3 - vertex -28.1365 24.9019 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -30.2081 24.6027 -3 - vertex -29.9035 25.8898 -3 - vertex -29.3958 24.13 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -30.8173 24.9813 -3 - vertex -29.9035 25.8898 -3 - vertex -30.2081 24.6027 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -31.1793 25.0376 -3 - vertex -29.9035 25.8898 -3 - vertex -30.8173 24.9813 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -29.9035 25.8898 -3 - vertex -31.1793 25.0376 -3 - vertex -31.116 26.9038 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -31.2912 27.2229 -3 - vertex -31.1793 25.0376 -3 - vertex -31.2773 24.779 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -31.1793 25.0376 -3 - vertex -31.2912 27.2229 -3 - vertex -31.116 26.9038 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -22.4212 26.8695 -3 - vertex -21.4485 26.3569 -3 - vertex -22.0473 26.2369 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -21.4485 26.3569 -3 - vertex -22.4212 26.8695 -3 - vertex -21.2681 26.5576 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.8433 26.205 -3 - vertex -22.4212 26.8695 -3 - vertex -22.0473 26.2369 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -27.4214 26.3653 -3 - vertex -24.3225 27.6757 -3 - vertex -24.8433 26.205 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -23.8902 27.3484 -3 - vertex -24.8433 26.205 -3 - vertex -24.3225 27.6757 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -22.4212 26.8695 -3 - vertex -24.8433 26.205 -3 - vertex -23.8902 27.3484 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.168338 -24.355 -3 - vertex -3.89417 -22.8317 -3 - vertex -3.85646 -21.6547 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -6.41168 -29.738 -3 - vertex -3.7659 -32.0301 -3 - vertex -3.99709 -33.5697 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -3.14673 -30.0798 -3 - vertex -4.26405 -24.3543 -3 - vertex -3.89417 -22.8317 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 13.2867 -16.8469 -3 - vertex 12.858 -14.1239 -3 - vertex 14.1246 -14.3424 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 13.2867 -16.8469 -3 - vertex 12.417 -13.7469 -3 - vertex 12.858 -14.1239 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 10.3474 -19.1774 -3 - vertex 13.2867 -16.8469 -3 - vertex 11.2177 -19.5302 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.2177 -19.5302 -3 - vertex 13.2867 -16.8469 -3 - vertex 12.058 -19.7199 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 12.0544 30.7144 -3 - vertex 5.19939 38.083 -3 - vertex 5.25321 38.4452 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.5971 30.3591 -3 - vertex 4.72188 37.0399 -3 - vertex 5.19939 38.083 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.2319 29.4873 -3 - vertex 3.57109 31.3388 -3 - vertex 11.5971 30.3591 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 4.30515 36.0346 -3 - vertex 11.5971 30.3591 -3 - vertex 3.93589 34.5584 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.5971 30.3591 -3 - vertex 4.30515 36.0346 -3 - vertex 4.72188 37.0399 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.57109 31.3388 -3 - vertex 4.3138 28.4461 -3 - vertex 3.67763 29.7129 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.5971 30.3591 -3 - vertex 3.57109 31.3388 -3 - vertex 3.93589 34.5584 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 7.21237 -5.88439 -3 - vertex 7.03104 -4.97268 -3 - vertex 7.79727 -5.75259 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 5.81183 -5.98051 -3 - vertex 7.03104 -4.97268 -3 - vertex 7.21237 -5.88439 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 7.03104 -4.97268 -3 - vertex 5.81183 -5.98051 -3 - vertex 5.97791 -3.63939 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.9592 -5.58648 -3 - vertex 5.97791 -3.63939 -3 - vertex 5.81183 -5.98051 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 5.97791 -3.63939 -3 - vertex 3.9592 -5.58648 -3 - vertex 5.02006 -2.01238 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 5.02006 -2.01238 -3 - vertex 1.09298 -4.60426 -3 - vertex 4.37015 -0.506109 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 1.09298 -4.60426 -3 - vertex 5.02006 -2.01238 -3 - vertex 3.9592 -5.58648 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 24.7931 16.6725 -3 - vertex 24.1542 17.4223 -3 - vertex 24.7174 17.1695 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 23.3802 15.8262 -3 - vertex 24.1542 17.4223 -3 - vertex 24.7931 16.6725 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 23.3802 15.8262 -3 - vertex 22.547 17.5015 -3 - vertex 24.1542 17.4223 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 21.1653 14.8489 -3 - vertex 22.547 17.5015 -3 - vertex 23.3802 15.8262 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 21.1653 14.8489 -3 - vertex 20.2159 17.5562 -3 - vertex 22.547 17.5015 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 20.0668 14.6265 -3 - vertex 20.2159 17.5562 -3 - vertex 21.1653 14.8489 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 18.4164 15.1559 -3 - vertex 20.2159 17.5562 -3 - vertex 20.0668 14.6265 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 20.2159 17.5562 -3 - vertex 18.4164 15.1559 -3 - vertex 19.8437 17.7553 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 16.5954 15.8977 -3 - vertex 19.8437 17.7553 -3 - vertex 18.4164 15.1559 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 19.8437 17.7553 -3 - vertex 16.5954 15.8977 -3 - vertex 19.5351 18.2611 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.2045 16.623 -3 - vertex 19.5351 18.2611 -3 - vertex 16.5954 15.8977 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 19.5351 18.2611 -3 - vertex 15.2045 16.623 -3 - vertex 19.0948 20.2262 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 13.99 17.4864 -3 - vertex 19.0948 20.2262 -3 - vertex 15.2045 16.623 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.0948 20.2262 -3 - vertex 17.155 22.8321 -3 - vertex 18.6529 22.0992 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 19.0948 20.2262 -3 - vertex 13.99 17.4864 -3 - vertex 17.155 22.8321 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 12.6982 18.6425 -3 - vertex 17.155 22.8321 -3 - vertex 13.99 17.4864 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 17.155 22.8321 -3 - vertex 12.6982 18.6425 -3 - vertex 15.5055 23.4995 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 10.9729 20.5521 -3 - vertex 15.5055 23.4995 -3 - vertex 12.6982 18.6425 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 15.5055 23.4995 -3 - vertex 10.9729 20.5521 -3 - vertex 14.0164 24.1527 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 14.0164 24.1527 -3 - vertex 10.9729 20.5521 -3 - vertex 13.0733 24.7212 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 9.71033 23.0922 -3 - vertex 13.0733 24.7212 -3 - vertex 10.9729 20.5521 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 13.0733 24.7212 -3 - vertex 9.71033 23.0922 -3 - vertex 12.1975 25.5292 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 12.1975 25.5292 -3 - vertex 9.07032 24.476 -3 - vertex 11.5037 26.4501 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 9.07032 24.476 -3 - vertex 12.1975 25.5292 -3 - vertex 9.71033 23.0922 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 25.704 16.8274 -3 - vertex 26.0816 17.5963 -3 - vertex 25.8979 16.7563 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 25.1513 17.7384 -3 - vertex 26.0816 17.5963 -3 - vertex 25.4738 17.2443 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 26.0816 17.5963 -3 - vertex 25.704 16.8274 -3 - vertex 25.4738 17.2443 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 26.0816 17.5963 -3 - vertex 25.1513 17.7384 -3 - vertex 25.9892 18.2943 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 25.9892 18.2943 -3 - vertex 25.1513 17.7384 -3 - vertex 25.7331 18.8483 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 24.5942 18.0475 -3 - vertex 25.7331 18.8483 -3 - vertex 25.1513 17.7384 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 25.7331 18.8483 -3 - vertex 24.5942 18.0475 -3 - vertex 25.3447 19.2137 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 25.3447 19.2137 -3 - vertex 24.5942 18.0475 -3 - vertex 24.8554 19.3454 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 24.5942 18.0475 -3 - vertex 23.3909 19.6849 -3 - vertex 24.8554 19.3454 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.335 18.2522 -3 - vertex 23.3909 19.6849 -3 - vertex 24.5942 18.0475 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 23.3909 19.6849 -3 - vertex 22.335 18.2522 -3 - vertex 22.6368 20.047 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 20.9591 18.304 -3 - vertex 22.6368 20.047 -3 - vertex 22.335 18.2522 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 22.6368 20.047 -3 - vertex 20.9591 18.304 -3 - vertex 22.0911 20.5797 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.8405 19.3078 -3 - vertex 22.0911 20.5797 -3 - vertex 20.9591 18.304 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.4421 21.9215 -3 - vertex 21.7245 21.3239 -3 - vertex 19.6596 20.6529 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.6596 20.6529 -3 - vertex 22.0911 20.5797 -3 - vertex 19.8405 19.3078 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 21.7245 21.3239 -3 - vertex 19.4421 21.9215 -3 - vertex 21.508 22.3204 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.8405 19.3078 -3 - vertex 20.9591 18.304 -3 - vertex 20.2006 18.5903 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 21.508 22.3204 -3 - vertex 19.4421 21.9215 -3 - vertex 21.2518 23.2891 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.0911 20.5797 -3 - vertex 19.6596 20.6529 -3 - vertex 21.7245 21.3239 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 18.9185 22.6398 -3 - vertex 21.2518 23.2891 -3 - vertex 19.4421 21.9215 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 21.2518 23.2891 -3 - vertex 18.9185 22.6398 -3 - vertex 20.762 24.0784 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 20.762 24.0784 -3 - vertex 18.9185 22.6398 -3 - vertex 20.0338 24.6942 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 20.0338 24.6942 -3 - vertex 18.9185 22.6398 -3 - vertex 19.062 25.1422 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 17.6852 23.4449 -3 - vertex 19.062 25.1422 -3 - vertex 18.9185 22.6398 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 17.6852 23.4449 -3 - vertex 17.2513 25.98 -3 - vertex 19.062 25.1422 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.1211 24.4531 -3 - vertex 17.2513 25.98 -3 - vertex 17.6852 23.4449 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 17.2513 25.98 -3 - vertex 15.1211 24.4531 -3 - vertex 15.7223 27.2873 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 13.4969 25.2416 -3 - vertex 15.7223 27.2873 -3 - vertex 15.1211 24.4531 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 15.7223 27.2873 -3 - vertex 13.4969 25.2416 -3 - vertex 15.122 28.0941 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 12.5486 25.9653 -3 - vertex 15.122 28.0941 -3 - vertex 13.4969 25.2416 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 17.1521 -17.7131 -3 - vertex 20.2954 -22.4759 -3 - vertex 19.0386 -23.7798 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 14.5835 -23.8342 -3 - vertex 19.0386 -23.7798 -3 - vertex 17.855 -25.2923 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 20.2954 -22.4759 -3 - vertex 17.1521 -17.7131 -3 - vertex 19.6777 -11.13 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 14.5835 -23.8342 -3 - vertex 17.855 -25.2923 -3 - vertex 16.4055 -27.6373 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 14.5835 -23.8342 -3 - vertex 16.4055 -27.6373 -3 - vertex 15.3794 -29.9771 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.4887 -31.4602 -3 - vertex 15.3794 -29.9771 -3 - vertex 14.7938 -32.2631 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 19.0386 -23.7798 -3 - vertex 14.5835 -23.8342 -3 - vertex 17.1521 -17.7131 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.871 -34.5351 -3 - vertex 14.7938 -32.2631 -3 - vertex 14.6656 -34.4466 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 26.7235 1.18648 -3 - vertex 20.9081 -2.19366 -3 - vertex 21.0968 -1.15452 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 23.0737 -20.4525 -3 - vertex 19.6777 -11.13 -3 - vertex 20.9081 -2.19366 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.6777 -11.13 -3 - vertex 21.6367 -21.3703 -3 - vertex 20.2954 -22.4759 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 20.9081 -2.19366 -3 - vertex 19.6777 -11.13 -3 - vertex 20.4179 -3.0084 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.5452 -10.7956 -3 - vertex 20.4179 -3.0084 -3 - vertex 19.6777 -11.13 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.5452 -10.7956 -3 - vertex 19.4334 -3.80993 -3 - vertex 20.4179 -3.0084 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 17.7619 -4.80944 -3 - vertex 19.5452 -10.7956 -3 - vertex 19.0845 -10.6988 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.5452 -10.7956 -3 - vertex 17.7619 -4.80944 -3 - vertex 19.4334 -3.80993 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.0012 -6.23992 -3 - vertex 19.0845 -10.6988 -3 - vertex 16.7993 -11.2316 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.0845 -10.6988 -3 - vertex 15.0012 -6.23992 -3 - vertex 17.7619 -4.80944 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 12.6103 -7.15898 -3 - vertex 16.7993 -11.2316 -3 - vertex 13.71 -12.1451 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 12.6103 -7.15898 -3 - vertex 13.71 -12.1451 -3 - vertex 13.1035 -12.4147 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 10.2421 -7.67101 -3 - vertex 13.1035 -12.4147 -3 - vertex 12.6527 -12.8127 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 16.7993 -11.2316 -3 - vertex 12.6103 -7.15898 -3 - vertex 15.0012 -6.23992 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 10.2421 -7.67101 -3 - vertex 12.6527 -12.8127 -3 - vertex 12.4073 -13.2773 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 13.2867 -16.8469 -3 - vertex 10.3474 -19.1774 -3 - vertex 12.417 -13.7469 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.2177 -19.5302 -3 - vertex 12.058 -19.7199 -3 - vertex 11.7785 -19.8211 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 8.75581 -19.1712 -3 - vertex 12.417 -13.7469 -3 - vertex 10.3474 -19.1774 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 7.06268 -19.3694 -3 - vertex 12.417 -13.7469 -3 - vertex 8.75581 -19.1712 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 13.1035 -12.4147 -3 - vertex 10.2421 -7.67101 -3 - vertex 12.6103 -7.15898 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 12.417 -13.7469 -3 - vertex 7.06268 -19.3694 -3 - vertex 12.4073 -13.2773 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 12.4073 -13.2773 -3 - vertex 7.54923 -7.88041 -3 - vertex 10.2421 -7.67101 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 12.4073 -13.2773 -3 - vertex 7.06268 -19.3694 -3 - vertex 7.54923 -7.88041 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 5.03167 -7.88498 -3 - vertex 7.06268 -19.3694 -3 - vertex 5.689 -19.9339 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 7.06268 -19.3694 -3 - vertex 5.03167 -7.88498 -3 - vertex 7.54923 -7.88041 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 5.689 -19.9339 -3 - vertex 3.854 -7.59505 -3 - vertex 5.03167 -7.88498 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.72385 -21.1527 -3 - vertex 3.854 -7.59505 -3 - vertex 5.689 -19.9339 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -4.06681 -20.6308 -3 - vertex 3.72385 -21.1527 -3 - vertex 1.84511 -22.661 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.72385 -21.1527 -3 - vertex -4.70045 -19.8327 -3 - vertex 3.854 -7.59505 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -3.85646 -21.6547 -3 - vertex 1.84511 -22.661 -3 - vertex 0.168338 -24.355 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -3.89417 -22.8317 -3 - vertex 0.168338 -24.355 -3 - vertex -1.19093 -26.1306 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.72385 -21.1527 -3 - vertex -4.06681 -20.6308 -3 - vertex -4.70045 -19.8327 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -3.89417 -22.8317 -3 - vertex -1.19093 -26.1306 -3 - vertex -2.25121 -28.0146 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -3.89417 -22.8317 -3 - vertex -2.25121 -28.0146 -3 - vertex -3.14673 -30.0798 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 1.84511 -22.661 -3 - vertex -3.85646 -21.6547 -3 - vertex -4.06681 -20.6308 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -5.57075 -19.2012 -3 - vertex 3.854 -7.59505 -3 - vertex -4.70045 -19.8327 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -6.41168 -29.738 -3 - vertex -3.14673 -30.0798 -3 - vertex -3.7659 -32.0301 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 47.2139 -19.2263 -3 - vertex 27.528 9.70386 -3 - vertex 27.6094 12.2412 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 28.989 -19.2301 -3 - vertex 26.953 2.16551 -3 - vertex 27.528 9.70386 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 26.9177 3.98634 -3 - vertex 27.528 9.70386 -3 - vertex 26.953 2.16551 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 28.989 -19.2301 -3 - vertex 26.8464 1.29842 -3 - vertex 26.953 2.16551 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 28.989 -19.2301 -3 - vertex 26.7235 1.18648 -3 - vertex 26.8464 1.29842 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 20.9081 -2.19366 -3 - vertex 26.7235 1.18648 -3 - vertex 27.8281 -19.1444 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 20.9081 -2.19366 -3 - vertex 27.8281 -19.1444 -3 - vertex 26.5413 -19.2026 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 26.7235 1.18648 -3 - vertex 21.0968 -1.15452 -3 - vertex 26.5455 1.2697 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 20.9081 -2.19366 -3 - vertex 26.5413 -19.2026 -3 - vertex 25.4359 -19.4082 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 23.9858 2.16372 -3 - vertex 26.5455 1.2697 -3 - vertex 21.0968 -1.15452 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 26.5455 1.2697 -3 - vertex 23.9858 2.16372 -3 - vertex 25.9977 1.96397 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 25.3153 2.68052 -3 - vertex 24.7523 2.4559 -3 - vertex 25.0347 2.67962 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 25.9977 1.96397 -3 - vertex 24.7523 2.4559 -3 - vertex 25.3153 2.68052 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 25.9977 1.96397 -3 - vertex 23.9858 2.16372 -3 - vertex 24.7523 2.4559 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 20.9081 -2.19366 -3 - vertex 25.4359 -19.4082 -3 - vertex 23.0737 -20.4525 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 23.9858 2.16372 -3 - vertex 21.0968 -1.15452 -3 - vertex 23.1222 1.97635 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 21.0282 0.220415 -3 - vertex 23.1222 1.97635 -3 - vertex 21.0968 -1.15452 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 23.1222 1.97635 -3 - vertex 21.0282 0.220415 -3 - vertex 22.8505 1.9828 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.6777 -11.13 -3 - vertex 23.0737 -20.4525 -3 - vertex 21.6367 -21.3703 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 22.8505 1.9828 -3 - vertex 21.0282 0.220415 -3 - vertex 22.7784 2.30129 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.4865 -0.127098 -3 - vertex 22.7784 2.30129 -3 - vertex 21.0282 0.220415 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.7784 2.30129 -3 - vertex 16.0239 2.90744 -3 - vertex 21.7142 8.22365 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 22.7784 2.30129 -3 - vertex 19.4865 -0.127098 -3 - vertex 16.0239 2.90744 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.3368 5.33522 -3 - vertex 21.7142 8.22365 -3 - vertex 16.0239 2.90744 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 16.8564 0.883682 -3 - vertex 19.4865 -0.127098 -3 - vertex 18.2674 -0.466912 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 16.8564 0.883682 -3 - vertex 18.2674 -0.466912 -3 - vertex 17.6745 -0.267811 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.4865 -0.127098 -3 - vertex 16.8564 0.883682 -3 - vertex 16.0239 2.90744 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 21.7142 8.22365 -3 - vertex 15.3368 5.33522 -3 - vertex 19.7157 9.66569 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 14.9551 7.69881 -3 - vertex 19.7157 9.66569 -3 - vertex 15.3368 5.33522 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 19.7157 9.66569 -3 - vertex 14.9551 7.69881 -3 - vertex 18.6847 10.137 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 18.6847 10.137 -3 - vertex 14.9551 7.69881 -3 - vertex 17.337 10.3363 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 14.9426 8.95486 -3 - vertex 17.337 10.3363 -3 - vertex 14.9551 7.69881 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 17.337 10.3363 -3 - vertex 15.3572 9.74689 -3 - vertex 15.9933 10.3315 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.9933 10.3315 -3 - vertex 15.3572 9.74689 -3 - vertex 15.6762 10.1383 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 17.337 10.3363 -3 - vertex 14.9426 8.95486 -3 - vertex 15.3572 9.74689 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 34.7441 -22.7166 -3 - vertex 31.8275 -24.8188 -3 - vertex 32.0255 -23.3848 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 29.8709 -31.8517 -3 - vertex 32.5255 -33.371 -3 - vertex 31.6707 -35.0376 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 33.8444 -30.1753 -3 - vertex 31.4974 -26.3899 -3 - vertex 31.8275 -24.8188 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 33.8444 -30.1753 -3 - vertex 31.2318 -26.857 -3 - vertex 31.4974 -26.3899 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 29.8709 -31.8517 -3 - vertex 31.6707 -35.0376 -3 - vertex 30.8837 -35.7486 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 33.8444 -30.1753 -3 - vertex 30.2029 -31.1764 -3 - vertex 30.1062 -30.7807 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 30.7817 -27.1595 -3 - vertex 33.8444 -30.1753 -3 - vertex 30.1062 -30.7807 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 32.5255 -33.371 -3 - vertex 29.8709 -31.8517 -3 - vertex 30.2029 -31.1764 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 27.8442 -34.1555 -3 - vertex 30.8837 -35.7486 -3 - vertex 29.7686 -36.0779 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 27.8442 -34.1555 -3 - vertex 29.7686 -36.0779 -3 - vertex 29.0223 -36.3831 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 27.8442 -34.1555 -3 - vertex 29.0223 -36.3831 -3 - vertex 28.553 -36.8405 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 25.9895 -35.834 -3 - vertex 28.553 -36.8405 -3 - vertex 28.4102 -37.3704 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 30.8837 -35.7486 -3 - vertex 27.8442 -34.1555 -3 - vertex 29.8709 -31.8517 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 33.8444 -30.1753 -3 - vertex 30.7817 -27.1595 -3 - vertex 31.2318 -26.857 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 29.6885 -30.4984 -3 - vertex 30.7817 -27.1595 -3 - vertex 30.1062 -30.7807 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 28.9763 -27.4135 -3 - vertex 29.6885 -30.4984 -3 - vertex 29.2916 -30.4642 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 29.6885 -30.4984 -3 - vertex 28.9763 -27.4135 -3 - vertex 30.7817 -27.1595 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 28.199 -31.2235 -3 - vertex 28.9763 -27.4135 -3 - vertex 29.2916 -30.4642 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 25.3774 -27.4375 -3 - vertex 28.199 -31.2235 -3 - vertex 26.4192 -32.7448 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 28.199 -31.2235 -3 - vertex 25.3774 -27.4375 -3 - vertex 28.9763 -27.4135 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 24.9271 -33.7368 -3 - vertex 25.3774 -27.4375 -3 - vertex 26.4192 -32.7448 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.5138 -29.5327 -3 - vertex 24.9271 -33.7368 -3 - vertex 23.5816 -34.2758 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.3087 -31.0557 -3 - vertex 23.5816 -34.2758 -3 - vertex 22.2417 -34.4379 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.3087 -31.0557 -3 - vertex 22.2417 -34.4379 -3 - vertex 21.4183 -34.349 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.3085 -32.3556 -3 - vertex 21.4183 -34.349 -3 - vertex 20.6651 -34.0963 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 23.5816 -34.2758 -3 - vertex 19.3087 -31.0557 -3 - vertex 19.5138 -29.5327 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.3085 -32.3556 -3 - vertex 20.6651 -34.0963 -3 - vertex 20.0228 -33.6987 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 25.3774 -27.4375 -3 - vertex 19.9054 -28.0436 -3 - vertex 20.1129 -27.4424 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.3085 -32.3556 -3 - vertex 20.0228 -33.6987 -3 - vertex 19.5322 -33.1754 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 25.3774 -27.4375 -3 - vertex 19.5138 -29.5327 -3 - vertex 19.9054 -28.0436 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 24.9271 -33.7368 -3 - vertex 19.5138 -29.5327 -3 - vertex 25.3774 -27.4375 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 21.4183 -34.349 -3 - vertex 19.3085 -32.3556 -3 - vertex 19.3087 -31.0557 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 27.528 9.70386 -3 - vertex 26.9177 3.98634 -3 - vertex 27.209 8.08714 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 27.209 8.08714 -3 - vertex 26.9177 3.98634 -3 - vertex 26.8985 6.51977 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 23.2082 3.44442 -3 - vertex 23.5966 4.95794 -3 - vertex 23.5377 4.18291 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 23.5966 4.95794 -3 - vertex 23.2082 3.44442 -3 - vertex 23.3811 5.8089 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 23.2082 3.44442 -3 - vertex 22.8875 6.77518 -3 - vertex 23.3811 5.8089 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 21.7142 8.22365 -3 - vertex 23.2082 3.44442 -3 - vertex 22.7784 2.30129 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 23.2082 3.44442 -3 - vertex 21.7142 8.22365 -3 - vertex 22.8875 6.77518 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.0577 29.0611 -3 - vertex 12.0187 29.9363 -3 - vertex 12.2907 30.5214 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.7374 28.4518 -3 - vertex 15.122 28.0941 -3 - vertex 11.8052 27.5343 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 11.8088 29.3224 -3 - vertex 15.0577 29.0611 -3 - vertex 11.7374 28.4518 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.122 28.0941 -3 - vertex 11.7374 28.4518 -3 - vertex 15.0577 29.0611 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.0577 29.0611 -3 - vertex 11.8088 29.3224 -3 - vertex 12.0187 29.9363 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.871 -34.5351 -3 - vertex 14.6656 -34.4466 -3 - vertex 12.1385 -34.7994 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 14.7938 -32.2631 -3 - vertex 11.871 -34.5351 -3 - vertex 11.4887 -31.4602 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 15.3794 -29.9771 -3 - vertex 11.4887 -31.4602 -3 - vertex 14.5835 -23.8342 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 10.915 -33.0747 -3 - vertex 11.871 -34.5351 -3 - vertex 11.4551 -34.4353 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.871 -34.5351 -3 - vertex 10.915 -33.0747 -3 - vertex 11.4887 -31.4602 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 10.7197 -33.9677 -3 - vertex 11.4551 -34.4353 -3 - vertex 10.9006 -34.3507 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.4551 -34.4353 -3 - vertex 10.7197 -33.9677 -3 - vertex 10.915 -33.0747 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 14.2516 -3.15818 -3 - vertex 14.2455 -2.23644 -3 - vertex 14.333 -2.7489 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 13.8131 -3.7697 -3 - vertex 14.2455 -2.23644 -3 - vertex 14.2516 -3.15818 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 13.172 -4.2601 -3 - vertex 14.2455 -2.23644 -3 - vertex 13.8131 -3.7697 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 14.2455 -2.23644 -3 - vertex 13.172 -4.2601 -3 - vertex 13.5923 -0.94501 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 12.4032 -4.58609 -3 - vertex 13.5923 -0.94501 -3 - vertex 13.172 -4.2601 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.5814 -4.70438 -3 - vertex 13.5923 -0.94501 -3 - vertex 12.4032 -4.58609 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 10.2758 -4.53506 -3 - vertex 13.5923 -0.94501 -3 - vertex 11.5814 -4.70438 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 13.5923 -0.94501 -3 - vertex 10.2758 -4.53506 -3 - vertex 12.3489 0.629998 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 9.01294 -4.00814 -3 - vertex 12.3489 0.629998 -3 - vertex 10.2758 -4.53506 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 7.74282 -3.09522 -3 - vertex 12.3489 0.629998 -3 - vertex 9.01294 -4.00814 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 12.3489 0.629998 -3 - vertex 7.74282 -3.09522 -3 - vertex 10.5724 2.40247 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 6.41545 -1.76788 -3 - vertex 10.5724 2.40247 -3 - vertex 7.74282 -3.09522 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 10.5724 2.40247 -3 - vertex 6.41545 -1.76788 -3 - vertex 9.13441 3.60373 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.6091 0.441775 -3 - vertex 9.13441 3.60373 -3 - vertex 6.41545 -1.76788 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 9.13441 3.60373 -3 - vertex 4.6091 0.441775 -3 - vertex 8.18559 4.25764 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.39665 0.754678 -3 - vertex 8.18559 4.25764 -3 - vertex 4.6091 0.441775 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 8.18559 4.25764 -3 - vertex 4.39665 0.754678 -3 - vertex 5.26682 5.76024 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 1.66409 7.13679 -3 - vertex 4.39665 0.754678 -3 - vertex 4.24084 0.464987 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.39665 0.754678 -3 - vertex 1.66409 7.13679 -3 - vertex 5.26682 5.76024 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -1.72768 -3.30659 -3 - vertex 4.37015 -0.506109 -3 - vertex 1.09298 -4.60426 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 4.37015 -0.506109 -3 - vertex -1.72768 -3.30659 -3 - vertex 4.24084 0.464987 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -3.55278 -2.51803 -3 - vertex 4.24084 0.464987 -3 - vertex -1.72768 -3.30659 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 4.24084 0.464987 -3 - vertex -3.55278 -2.51803 -3 - vertex 1.66409 7.13679 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 1.66409 7.13679 -3 - vertex -3.55278 -2.51803 -3 - vertex -0.248642 7.94666 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -0.248642 7.94666 -3 - vertex -3.55278 -2.51803 -3 - vertex -2.78119 9.30203 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -4.99153 10.6633 -3 - vertex -3.55278 -2.51803 -3 - vertex -3.71458 -2.66291 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 3.854 -7.59505 -3 - vertex -5.57075 -19.2012 -3 - vertex 1.04019 -5.91722 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 1.04019 -5.91722 -3 - vertex -5.57075 -19.2012 -3 - vertex -2.05653 -4.03047 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -7.1272 -19.1706 -3 - vertex -2.05653 -4.03047 -3 - vertex -5.57075 -19.2012 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -3.55278 -2.51803 -3 - vertex -4.99153 10.6633 -3 - vertex -2.78119 9.30203 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -2.05653 -4.03047 -3 - vertex -7.1272 -19.1706 -3 - vertex -3.45272 -3.03042 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.4385 -11.5861 -3 - vertex -3.45272 -3.03042 -3 - vertex -7.1272 -19.1706 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.7993 -11.4712 -3 - vertex -3.71458 -2.66291 -3 - vertex -17.4385 -11.5861 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -3.45272 -3.03042 -3 - vertex -17.4385 -11.5861 -3 - vertex -3.71458 -2.66291 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 1.41055 11.926 -3 - vertex 1.8467 12.7398 -3 - vertex 1.87173 12.344 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 1.8467 12.7398 -3 - vertex 1.41055 11.926 -3 - vertex 1.50002 13.1874 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 1.41055 11.926 -3 - vertex 0.918757 13.5702 -3 - vertex 1.50002 13.1874 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.535115 11.4454 -3 - vertex 0.918757 13.5702 -3 - vertex 1.41055 11.926 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.394194 11.1972 -3 - vertex 0.918757 13.5702 -3 - vertex 0.535115 11.4454 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.394194 11.1972 -3 - vertex -0.928844 14.138 -3 - vertex 0.918757 13.5702 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -1.46211 11.1697 -3 - vertex -0.928844 14.138 -3 - vertex -0.394194 11.1972 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -2.75335 11.3511 -3 - vertex -0.928844 14.138 -3 - vertex -1.46211 11.1697 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -2.75335 11.3511 -3 - vertex -3.65881 14.4362 -3 - vertex -0.928844 14.138 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -5.07797 11.6776 -3 - vertex -3.65881 14.4362 -3 - vertex -2.75335 11.3511 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -7.23385 14.4578 -3 - vertex -5.07797 11.6776 -3 - vertex -5.71478 11.6495 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -7.23385 14.4578 -3 - vertex -5.71478 11.6495 -3 - vertex -5.93765 11.491 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -5.07797 11.6776 -3 - vertex -7.23385 14.4578 -3 - vertex -3.65881 14.4362 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -13.7227 13.3517 -3 - vertex -3.71458 -2.66291 -3 - vertex -17.5299 12.3491 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.4385 -11.5861 -3 - vertex -7.1272 -19.1706 -3 - vertex -8.78621 -19.378 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -11.7016 -19.4898 -3 - vertex -8.78621 -19.378 -3 - vertex -10.3766 -20.1728 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -3.71458 -2.66291 -3 - vertex -13.7227 13.3517 -3 - vertex -4.99153 10.6633 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -11.7016 -19.4898 -3 - vertex -10.3766 -20.1728 -3 - vertex -11.6824 -19.9072 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -10.3766 -20.1728 -3 - vertex -11.8627 -20.4599 -3 - vertex -11.6824 -19.9072 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -11.8627 -20.4599 -3 - vertex -10.3766 -20.1728 -3 - vertex -12.0544 -21.102 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -20.6062 -18.108 -3 - vertex -22.6991 -20.0641 -3 - vertex -22.6057 -19.3555 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -23.6767 -35.9691 -3 - vertex -22.458 -35.4568 -3 - vertex -23.007 -35.8619 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.4076 -24.3815 -3 - vertex -21.28 -33.2523 -3 - vertex -23.4462 -30.738 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -21.28 -33.2523 -3 - vertex -23.1278 -21.2395 -3 - vertex -22.6991 -20.0641 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -22.458 -35.4568 -3 - vertex -23.6767 -35.9691 -3 - vertex -24.7956 -33.2498 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -21.28 -33.2523 -3 - vertex -23.8149 -31.5911 -3 - vertex -23.4462 -30.738 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.7956 -33.2498 -3 - vertex -23.6767 -35.9691 -3 - vertex -24.4194 -36.2501 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -21.28 -33.2523 -3 - vertex -24.7956 -33.2498 -3 - vertex -23.8149 -31.5911 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -27.2791 -36.8782 -3 - vertex -24.4194 -36.2501 -3 - vertex -24.9699 -36.888 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -27.2791 -36.8782 -3 - vertex -24.9699 -36.888 -3 - vertex -25.157 -37.5754 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -24.4194 -36.2501 -3 - vertex -27.2791 -36.8782 -3 - vertex -24.7956 -33.2498 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.299 -23.335 -3 - vertex -17.8179 -22.6324 -3 - vertex -17.2695 -22.7276 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.299 -23.335 -3 - vertex -18.3659 -22.5704 -3 - vertex -17.8179 -22.6324 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -18.5428 -26.6889 -3 - vertex -18.3659 -22.5704 -3 - vertex -17.299 -23.335 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -18.5428 -26.6889 -3 - vertex -18.6886 -22.3738 -3 - vertex -18.3659 -22.5704 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -22.6991 -20.0641 -3 - vertex -18.6886 -22.3738 -3 - vertex -18.5428 -26.6889 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -22.6991 -20.0641 -3 - vertex -18.7986 -22.0269 -3 - vertex -18.6886 -22.3738 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -18.7986 -22.0269 -3 - vertex -19.683 -17.584 -3 - vertex -19.3785 -17.1305 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -18.7986 -22.0269 -3 - vertex -20.1126 -17.9213 -3 - vertex -19.683 -17.584 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -18.7986 -22.0269 -3 - vertex -20.6062 -18.108 -3 - vertex -20.1126 -17.9213 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -22.6991 -20.0641 -3 - vertex -20.6062 -18.108 -3 - vertex -18.7986 -22.0269 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -22.6991 -20.0641 -3 - vertex -18.5428 -26.6889 -3 - vertex -21.28 -33.2523 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -20.6062 -18.108 -3 - vertex -22.6057 -19.3555 -3 - vertex -21.1029 -18.1093 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -21.1029 -18.1093 -3 - vertex -22.6057 -19.3555 -3 - vertex -21.3898 -18.0171 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -22.8641 -19.008 -3 - vertex -21.3898 -18.0171 -3 - vertex -22.6057 -19.3555 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -21.3898 -18.0171 -3 - vertex -22.8641 -19.008 -3 - vertex -21.538 -17.8042 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -23.4908 -18.9156 -3 - vertex -21.538 -17.8042 -3 - vertex -22.8641 -19.008 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.7956 -33.2498 -3 - vertex -21.9191 -34.6287 -3 - vertex -22.458 -35.4568 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -21.538 -17.8042 -3 - vertex -23.4908 -18.9156 -3 - vertex -21.5846 -16.4428 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -21.9191 -34.6287 -3 - vertex -24.7956 -33.2498 -3 - vertex -21.28 -33.2523 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -23.3419 -14.2877 -3 - vertex -21.5846 -16.4428 -3 - vertex -23.4908 -18.9156 -3 - endloop - endfacet - facet normal -0 -0 -1 - outer loop - vertex -22.1413 -14.5577 -3 - vertex -21.5846 -16.4428 -3 - vertex -23.3419 -14.2877 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -21.6401 -15.0493 -3 - vertex -22.1413 -14.5577 -3 - vertex -21.8106 -14.7733 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -21.5846 -16.4428 -3 - vertex -22.1413 -14.5577 -3 - vertex -21.6401 -15.0493 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.1111 -19.1062 -3 - vertex -23.3419 -14.2877 -3 - vertex -23.4908 -18.9156 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -26.1195 -14.1654 -3 - vertex -24.1111 -19.1062 -3 - vertex -24.7225 -19.9745 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -30.8809 -15.6487 -3 - vertex -24.7225 -19.9745 -3 - vertex -25.7001 -21.2849 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.1111 -19.1062 -3 - vertex -26.1195 -14.1654 -3 - vertex -23.3419 -14.2877 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -32.1593 -18.5412 -3 - vertex -25.7001 -21.2849 -3 - vertex -26.9351 -22.1109 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -32.1593 -18.5412 -3 - vertex -26.9351 -22.1109 -3 - vertex -28.6031 -22.5277 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.7225 -19.9745 -3 - vertex -30.8809 -15.6487 -3 - vertex -26.1195 -14.1654 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -26.1195 -14.1654 -3 - vertex -30.8809 -15.6487 -3 - vertex -29.5608 -14.1906 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -30.3887 -14.5514 -3 - vertex -29.5608 -14.1906 -3 - vertex -30.8809 -15.6487 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -32.1593 -18.5412 -3 - vertex -28.6031 -22.5277 -3 - vertex -30.8797 -22.6102 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -29.5608 -14.1906 -3 - vertex -30.3887 -14.5514 -3 - vertex -30.2116 -14.321 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -25.7001 -21.2849 -3 - vertex -32.1593 -18.5412 -3 - vertex -30.8809 -15.6487 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -33.3019 -21.4299 -3 - vertex -30.8797 -22.6102 -3 - vertex -32.5249 -22.5543 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -30.8797 -22.6102 -3 - vertex -33.3019 -21.4299 -3 - vertex -32.1593 -18.5412 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -33.3295 -22.4108 -3 - vertex -33.3019 -21.4299 -3 - vertex -32.5249 -22.5543 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -33.3019 -21.4299 -3 - vertex -33.3295 -22.4108 -3 - vertex -33.5147 -22.0719 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -8.78621 -19.378 -3 - vertex -17.4456 -12.0833 -3 - vertex -17.4385 -11.5861 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -19.3785 -17.1305 -3 - vertex -15.1553 -19.8912 -3 - vertex -17.9982 -20.7653 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -19.3785 -17.1305 -3 - vertex -17.9982 -20.7653 -3 - vertex -18.4336 -21.0091 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -19.3785 -17.1305 -3 - vertex -18.4336 -21.0091 -3 - vertex -18.7084 -21.5139 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -19.3785 -17.1305 -3 - vertex -18.7084 -21.5139 -3 - vertex -18.7986 -22.0269 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -15.1553 -19.8912 -3 - vertex -19.3785 -17.1305 -3 - vertex -17.4456 -12.0833 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -8.33648 -34.384 -3 - vertex -3.99709 -33.5697 -3 - vertex -7.51249 -36.3769 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -8.33648 -34.384 -3 - vertex -7.51249 -36.3769 -3 - vertex -7.98605 -36.0592 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -3.99709 -33.5697 -3 - vertex -8.33648 -34.384 -3 - vertex -6.41168 -29.738 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -8.56822 -35.3052 -3 - vertex -7.98605 -36.0592 -3 - vertex -8.51129 -35.7129 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -7.98605 -36.0592 -3 - vertex -8.56822 -35.3052 -3 - vertex -8.33648 -34.384 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -8.78621 -19.378 -3 - vertex -11.7016 -19.4898 -3 - vertex -11.9141 -19.2259 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.4456 -12.0833 -3 - vertex -8.78621 -19.378 -3 - vertex -11.9141 -19.2259 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.4456 -12.0833 -3 - vertex -11.9141 -19.2259 -3 - vertex -12.3137 -19.1333 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -5.93765 11.491 -3 - vertex -10.6367 14.238 -3 - vertex -7.23385 14.4578 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.4456 -12.0833 -3 - vertex -12.3137 -19.1333 -3 - vertex -15.1553 -19.8912 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -5.93765 11.491 -3 - vertex -13.7227 13.3517 -3 - vertex -10.6367 14.238 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -4.99153 10.6633 -3 - vertex -13.7227 13.3517 -3 - vertex -5.93765 11.491 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -3.71458 -2.66291 -3 - vertex -17.7993 -11.4712 -3 - vertex -17.5299 12.3491 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.7993 -11.4712 -3 - vertex -20.0298 12.0063 -3 - vertex -17.5299 12.3491 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.7993 -11.4712 -3 - vertex -22.4428 11.7593 -3 - vertex -20.0298 12.0063 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -27.1868 -11.3523 -3 - vertex -22.4428 11.7593 -3 - vertex -17.7993 -11.4712 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -22.4428 11.7593 -3 - vertex -27.1868 -11.3523 -3 - vertex -25.7097 11.6586 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -27.1868 -11.3523 -3 - vertex -28.6588 11.7129 -3 - vertex -25.7097 11.6586 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -34.87 -11.3196 -3 - vertex -28.6588 11.7129 -3 - vertex -27.1868 -11.3523 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -28.6588 11.7129 -3 - vertex -34.87 -11.3196 -3 - vertex -30.1182 11.9311 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -36.1936 -11.4238 -3 - vertex -30.1182 11.9311 -3 - vertex -34.87 -11.3196 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -36.792 -11.6364 -3 - vertex -30.1182 11.9311 -3 - vertex -36.1936 -11.4238 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -30.1182 11.9311 -3 - vertex -36.792 -11.6364 -3 - vertex -30.3887 12.6783 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -30.3887 12.6783 -3 - vertex -35.7552 21.6337 -3 - vertex -33.0651 20.3093 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -37.6991 23.0789 -3 - vertex -30.3887 12.6783 -3 - vertex -36.792 -11.6364 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -37.6991 23.0789 -3 - vertex -36.792 -11.6364 -3 - vertex -37.3951 -12.1929 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -39.1303 25.4589 -3 - vertex -37.3951 -12.1929 -3 - vertex -37.5366 -12.7854 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -30.3887 12.6783 -3 - vertex -37.6991 23.0789 -3 - vertex -35.7552 21.6337 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -9.69161 -22.56 -3 - vertex -8.46819 -23.4267 -3 - vertex -8.72405 -24.8218 -3 - endloop - endfacet - facet normal -0 -0 -1 - outer loop - vertex -8.78909 -22.7249 -3 - vertex -8.46819 -23.4267 -3 - vertex -9.69161 -22.56 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -12.4124 -23.7203 -3 - vertex -8.72405 -24.8218 -3 - vertex -9.55184 -27.0667 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -8.46819 -23.4267 -3 - vertex -8.78909 -22.7249 -3 - vertex -8.55624 -22.9989 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -8.72405 -24.8218 -3 - vertex -10.5461 -22.7271 -3 - vertex -9.69161 -22.56 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -8.72405 -24.8218 -3 - vertex -11.3967 -23.0769 -3 - vertex -10.5461 -22.7271 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -15.3894 -29.1914 -3 - vertex -9.55184 -27.0667 -3 - vertex -11.5932 -32.143 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.8281 -32.7116 -3 - vertex -11.5932 -32.143 -3 - vertex -12.3385 -33.8339 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -9.55184 -27.0667 -3 - vertex -14.2216 -26.3227 -3 - vertex -13.7062 -25.2068 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.8281 -32.7116 -3 - vertex -12.3385 -33.8339 -3 - vertex -13.0448 -35.0276 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -8.72405 -24.8218 -3 - vertex -12.4124 -23.7203 -3 - vertex -11.3967 -23.0769 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -13.1427 -24.3848 -3 - vertex -9.55184 -27.0667 -3 - vertex -13.7062 -25.2068 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -14.3732 -35.9691 -3 - vertex -13.0448 -35.0276 -3 - vertex -13.7203 -35.7356 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -9.55184 -27.0667 -3 - vertex -13.1427 -24.3848 -3 - vertex -12.4124 -23.7203 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -13.0448 -35.0276 -3 - vertex -14.3732 -35.9691 -3 - vertex -16.8281 -32.7116 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.8281 -32.7116 -3 - vertex -14.3732 -35.9691 -3 - vertex -14.8949 -36.1495 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -9.55184 -27.0667 -3 - vertex -15.3894 -29.1914 -3 - vertex -14.2216 -26.3227 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.5846 -36.2152 -3 - vertex -14.8949 -36.1495 -3 - vertex -15.4682 -36.5832 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.2226 -36.752 -3 - vertex -15.4682 -36.5832 -3 - vertex -15.9213 -37.1689 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.6989 -37.6188 -3 - vertex -15.9213 -37.1689 -3 - vertex -15.9433 -37.6764 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.5846 -36.2152 -3 - vertex -15.4682 -36.5832 -3 - vertex -16.2226 -36.752 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -14.8949 -36.1495 -3 - vertex -16.5846 -36.2152 -3 - vertex -16.8281 -32.7116 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -11.5932 -32.143 -3 - vertex -16.8281 -32.7116 -3 - vertex -15.3894 -29.1914 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.7285 -35.3062 -3 - vertex -16.5846 -36.2152 -3 - vertex -17.3742 -35.9691 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.7285 -35.3062 -3 - vertex -17.3742 -35.9691 -3 - vertex -17.6987 -35.8223 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -16.5846 -36.2152 -3 - vertex -17.7285 -35.3062 -3 - vertex -16.8281 -32.7116 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.4076 -24.3815 -3 - vertex -23.4462 -30.738 -3 - vertex -23.655 -30.4649 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -25.4741 -26.9141 -3 - vertex -23.655 -30.4649 -3 - vertex -24.0819 -30.2475 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -21.28 -33.2523 -3 - vertex -24.4076 -24.3815 -3 - vertex -23.1278 -21.2395 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -25.4741 -26.9141 -3 - vertex -24.0819 -30.2475 -3 - vertex -24.4667 -30.1541 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -26.2338 -28.3696 -3 - vertex -24.4667 -30.1541 -3 - vertex -24.8569 -30.2998 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -23.655 -30.4649 -3 - vertex -25.4741 -26.9141 -3 - vertex -24.4076 -24.3815 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.4667 -30.1541 -3 - vertex -26.2338 -28.3696 -3 - vertex -25.4741 -26.9141 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -26.8752 -29.0336 -3 - vertex -24.8569 -30.2998 -3 - vertex -26.8283 -32.1012 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.8569 -30.2998 -3 - vertex -26.8752 -29.0336 -3 - vertex -26.2338 -28.3696 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -26.8283 -32.1012 -3 - vertex -27.5872 -29.1914 -3 - vertex -26.8752 -29.0336 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -26.8283 -32.1012 -3 - vertex -28.1878 -29.097 -3 - vertex -27.5872 -29.1914 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -29.0969 -33.8499 -3 - vertex -28.1878 -29.097 -3 - vertex -26.8283 -32.1012 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -30.2578 -34.4631 -3 - vertex -28.1878 -29.097 -3 - vertex -29.0969 -33.8499 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -31.3644 -34.8586 -3 - vertex -28.1878 -29.097 -3 - vertex -30.2578 -34.4631 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -35.4824 -26.6225 -3 - vertex -28.1878 -29.097 -3 - vertex -31.3644 -34.8586 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -28.1878 -29.097 -3 - vertex -32.142 -25.4759 -3 - vertex -28.5713 -25.7117 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -28.1878 -29.097 -3 - vertex -35.4824 -26.6225 -3 - vertex -32.142 -25.4759 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -35.4824 -26.6225 -3 - vertex -31.3644 -34.8586 -3 - vertex -35.0529 -35.0835 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -32.142 -25.4759 -3 - vertex -35.4824 -26.6225 -3 - vertex -34.9626 -25.4747 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -38.7331 -34.5543 -3 - vertex -35.0529 -35.0835 -3 - vertex -38.4261 -34.9619 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -35.0529 -35.0835 -3 - vertex -38.7331 -34.5543 -3 - vertex -35.4824 -26.6225 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -28.5713 -25.7117 -3 - vertex -27.9105 -26.2055 -3 - vertex -28.1838 -28.4809 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -27.9105 -26.2055 -3 - vertex -28.5713 -25.7117 -3 - vertex -28.1036 -25.8829 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -28.5713 -25.7117 -3 - vertex -28.1838 -28.4809 -3 - vertex -28.1878 -29.097 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -11.1208 19.5935 -3 - vertex -11.5389 20.1801 -3 - vertex -10.9412 20.0018 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -12.0133 18.8648 -3 - vertex -11.5389 20.1801 -3 - vertex -11.1208 19.5935 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -12.0133 18.8648 -3 - vertex -12.9783 20.2187 -3 - vertex -11.5389 20.1801 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -15.009 16.7116 -3 - vertex -12.9783 20.2187 -3 - vertex -12.0133 18.8648 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -15.009 16.7116 -3 - vertex -16.3196 19.9968 -3 - vertex -12.9783 20.2187 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.0754 15.711 -3 - vertex -16.3196 19.9968 -3 - vertex -15.009 16.7116 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -20.1789 19.4139 -3 - vertex -17.0754 15.711 -3 - vertex -19.733 14.7364 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.0754 15.711 -3 - vertex -20.1789 19.4139 -3 - vertex -16.3196 19.9968 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -22.3118 14.0374 -3 - vertex -20.1789 19.4139 -3 - vertex -19.733 14.7364 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -22.3118 14.0374 -3 - vertex -24.1572 19.0472 -3 - vertex -20.1789 19.4139 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.873 13.6003 -3 - vertex -24.1572 19.0472 -3 - vertex -22.3118 14.0374 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -27.5587 18.9414 -3 - vertex -24.873 13.6003 -3 - vertex -27.4778 13.4117 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.873 13.6003 -3 - vertex -27.5587 18.9414 -3 - vertex -24.1572 19.0472 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -27.4778 13.4117 -3 - vertex -29.687 19.1409 -3 - vertex -27.5587 18.9414 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -29.9412 13.2465 -3 - vertex -29.687 19.1409 -3 - vertex -27.4778 13.4117 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -30.3118 13.0393 -3 - vertex -29.687 19.1409 -3 - vertex -29.9412 13.2465 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -33.0651 20.3093 -3 - vertex -30.3118 13.0393 -3 - vertex -30.3887 12.6783 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -30.3118 13.0393 -3 - vertex -33.0651 20.3093 -3 - vertex -29.687 19.1409 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 36.2859 -23.7121 -3 - vertex 36.104 -22.9178 -3 - vertex 36.3422 -23.0402 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 35.2001 -22.9271 -3 - vertex 36.2859 -23.7121 -3 - vertex 35.3305 -26.5156 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 36.2859 -23.7121 -3 - vertex 35.2001 -22.9271 -3 - vertex 36.104 -22.9178 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 35.3305 -26.5156 -3 - vertex 34.7441 -22.7166 -3 - vertex 35.2001 -22.9271 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.8275 -24.8188 -3 - vertex 34.7441 -22.7166 -3 - vertex 35.3305 -26.5156 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.8275 -24.8188 -3 - vertex 35.3305 -26.5156 -3 - vertex 33.8444 -30.1753 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 42.943 -20.2657 -3 - vertex 42.0238 -20.3507 -3 - vertex 42.1032 -19.4743 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 41.971 -20.8453 -3 - vertex 42.0238 -20.3507 -3 - vertex 42.943 -20.2657 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 42.0238 -20.3507 -3 - vertex 41.971 -20.8453 -3 - vertex 41.8981 -20.7296 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 117.5 -117.5 -3 - vertex 47.9875 -20.1225 -3 - vertex 117.5 117.5 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 117.5 -117.5 -3 - vertex 47.8425 -21.0531 -3 - vertex 47.9875 -20.1225 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 117.5 -117.5 -3 - vertex 47.5305 -21.9981 -3 - vertex 47.8425 -21.0531 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 117.5 -117.5 -3 - vertex 47.0957 -22.796 -3 - vertex 47.5305 -21.9981 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 117.5 -117.5 -3 - vertex 46.5684 -23.4293 -3 - vertex 47.0957 -22.796 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 37.9939 -37.5705 -3 - vertex 46.5684 -23.4293 -3 - vertex 117.5 -117.5 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 46.5684 -23.4293 -3 - vertex 37.9939 -37.5705 -3 - vertex 45.9792 -23.8802 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 38.113 -36.8464 -3 - vertex 45.9792 -23.8802 -3 - vertex 37.9939 -37.5705 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 45.9792 -23.8802 -3 - vertex 38.113 -36.8464 -3 - vertex 45.3585 -24.1311 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 37.9618 -36.3241 -3 - vertex 45.3585 -24.1311 -3 - vertex 38.113 -36.8464 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 38.2188 -29.6614 -3 - vertex 45.3585 -24.1311 -3 - vertex 37.9618 -36.3241 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 45.3585 -24.1311 -3 - vertex 38.2188 -29.6614 -3 - vertex 44.7368 -24.1643 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 40.5923 -24.6171 -3 - vertex 44.1445 -23.9621 -3 - vertex 40.0289 -25.46 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 41.2986 -23.9223 -3 - vertex 44.1445 -23.9621 -3 - vertex 40.5923 -24.6171 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 44.1445 -23.9621 -3 - vertex 41.2986 -23.9223 -3 - vertex 43.6122 -23.5069 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 43.6122 -23.5069 -3 - vertex 41.2986 -23.9223 -3 - vertex 42.7682 -22.851 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 44.7368 -24.1643 -3 - vertex 40.0289 -25.46 -3 - vertex 44.1445 -23.9621 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 117.5 -117.5 -3 - vertex 37.381 -37.9628 -3 - vertex 37.9939 -37.5705 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 117.5 -117.5 -3 - vertex 35.8907 -38.1241 -3 - vertex 37.381 -37.9628 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 117.5 -117.5 -3 - vertex 33.1396 -38.1555 -3 - vertex 35.8907 -38.1241 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 117.5 -117.5 -3 - vertex 29.8074 -38.0948 -3 - vertex 33.1396 -38.1555 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 20.3084 -38.5182 -3 - vertex 29.8074 -38.0948 -3 - vertex 117.5 -117.5 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 28.553 -36.8405 -3 - vertex 25.9895 -35.834 -3 - vertex 27.8442 -34.1555 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 24.0601 -37.0678 -3 - vertex 28.4102 -37.3704 -3 - vertex 28.6431 -37.8931 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 21.4079 -38.2833 -3 - vertex 29.8074 -38.0948 -3 - vertex 20.3084 -38.5182 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 28.4102 -37.3704 -3 - vertex 24.0601 -37.0678 -3 - vertex 25.9895 -35.834 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 28.6431 -37.8931 -3 - vertex 21.4079 -38.2833 -3 - vertex 24.0601 -37.0678 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 29.8074 -38.0948 -3 - vertex 21.4079 -38.2833 -3 - vertex 28.6431 -37.8931 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 117.5 -117.5 -3 - vertex 19.0956 -38.5852 -3 - vertex 20.3084 -38.5182 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 5.33583 -38.4712 -3 - vertex 19.0956 -38.5852 -3 - vertex 117.5 -117.5 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 19.0956 -38.5852 -3 - vertex 5.33583 -38.4712 -3 - vertex 17.8945 -38.4707 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 17.8945 -38.4707 -3 - vertex 5.33583 -38.4712 -3 - vertex 16.8412 -38.0675 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 12.1385 -34.7994 -3 - vertex 14.6656 -34.4466 -3 - vertex 12.2351 -35.1874 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 14.8379 -35.6738 -3 - vertex 12.2351 -35.1874 -3 - vertex 14.6656 -34.4466 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 12.1379 -35.6584 -3 - vertex 14.8379 -35.6738 -3 - vertex 15.2376 -36.6526 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.1962 -36.5595 -3 - vertex 15.2376 -36.6526 -3 - vertex 15.8953 -37.4336 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 8.47177 -37.477 -3 - vertex 16.8412 -38.0675 -3 - vertex 5.33583 -38.4712 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 14.8379 -35.6738 -3 - vertex 12.1379 -35.6584 -3 - vertex 12.2351 -35.1874 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.2376 -36.6526 -3 - vertex 11.7916 -36.1064 -3 - vertex 12.1379 -35.6584 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.2376 -36.6526 -3 - vertex 11.1962 -36.5595 -3 - vertex 11.7916 -36.1064 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.8953 -37.4336 -3 - vertex 10.519 -36.9119 -3 - vertex 11.1962 -36.5595 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 10.519 -36.9119 -3 - vertex 16.8412 -38.0675 -3 - vertex 9.92719 -37.0575 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 16.8412 -38.0675 -3 - vertex 10.519 -36.9119 -3 - vertex 15.8953 -37.4336 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 9.92719 -37.0575 -3 - vertex 16.8412 -38.0675 -3 - vertex 8.47177 -37.477 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.962702 -38.4962 -3 - vertex 5.33583 -38.4712 -3 - vertex 117.5 -117.5 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 4.73542 -37.8041 -3 - vertex 3.43985 -37.8545 -3 - vertex 4.64415 -37.2809 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.84381 -38.3343 -3 - vertex 3.43985 -37.8545 -3 - vertex 4.73542 -37.8041 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 2.31266 -38.26 -3 - vertex 5.33583 -38.4712 -3 - vertex 0.962702 -38.4962 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.84381 -38.3343 -3 - vertex 2.31266 -38.26 -3 - vertex 3.43985 -37.8545 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 5.33583 -38.4712 -3 - vertex 2.31266 -38.26 -3 - vertex 4.84381 -38.3343 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 117.5 -117.5 -3 - vertex -0.366978 -38.538 -3 - vertex 0.962702 -38.4962 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -117.5 -117.5 -3 - vertex -0.366978 -38.538 -3 - vertex 117.5 -117.5 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -12.0013 -38.1555 -3 - vertex -0.366978 -38.538 -3 - vertex -117.5 -117.5 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -3.14673 -30.0798 -3 - vertex -6.41168 -29.738 -3 - vertex -4.26405 -24.3543 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -7.51249 -36.3769 -3 - vertex -3.80393 -35.193 -3 - vertex -7.31439 -36.7536 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -7.31439 -36.7536 -3 - vertex -3.80393 -35.193 -3 - vertex -3.26834 -36.6145 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -3.80393 -35.193 -3 - vertex -7.51249 -36.3769 -3 - vertex -3.99709 -33.5697 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -7.3919 -37.1883 -3 - vertex -3.26834 -36.6145 -3 - vertex -2.45619 -37.7112 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -8.07933 -37.9462 -3 - vertex -1.43333 -38.36 -3 - vertex -8.66873 -38.0883 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -3.26834 -36.6145 -3 - vertex -7.3919 -37.1883 -3 - vertex -7.31439 -36.7536 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -2.45619 -37.7112 -3 - vertex -7.74517 -37.6801 -3 - vertex -7.3919 -37.1883 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -2.45619 -37.7112 -3 - vertex -8.07933 -37.9462 -3 - vertex -7.74517 -37.6801 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -1.43333 -38.36 -3 - vertex -8.07933 -37.9462 -3 - vertex -2.45619 -37.7112 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -8.66873 -38.0883 -3 - vertex -0.366978 -38.538 -3 - vertex -12.0013 -38.1555 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.366978 -38.538 -3 - vertex -8.66873 -38.0883 -3 - vertex -1.43333 -38.36 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -12.0013 -38.1555 -3 - vertex -117.5 -117.5 -3 - vertex -15.3277 -38.0928 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -15.9213 -37.1689 -3 - vertex -16.6989 -37.6188 -3 - vertex -16.2226 -36.752 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -15.7983 -37.9502 -3 - vertex -16.6989 -37.6188 -3 - vertex -15.9433 -37.6764 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -17.5781 -38.0841 -3 - vertex -15.3277 -38.0928 -3 - vertex -117.5 -117.5 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -15.7983 -37.9502 -3 - vertex -17.033 -37.9274 -3 - vertex -16.6989 -37.6188 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -15.7983 -37.9502 -3 - vertex -17.5781 -38.0841 -3 - vertex -17.033 -37.9274 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -15.3277 -38.0928 -3 - vertex -17.5781 -38.0841 -3 - vertex -15.7983 -37.9502 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -17.5781 -38.0841 -3 - vertex -117.5 -117.5 -3 - vertex -20.8226 -38.1301 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -25.0608 -37.8416 -3 - vertex -27.2791 -36.8782 -3 - vertex -25.157 -37.5754 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -28.2835 -38.1638 -3 - vertex -25.0608 -37.8416 -3 - vertex -24.8096 -38.0047 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -28.2835 -38.1638 -3 - vertex -20.8226 -38.1301 -3 - vertex -117.5 -117.5 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -25.0608 -37.8416 -3 - vertex -28.2835 -38.1638 -3 - vertex -27.2791 -36.8782 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -20.8226 -38.1301 -3 - vertex -28.2835 -38.1638 -3 - vertex -24.8096 -38.0047 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -28.2835 -38.1638 -3 - vertex -117.5 -117.5 -3 - vertex -37.632 -38.1325 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -47.8161 -37.7712 -3 - vertex -117.5 -117.5 -3 - vertex -47.9875 -37.5097 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -47.4646 -37.9547 -3 - vertex -117.5 -117.5 -3 - vertex -47.8161 -37.7712 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -37.632 -38.1325 -3 - vertex -117.5 -117.5 -3 - vertex -47.4646 -37.9547 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 47.7267 -19.5813 -3 - vertex 117.5 117.5 -3 - vertex 47.9875 -20.1225 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 27.5422 14.7505 -3 - vertex 47.7267 -19.5813 -3 - vertex 47.2139 -19.2263 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 27.528 9.70386 -3 - vertex 47.2139 -19.2263 -3 - vertex 46.2623 -19.1343 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 41.5319 -19.1343 -3 - vertex 46.2623 -19.1343 -3 - vertex 44.5909 -19.3768 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 42.1032 -19.4743 -3 - vertex 44.5909 -19.3768 -3 - vertex 42.943 -20.2657 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 44.5909 -19.3768 -3 - vertex 42.1032 -19.4743 -3 - vertex 41.8934 -19.2238 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 41.5319 -19.1343 -3 - vertex 44.5909 -19.3768 -3 - vertex 41.8934 -19.2238 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 27.528 9.70386 -3 - vertex 46.2623 -19.1343 -3 - vertex 41.5319 -19.1343 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 29.9429 -19.4981 -3 - vertex 41.5319 -19.1343 -3 - vertex 38.4798 -20.1181 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 30.7248 -19.9631 -3 - vertex 38.4798 -20.1181 -3 - vertex 35.5661 -21.102 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 30.7248 -19.9631 -3 - vertex 35.5661 -21.102 -3 - vertex 35.2187 -21.2043 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.3699 -20.64 -3 - vertex 35.2187 -21.2043 -3 - vertex 34.9156 -21.474 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 30.2029 -31.1764 -3 - vertex 33.8444 -30.1753 -3 - vertex 32.5255 -33.371 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 34.7441 -22.7166 -3 - vertex 32.0255 -23.3848 -3 - vertex 34.62 -22.2927 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 32.0232 -22.2828 -3 - vertex 34.62 -22.2927 -3 - vertex 32.0255 -23.3848 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.8086 -21.404 -3 - vertex 34.62 -22.2927 -3 - vertex 32.0232 -22.2828 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 34.62 -22.2927 -3 - vertex 31.8086 -21.404 -3 - vertex 34.9156 -21.474 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 31.3699 -20.64 -3 - vertex 34.9156 -21.474 -3 - vertex 31.8086 -21.404 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 35.2187 -21.2043 -3 - vertex 31.3699 -20.64 -3 - vertex 30.7248 -19.9631 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 38.4798 -20.1181 -3 - vertex 30.7248 -19.9631 -3 - vertex 29.9429 -19.4981 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 27.528 9.70386 -3 - vertex 41.5319 -19.1343 -3 - vertex 29.9429 -19.4981 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 27.528 9.70386 -3 - vertex 29.9429 -19.4981 -3 - vertex 28.989 -19.2301 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 26.7235 1.18648 -3 - vertex 28.989 -19.2301 -3 - vertex 27.8281 -19.1444 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 47.2139 -19.2263 -3 - vertex 27.6094 12.2412 -3 - vertex 27.5422 14.7505 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 47.7267 -19.5813 -3 - vertex 27.5422 14.7505 -3 - vertex 117.5 117.5 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 26.4742 18.624 -3 - vertex 27.5422 14.7505 -3 - vertex 27.1755 15.8473 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 26.4742 18.624 -3 - vertex 27.1755 15.8473 -3 - vertex 26.6933 17.4601 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 27.5422 14.7505 -3 - vertex 26.4742 18.624 -3 - vertex 117.5 117.5 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 25.9424 19.4837 -3 - vertex 117.5 117.5 -3 - vertex 26.4742 18.624 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 21.8319 23.6658 -3 - vertex 25.9424 19.4837 -3 - vertex 25.0752 20.0627 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.0827 22.427 -3 - vertex 25.0752 20.0627 -3 - vertex 23.8499 20.3844 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.2698 21.5943 -3 - vertex 23.8499 20.3844 -3 - vertex 23.1387 20.59 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 22.2698 21.5943 -3 - vertex 23.1387 20.59 -3 - vertex 22.6169 20.9877 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 23.8499 20.3844 -3 - vertex 22.2698 21.5943 -3 - vertex 22.0827 22.427 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 25.0752 20.0627 -3 - vertex 22.0827 22.427 -3 - vertex 21.8319 23.6658 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 25.9424 19.4837 -3 - vertex 21.8319 23.6658 -3 - vertex 21.2755 24.568 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 25.9424 19.4837 -3 - vertex 21.2755 24.568 -3 - vertex 117.5 117.5 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.3134 30.0845 -3 - vertex 21.2755 24.568 -3 - vertex 20.1819 25.3734 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.4783 29.8698 -3 - vertex 20.1819 25.3734 -3 - vertex 18.3193 26.3216 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.4783 29.8698 -3 - vertex 18.3193 26.3216 -3 - vertex 17.0772 26.9817 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.6084 29.1601 -3 - vertex 17.0772 26.9817 -3 - vertex 16.2688 27.6146 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.6084 29.1601 -3 - vertex 16.2688 27.6146 -3 - vertex 15.808 28.3106 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 17.0772 26.9817 -3 - vertex 15.6084 29.1601 -3 - vertex 15.4783 29.8698 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.3134 30.0845 -3 - vertex 20.1819 25.3734 -3 - vertex 15.4783 29.8698 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 21.2755 24.568 -3 - vertex 15.3134 30.0845 -3 - vertex 117.5 117.5 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 12.0123 26.7794 -3 - vertex 15.122 28.0941 -3 - vertex 12.5486 25.9653 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 11.8052 27.5343 -3 - vertex 15.122 28.0941 -3 - vertex 12.0123 26.7794 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.0577 29.0611 -3 - vertex 12.2907 30.5214 -3 - vertex 15.1584 29.8123 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.1584 29.8123 -3 - vertex 12.2907 30.5214 -3 - vertex 15.3134 30.0845 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 12.0544 30.7144 -3 - vertex 15.3134 30.0845 -3 - vertex 12.2907 30.5214 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.3134 30.0845 -3 - vertex 12.0544 30.7144 -3 - vertex 5.25321 38.4452 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 5.19939 38.083 -3 - vertex 12.0544 30.7144 -3 - vertex 11.5971 30.3591 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 8.51885 25.3107 -3 - vertex 11.5037 26.4501 -3 - vertex 9.07032 24.476 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 11.5037 26.4501 -3 - vertex 8.51885 25.3107 -3 - vertex 11.1066 27.3577 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 7.91411 25.7528 -3 - vertex 11.1066 27.3577 -3 - vertex 8.51885 25.3107 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 11.1066 27.3577 -3 - vertex 7.91411 25.7528 -3 - vertex 11.0411 28.3898 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 7.11433 25.9588 -3 - vertex 11.0411 28.3898 -3 - vertex 7.91411 25.7528 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 5.72413 26.6445 -3 - vertex 11.0411 28.3898 -3 - vertex 7.11433 25.9588 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 11.0411 28.3898 -3 - vertex 5.72413 26.6445 -3 - vertex 11.2319 29.4873 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 5.72413 26.6445 -3 - vertex 7.11433 25.9588 -3 - vertex 6.4022 26.1795 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 4.3138 28.4461 -3 - vertex 11.2319 29.4873 -3 - vertex 5.72413 26.6445 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.57109 31.3388 -3 - vertex 11.2319 29.4873 -3 - vertex 4.3138 28.4461 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.3134 30.0845 -3 - vertex 5.25321 38.4452 -3 - vertex 5.15152 38.5852 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 15.3134 30.0845 -3 - vertex 5.15152 38.5852 -3 - vertex 117.5 117.5 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.115935 27.2162 -3 - vertex 1.04836 28.6106 -3 - vertex 0.858783 27.1101 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -0.786632 27.5359 -3 - vertex 1.04836 28.6106 -3 - vertex -0.115935 27.2162 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -1.46161 28.0795 -3 - vertex 1.04836 28.6106 -3 - vertex -0.786632 27.5359 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 1.04836 28.6106 -3 - vertex -1.46161 28.0795 -3 - vertex 1.1273 29.8907 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -2.77953 29.7664 -3 - vertex 1.1273 29.8907 -3 - vertex -1.46161 28.0795 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 1.1273 29.8907 -3 - vertex -2.77953 29.7664 -3 - vertex 1.37489 31.173 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -3.97987 32.1322 -3 - vertex 1.37489 31.173 -3 - vertex -2.77953 29.7664 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 1.37489 31.173 -3 - vertex -3.97987 32.1322 -3 - vertex 2.44067 33.9939 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -4.97284 35.0324 -3 - vertex 2.44067 33.9939 -3 - vertex -3.97987 32.1322 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -5.55994 36.5001 -3 - vertex 2.44067 33.9939 -3 - vertex -4.97284 35.0324 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 2.44067 33.9939 -3 - vertex -5.55994 36.5001 -3 - vertex 4.08079 37.0842 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 4.08079 37.0842 -3 - vertex -5.55994 36.5001 -3 - vertex 5.15152 38.5852 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -5.8163 36.5812 -3 - vertex 5.15152 38.5852 -3 - vertex -5.55994 36.5001 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -117.5 117.5 -3 - vertex 5.15152 38.5852 -3 - vertex -5.8163 36.5812 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -7.25507 27.2437 -3 - vertex -6.28322 28.2565 -3 - vertex -6.38329 27.6173 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -6.28322 28.2565 -3 - vertex -8.80952 27.3973 -3 - vertex -6.22131 31.7226 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -7.25507 27.2437 -3 - vertex -6.38329 27.6173 -3 - vertex -6.55612 27.3597 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -6.28322 28.2565 -3 - vertex -7.25507 27.2437 -3 - vertex -8.80952 27.3973 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -11.546 27.7352 -3 - vertex -6.22131 31.7226 -3 - vertex -8.80952 27.3973 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -6.22131 31.7226 -3 - vertex -11.546 27.7352 -3 - vertex -6.055 36.2349 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -13.5562 27.8374 -3 - vertex -6.055 36.2349 -3 - vertex -11.546 27.7352 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -15.2376 27.7001 -3 - vertex -6.055 36.2349 -3 - vertex -13.5562 27.8374 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -20.8096 27.6578 -3 - vertex -6.055 36.2349 -3 - vertex -15.2376 27.7001 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -20.8096 27.6578 -3 - vertex -15.2376 27.7001 -3 - vertex -16.9875 27.3196 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -19.9485 27.2141 -3 - vertex -16.9875 27.3196 -3 - vertex -19.335 26.703 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -20.8096 27.6578 -3 - vertex -16.9875 27.3196 -3 - vertex -19.9485 27.2141 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -22.4093 27.9007 -3 - vertex -6.055 36.2349 -3 - vertex -20.8096 27.6578 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -6.055 36.2349 -3 - vertex -22.4093 27.9007 -3 - vertex -5.8163 36.5812 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.3632 27.9554 -3 - vertex -5.8163 36.5812 -3 - vertex -22.4093 27.9007 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -30.666 27.4912 -3 - vertex -5.8163 36.5812 -3 - vertex -24.3632 27.9554 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -24.3225 27.6757 -3 - vertex -27.4214 26.3653 -3 - vertex -24.3632 27.9554 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -29.2879 26.9865 -3 - vertex -24.3632 27.9554 -3 - vertex -27.4214 26.3653 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -24.3632 27.9554 -3 - vertex -29.2879 26.9865 -3 - vertex -30.666 27.4912 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -31.2177 27.4629 -3 - vertex -5.8163 36.5812 -3 - vertex -30.666 27.4912 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -5.8163 36.5812 -3 - vertex -31.2177 27.4629 -3 - vertex -117.5 117.5 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -31.2773 24.779 -3 - vertex -34.2108 23.023 -3 - vertex -31.2912 27.2229 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -36.1697 23.9798 -3 - vertex -31.2912 27.2229 -3 - vertex -34.2108 23.023 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -37.7877 25.1404 -3 - vertex -31.2912 27.2229 -3 - vertex -36.1697 23.9798 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -31.2912 27.2229 -3 - vertex -37.7877 25.1404 -3 - vertex -31.2177 27.4629 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -38.5782 25.7376 -3 - vertex -31.2177 27.4629 -3 - vertex -37.7877 25.1404 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -39.0347 25.8392 -3 - vertex -31.2177 27.4629 -3 - vertex -38.5782 25.7376 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -31.2177 27.4629 -3 - vertex -39.0347 25.8392 -3 - vertex -117.5 117.5 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -47.2102 -36.2359 -3 - vertex -39.9072 -25.4747 -3 - vertex -42.237 -30.9405 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -47.2102 -36.2359 -3 - vertex -42.237 -30.9405 -3 - vertex -43.2543 -33.2915 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -46.1801 -35.8499 -3 - vertex -43.2543 -33.2915 -3 - vertex -44.1198 -34.7306 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -46.1801 -35.8499 -3 - vertex -44.1198 -34.7306 -3 - vertex -45.0296 -35.5019 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -43.2543 -33.2915 -3 - vertex -46.1801 -35.8499 -3 - vertex -47.2102 -36.2359 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -37.5366 -12.7854 -3 - vertex -47.2102 -36.2359 -3 - vertex -47.8577 -36.863 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -37.5366 -12.7854 -3 - vertex -47.8577 -36.863 -3 - vertex -39.1303 25.4589 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -117.5 -117.5 -3 - vertex -47.8577 -36.863 -3 - vertex -47.9875 -37.5097 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -47.8577 -36.863 -3 - vertex -117.5 -117.5 -3 - vertex -117.5 117.5 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -47.8577 -36.863 -3 - vertex -117.5 117.5 -3 - vertex -39.1303 25.4589 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 5.15152 38.5852 -3 - vertex -117.5 117.5 -3 - vertex 117.5 117.5 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -39.1303 25.4589 -3 - vertex -117.5 117.5 -3 - vertex -39.0347 25.8392 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 40.0289 -25.46 -3 - vertex 44.7368 -24.1643 -3 - vertex 38.2188 -29.6614 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 36.8272 -33.2656 -3 - vertex 37.9618 -36.3241 -3 - vertex 37.1913 -36.0604 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 37.9618 -36.3241 -3 - vertex 36.8272 -33.2656 -3 - vertex 38.2188 -29.6614 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 36.2918 -35.0946 -3 - vertex 37.1913 -36.0604 -3 - vertex 36.3972 -35.7834 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 37.1913 -36.0604 -3 - vertex 36.2918 -35.0946 -3 - vertex 36.8272 -33.2656 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 9.72145 16.1788 -3 - vertex 9.76373 17.1908 -3 - vertex 10.4258 16.5104 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 8.86535 15.8492 -3 - vertex 9.76373 17.1908 -3 - vertex 9.72145 16.1788 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 8.028 17.0592 -3 - vertex 9.76373 17.1908 -3 - vertex 8.86535 15.8492 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex 9.76373 17.1908 -3 - vertex 8.028 17.0592 -3 - vertex 8.30319 18.4459 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 7.15178 18.7442 -3 - vertex 8.30319 18.4459 -3 - vertex 8.028 17.0592 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 8.30319 18.4459 -3 - vertex 7.15178 18.7442 -3 - vertex 7.1994 19.1268 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -10.5829 24.4 -3 - vertex -11.2742 24.7069 -3 - vertex -10.6709 24.5009 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -14.1729 23.8467 -3 - vertex -11.2742 24.7069 -3 - vertex -10.5829 24.4 -3 - endloop - endfacet - facet normal -0 0 -1 - outer loop - vertex -11.2742 24.7069 -3 - vertex -14.1729 23.8467 -3 - vertex -13.9393 24.99 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -14.1729 23.8467 -3 - vertex -16.6107 24.7853 -3 - vertex -13.9393 24.99 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -19.3275 23.0662 -3 - vertex -16.6107 24.7853 -3 - vertex -14.1729 23.8467 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -19.3275 23.0662 -3 - vertex -20.4324 24.2101 -3 - vertex -16.6107 24.7853 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -21.5591 22.7309 -3 - vertex -20.4324 24.2101 -3 - vertex -19.3275 23.0662 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -22.0432 22.8497 -3 - vertex -20.4324 24.2101 -3 - vertex -21.5591 22.7309 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -22.6641 23.2546 -3 - vertex -20.4324 24.2101 -3 - vertex -22.0432 22.8497 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -20.4324 24.2101 -3 - vertex -22.6641 23.2546 -3 - vertex -23.3809 23.8604 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 24.4233 -24.8188 -3 - vertex 27.3613 -24.0204 -3 - vertex 27.2283 -24.8188 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 26.0804 -21.8157 -3 - vertex 27.3613 -24.0204 -3 - vertex 24.4233 -24.8188 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 27.3668 -22.8574 -3 - vertex 26.0804 -21.8157 -3 - vertex 26.9354 -22.1189 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 27.3613 -24.0204 -3 - vertex 26.0804 -21.8157 -3 - vertex 27.3668 -22.8574 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 26.0804 -21.8157 -3 - vertex 24.4233 -24.8188 -3 - vertex 24.8153 -21.9586 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 24.4233 -24.8188 -3 - vertex 23.7526 -22.3987 -3 - vertex 24.8153 -21.9586 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 24.4233 -24.8188 -3 - vertex 22.6861 -23.3258 -3 - vertex 23.7526 -22.3987 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 22.6861 -23.3258 -3 - vertex 24.4233 -24.8188 -3 - vertex 21.6183 -24.6221 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 7.70773 -21.5983 -3 - vertex 10.169 -23.3758 -3 - vertex 10.0775 -24.2416 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 6.85097 -21.9079 -3 - vertex 10.0775 -24.2416 -3 - vertex 9.7411 -25.4359 -3 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex 8.49325 -21.5121 -3 - vertex 10.169 -23.3758 -3 - vertex 7.70773 -21.5983 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 10.169 -23.3758 -3 - vertex 8.49325 -21.5121 -3 - vertex 10.0454 -22.5812 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 10.0454 -22.5812 -3 - vertex 9.16984 -21.6481 -3 - vertex 9.69979 -22.0048 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.84714 -24.6213 -3 - vertex 9.7411 -25.4359 -3 - vertex 7.96204 -29.9101 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 10.0775 -24.2416 -3 - vertex 6.85097 -21.9079 -3 - vertex 7.70773 -21.5983 -3 - endloop - endfacet - facet normal -0 -0 -1 - outer loop - vertex 9.16984 -21.6481 -3 - vertex 10.0454 -22.5812 -3 - vertex 8.49325 -21.5121 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 1.3456 -29.5107 -3 - vertex 7.96204 -29.9101 -3 - vertex 6.30534 -33.4759 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 9.7411 -25.4359 -3 - vertex 5.96068 -22.4422 -3 - vertex 6.85097 -21.9079 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.901133 -32.5034 -3 - vertex 6.30534 -33.4759 -3 - vertex 5.71313 -34.2297 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 9.7411 -25.4359 -3 - vertex 5.07455 -23.2024 -3 - vertex 5.96068 -22.4422 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.901133 -32.5034 -3 - vertex 5.71313 -34.2297 -3 - vertex 5.04571 -34.678 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.901133 -32.5034 -3 - vertex 5.04571 -34.678 -3 - vertex 4.11511 -35.011 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 9.7411 -25.4359 -3 - vertex 3.84714 -24.6213 -3 - vertex 5.07455 -23.2024 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 0.901133 -32.5034 -3 - vertex 4.11511 -35.011 -3 - vertex 3.17687 -35.0966 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 7.96204 -29.9101 -3 - vertex 2.80055 -26.1986 -3 - vertex 3.84714 -24.6213 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 1.11766 -33.6813 -3 - vertex 3.17687 -35.0966 -3 - vertex 2.32628 -34.9386 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 7.96204 -29.9101 -3 - vertex 1.95873 -27.8549 -3 - vertex 2.80055 -26.1986 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 1.11766 -33.6813 -3 - vertex 2.32628 -34.9386 -3 - vertex 1.65861 -34.5411 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 7.96204 -29.9101 -3 - vertex 1.3456 -29.5107 -3 - vertex 1.95873 -27.8549 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 3.17687 -35.0966 -3 - vertex 1.11766 -33.6813 -3 - vertex 0.901133 -32.5034 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 6.30534 -33.4759 -3 - vertex 0.985088 -31.0867 -3 - vertex 1.3456 -29.5107 -3 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 6.30534 -33.4759 -3 - vertex 0.901133 -32.5034 -3 - vertex 0.985088 -31.0867 -3 - endloop - endfacet - facet normal -0.929682 -0.368364 0 - outer loop - vertex 19.6777 -11.13 -3 - vertex 19.5452 -10.7956 0 - vertex 19.5452 -10.7956 -3 - endloop - endfacet - facet normal -0.929682 -0.368364 0 - outer loop - vertex 19.5452 -10.7956 0 - vertex 19.6777 -11.13 -3 - vertex 19.6777 -11.13 0 - endloop - endfacet - facet normal -0.933646 0.358197 0 - outer loop - vertex 17.1521 -17.7131 -3 - vertex 19.6777 -11.13 0 - vertex 19.6777 -11.13 -3 - endloop - endfacet - facet normal -0.933646 0.358197 0 - outer loop - vertex 19.6777 -11.13 0 - vertex 17.1521 -17.7131 -3 - vertex 17.1521 -17.7131 0 - endloop - endfacet - facet normal -0.922106 0.386938 0 - outer loop - vertex 14.5835 -23.8342 -3 - vertex 17.1521 -17.7131 0 - vertex 17.1521 -17.7131 -3 - endloop - endfacet - facet normal -0.922106 0.386938 0 - outer loop - vertex 17.1521 -17.7131 0 - vertex 14.5835 -23.8342 -3 - vertex 14.5835 -23.8342 0 - endloop - endfacet - facet normal -0.926605 0.376035 0 - outer loop - vertex 11.4887 -31.4602 -3 - vertex 14.5835 -23.8342 0 - vertex 14.5835 -23.8342 -3 - endloop - endfacet - facet normal -0.926605 0.376035 0 - outer loop - vertex 14.5835 -23.8342 0 - vertex 11.4887 -31.4602 -3 - vertex 11.4887 -31.4602 0 - endloop - endfacet - facet normal -0.942271 0.334852 0 - outer loop - vertex 10.915 -33.0747 -3 - vertex 11.4887 -31.4602 0 - vertex 11.4887 -31.4602 -3 - endloop - endfacet - facet normal -0.942271 0.334852 0 - outer loop - vertex 11.4887 -31.4602 0 - vertex 10.915 -33.0747 -3 - vertex 10.915 -33.0747 0 - endloop - endfacet - facet normal -0.976917 0.213621 0 - outer loop - vertex 10.7197 -33.9677 -3 - vertex 10.915 -33.0747 0 - vertex 10.915 -33.0747 -3 - endloop - endfacet - facet normal -0.976917 0.213621 0 - outer loop - vertex 10.915 -33.0747 0 - vertex 10.7197 -33.9677 -3 - vertex 10.7197 -33.9677 0 - endloop - endfacet - facet normal -0.904266 -0.42697 0 - outer loop - vertex 10.9006 -34.3507 -3 - vertex 10.7197 -33.9677 0 - vertex 10.7197 -33.9677 -3 - endloop - endfacet - facet normal -0.904266 -0.42697 0 - outer loop - vertex 10.7197 -33.9677 0 - vertex 10.9006 -34.3507 -3 - vertex 10.9006 -34.3507 0 - endloop - endfacet - facet normal -0.15089 -0.988551 0 - outer loop - vertex 10.9006 -34.3507 -3 - vertex 11.4551 -34.4353 0 - vertex 10.9006 -34.3507 0 - endloop - endfacet - facet normal -0.15089 -0.988551 -0 - outer loop - vertex 11.4551 -34.4353 0 - vertex 10.9006 -34.3507 -3 - vertex 11.4551 -34.4353 -3 - endloop - endfacet - facet normal -0.233297 -0.972406 0 - outer loop - vertex 11.4551 -34.4353 -3 - vertex 11.871 -34.5351 0 - vertex 11.4551 -34.4353 0 - endloop - endfacet - facet normal -0.233297 -0.972406 -0 - outer loop - vertex 11.871 -34.5351 0 - vertex 11.4551 -34.4353 -3 - vertex 11.871 -34.5351 -3 - endloop - endfacet - facet normal -0.702731 -0.711456 0 - outer loop - vertex 11.871 -34.5351 -3 - vertex 12.1385 -34.7994 0 - vertex 11.871 -34.5351 0 - endloop - endfacet - facet normal -0.702731 -0.711456 -0 - outer loop - vertex 12.1385 -34.7994 0 - vertex 11.871 -34.5351 -3 - vertex 12.1385 -34.7994 -3 - endloop - endfacet - facet normal -0.970405 -0.241485 0 - outer loop - vertex 12.2351 -35.1874 -3 - vertex 12.1385 -34.7994 0 - vertex 12.1385 -34.7994 -3 - endloop - endfacet - facet normal -0.970405 -0.241485 0 - outer loop - vertex 12.1385 -34.7994 0 - vertex 12.2351 -35.1874 -3 - vertex 12.2351 -35.1874 0 - endloop - endfacet - facet normal -0.979345 0.202199 0 - outer loop - vertex 12.1379 -35.6584 -3 - vertex 12.2351 -35.1874 0 - vertex 12.2351 -35.1874 -3 - endloop - endfacet - facet normal -0.979345 0.202199 0 - outer loop - vertex 12.2351 -35.1874 0 - vertex 12.1379 -35.6584 -3 - vertex 12.1379 -35.6584 0 - endloop - endfacet - facet normal -0.791253 0.611489 0 - outer loop - vertex 11.7916 -36.1064 -3 - vertex 12.1379 -35.6584 0 - vertex 12.1379 -35.6584 -3 - endloop - endfacet - facet normal -0.791253 0.611489 0 - outer loop - vertex 12.1379 -35.6584 0 - vertex 11.7916 -36.1064 -3 - vertex 11.7916 -36.1064 0 - endloop - endfacet - facet normal -0.605591 0.795776 0 - outer loop - vertex 11.7916 -36.1064 -3 - vertex 11.1962 -36.5595 0 - vertex 11.7916 -36.1064 0 - endloop - endfacet - facet normal -0.605591 0.795776 0 - outer loop - vertex 11.1962 -36.5595 0 - vertex 11.7916 -36.1064 -3 - vertex 11.1962 -36.5595 -3 - endloop - endfacet - facet normal -0.461492 0.887144 0 - outer loop - vertex 11.1962 -36.5595 -3 - vertex 10.519 -36.9119 0 - vertex 11.1962 -36.5595 0 - endloop - endfacet - facet normal -0.461492 0.887144 0 - outer loop - vertex 10.519 -36.9119 0 - vertex 11.1962 -36.5595 -3 - vertex 10.519 -36.9119 -3 - endloop - endfacet - facet normal -0.238946 0.971033 0 - outer loop - vertex 10.519 -36.9119 -3 - vertex 9.92719 -37.0575 0 - vertex 10.519 -36.9119 0 - endloop - endfacet - facet normal -0.238946 0.971033 0 - outer loop - vertex 9.92719 -37.0575 0 - vertex 10.519 -36.9119 -3 - vertex 9.92719 -37.0575 -3 - endloop - endfacet - facet normal -0.276943 0.960886 0 - outer loop - vertex 9.92719 -37.0575 -3 - vertex 8.47177 -37.477 0 - vertex 9.92719 -37.0575 0 - endloop - endfacet - facet normal -0.276943 0.960886 0 - outer loop - vertex 8.47177 -37.477 0 - vertex 9.92719 -37.0575 -3 - vertex 8.47177 -37.477 -3 - endloop - endfacet - facet normal -0.302213 0.95324 0 - outer loop - vertex 8.47177 -37.477 -3 - vertex 5.33583 -38.4712 0 - vertex 8.47177 -37.477 0 - endloop - endfacet - facet normal -0.302213 0.95324 0 - outer loop - vertex 5.33583 -38.4712 0 - vertex 8.47177 -37.477 -3 - vertex 5.33583 -38.4712 -3 - endloop - endfacet - facet normal 0.267926 0.96344 -0 - outer loop - vertex 5.33583 -38.4712 -3 - vertex 4.84381 -38.3343 0 - vertex 5.33583 -38.4712 0 - endloop - endfacet - facet normal 0.267926 0.96344 0 - outer loop - vertex 4.84381 -38.3343 0 - vertex 5.33583 -38.4712 -3 - vertex 4.84381 -38.3343 -3 - endloop - endfacet - facet normal 0.979739 0.200279 0 - outer loop - vertex 4.84381 -38.3343 0 - vertex 4.73542 -37.8041 -3 - vertex 4.73542 -37.8041 0 - endloop - endfacet - facet normal 0.979739 0.200279 0 - outer loop - vertex 4.73542 -37.8041 -3 - vertex 4.84381 -38.3343 0 - vertex 4.84381 -38.3343 -3 - endloop - endfacet - facet normal 0.985121 0.171864 0 - outer loop - vertex 4.73542 -37.8041 0 - vertex 4.64415 -37.2809 -3 - vertex 4.64415 -37.2809 0 - endloop - endfacet - facet normal 0.985121 0.171864 0 - outer loop - vertex 4.64415 -37.2809 -3 - vertex 4.73542 -37.8041 0 - vertex 4.73542 -37.8041 -3 - endloop - endfacet - facet normal -0.43 0.902829 0 - outer loop - vertex 4.64415 -37.2809 -3 - vertex 3.43985 -37.8545 0 - vertex 4.64415 -37.2809 0 - endloop - endfacet - facet normal -0.43 0.902829 0 - outer loop - vertex 3.43985 -37.8545 0 - vertex 4.64415 -37.2809 -3 - vertex 3.43985 -37.8545 -3 - endloop - endfacet - facet normal -0.338512 0.940962 0 - outer loop - vertex 3.43985 -37.8545 -3 - vertex 2.31266 -38.26 0 - vertex 3.43985 -37.8545 0 - endloop - endfacet - facet normal -0.338512 0.940962 0 - outer loop - vertex 2.31266 -38.26 0 - vertex 3.43985 -37.8545 -3 - vertex 2.31266 -38.26 -3 - endloop - endfacet - facet normal -0.172368 0.985033 0 - outer loop - vertex 2.31266 -38.26 -3 - vertex 0.962702 -38.4962 0 - vertex 2.31266 -38.26 0 - endloop - endfacet - facet normal -0.172368 0.985033 0 - outer loop - vertex 0.962702 -38.4962 0 - vertex 2.31266 -38.26 -3 - vertex 0.962702 -38.4962 -3 - endloop - endfacet - facet normal -0.0313759 0.999508 0 - outer loop - vertex 0.962702 -38.4962 -3 - vertex -0.366978 -38.538 0 - vertex 0.962702 -38.4962 0 - endloop - endfacet - facet normal -0.0313759 0.999508 0 - outer loop - vertex -0.366978 -38.538 0 - vertex 0.962702 -38.4962 -3 - vertex -0.366978 -38.538 -3 - endloop - endfacet - facet normal 0.16461 0.986359 -0 - outer loop - vertex -0.366978 -38.538 -3 - vertex -1.43333 -38.36 0 - vertex -0.366978 -38.538 0 - endloop - endfacet - facet normal 0.16461 0.986359 0 - outer loop - vertex -1.43333 -38.36 0 - vertex -0.366978 -38.538 -3 - vertex -1.43333 -38.36 -3 - endloop - endfacet - facet normal 0.535641 0.844446 -0 - outer loop - vertex -1.43333 -38.36 -3 - vertex -2.45619 -37.7112 0 - vertex -1.43333 -38.36 0 - endloop - endfacet - facet normal 0.535641 0.844446 0 - outer loop - vertex -2.45619 -37.7112 0 - vertex -1.43333 -38.36 -3 - vertex -2.45619 -37.7112 -3 - endloop - endfacet - facet normal 0.80363 0.595129 0 - outer loop - vertex -2.45619 -37.7112 0 - vertex -3.26834 -36.6145 -3 - vertex -3.26834 -36.6145 0 - endloop - endfacet - facet normal 0.80363 0.595129 0 - outer loop - vertex -3.26834 -36.6145 -3 - vertex -2.45619 -37.7112 0 - vertex -2.45619 -37.7112 -3 - endloop - endfacet - facet normal 0.935783 0.352578 0 - outer loop - vertex -3.26834 -36.6145 0 - vertex -3.80393 -35.193 -3 - vertex -3.80393 -35.193 0 - endloop - endfacet - facet normal 0.935783 0.352578 0 - outer loop - vertex -3.80393 -35.193 -3 - vertex -3.26834 -36.6145 0 - vertex -3.26834 -36.6145 -3 - endloop - endfacet - facet normal 0.992994 0.118162 0 - outer loop - vertex -3.80393 -35.193 0 - vertex -3.99709 -33.5697 -3 - vertex -3.99709 -33.5697 0 - endloop - endfacet - facet normal 0.992994 0.118162 0 - outer loop - vertex -3.99709 -33.5697 -3 - vertex -3.80393 -35.193 0 - vertex -3.80393 -35.193 -3 - endloop - endfacet - facet normal 0.988913 -0.148494 0 - outer loop - vertex -3.99709 -33.5697 0 - vertex -3.7659 -32.0301 -3 - vertex -3.7659 -32.0301 0 - endloop - endfacet - facet normal 0.988913 -0.148494 0 - outer loop - vertex -3.7659 -32.0301 -3 - vertex -3.99709 -33.5697 0 - vertex -3.99709 -33.5697 -3 - endloop - endfacet - facet normal 0.953123 -0.302584 0 - outer loop - vertex -3.7659 -32.0301 0 - vertex -3.14673 -30.0798 -3 - vertex -3.14673 -30.0798 0 - endloop - endfacet - facet normal 0.953123 -0.302584 0 - outer loop - vertex -3.14673 -30.0798 -3 - vertex -3.7659 -32.0301 0 - vertex -3.7659 -32.0301 -3 - endloop - endfacet - facet normal 0.917453 -0.397844 0 - outer loop - vertex -3.14673 -30.0798 0 - vertex -2.25121 -28.0146 -3 - vertex -2.25121 -28.0146 0 - endloop - endfacet - facet normal 0.917453 -0.397844 0 - outer loop - vertex -2.25121 -28.0146 -3 - vertex -3.14673 -30.0798 0 - vertex -3.14673 -30.0798 -3 - endloop - endfacet - facet normal 0.871478 -0.490435 0 - outer loop - vertex -2.25121 -28.0146 0 - vertex -1.19093 -26.1306 -3 - vertex -1.19093 -26.1306 0 - endloop - endfacet - facet normal 0.871478 -0.490435 0 - outer loop - vertex -1.19093 -26.1306 -3 - vertex -2.25121 -28.0146 0 - vertex -2.25121 -28.0146 -3 - endloop - endfacet - facet normal 0.794031 -0.607877 0 - outer loop - vertex -1.19093 -26.1306 0 - vertex 0.168338 -24.355 -3 - vertex 0.168338 -24.355 0 - endloop - endfacet - facet normal 0.794031 -0.607877 0 - outer loop - vertex 0.168338 -24.355 -3 - vertex -1.19093 -26.1306 0 - vertex -1.19093 -26.1306 -3 - endloop - endfacet - facet normal 0.710709 -0.703486 0 - outer loop - vertex 0.168338 -24.355 0 - vertex 1.84511 -22.661 -3 - vertex 1.84511 -22.661 0 - endloop - endfacet - facet normal 0.710709 -0.703486 0 - outer loop - vertex 1.84511 -22.661 -3 - vertex 0.168338 -24.355 0 - vertex 0.168338 -24.355 -3 - endloop - endfacet - facet normal 0.626061 -0.779774 0 - outer loop - vertex 1.84511 -22.661 -3 - vertex 3.72385 -21.1527 0 - vertex 1.84511 -22.661 0 - endloop - endfacet - facet normal 0.626061 -0.779774 0 - outer loop - vertex 3.72385 -21.1527 0 - vertex 1.84511 -22.661 -3 - vertex 3.72385 -21.1527 -3 - endloop - endfacet - facet normal 0.527042 -0.849839 0 - outer loop - vertex 3.72385 -21.1527 -3 - vertex 5.689 -19.9339 0 - vertex 3.72385 -21.1527 0 - endloop - endfacet - facet normal 0.527042 -0.849839 0 - outer loop - vertex 5.689 -19.9339 0 - vertex 3.72385 -21.1527 -3 - vertex 5.689 -19.9339 -3 - endloop - endfacet - facet normal 0.380142 -0.924928 0 - outer loop - vertex 5.689 -19.9339 -3 - vertex 7.06268 -19.3694 0 - vertex 5.689 -19.9339 0 - endloop - endfacet - facet normal 0.380142 -0.924928 0 - outer loop - vertex 7.06268 -19.3694 0 - vertex 5.689 -19.9339 -3 - vertex 7.06268 -19.3694 -3 - endloop - endfacet - facet normal 0.11624 -0.993221 0 - outer loop - vertex 7.06268 -19.3694 -3 - vertex 8.75581 -19.1712 0 - vertex 7.06268 -19.3694 0 - endloop - endfacet - facet normal 0.11624 -0.993221 0 - outer loop - vertex 8.75581 -19.1712 0 - vertex 7.06268 -19.3694 -3 - vertex 8.75581 -19.1712 -3 - endloop - endfacet - facet normal -0.00391511 -0.999992 0 - outer loop - vertex 8.75581 -19.1712 -3 - vertex 10.3474 -19.1774 0 - vertex 8.75581 -19.1712 0 - endloop - endfacet - facet normal -0.00391511 -0.999992 -0 - outer loop - vertex 10.3474 -19.1774 0 - vertex 8.75581 -19.1712 -3 - vertex 10.3474 -19.1774 -3 - endloop - endfacet - facet normal -0.375648 -0.926763 0 - outer loop - vertex 10.3474 -19.1774 -3 - vertex 11.2177 -19.5302 0 - vertex 10.3474 -19.1774 0 - endloop - endfacet - facet normal -0.375648 -0.926763 -0 - outer loop - vertex 11.2177 -19.5302 0 - vertex 10.3474 -19.1774 -3 - vertex 11.2177 -19.5302 -3 - endloop - endfacet - facet normal -0.460444 -0.887689 0 - outer loop - vertex 11.2177 -19.5302 -3 - vertex 11.7785 -19.8211 0 - vertex 11.2177 -19.5302 0 - endloop - endfacet - facet normal -0.460444 -0.887689 -0 - outer loop - vertex 11.7785 -19.8211 0 - vertex 11.2177 -19.5302 -3 - vertex 11.7785 -19.8211 -3 - endloop - endfacet - facet normal 0.340288 -0.940321 0 - outer loop - vertex 11.7785 -19.8211 -3 - vertex 12.058 -19.7199 0 - vertex 11.7785 -19.8211 0 - endloop - endfacet - facet normal 0.340288 -0.940321 0 - outer loop - vertex 12.058 -19.7199 0 - vertex 11.7785 -19.8211 -3 - vertex 12.058 -19.7199 -3 - endloop - endfacet - facet normal 0.919444 -0.393221 0 - outer loop - vertex 12.058 -19.7199 0 - vertex 13.2867 -16.8469 -3 - vertex 13.2867 -16.8469 0 - endloop - endfacet - facet normal 0.919444 -0.393221 0 - outer loop - vertex 13.2867 -16.8469 -3 - vertex 12.058 -19.7199 0 - vertex 12.058 -19.7199 -3 - endloop - endfacet - facet normal 0.948333 -0.317278 0 - outer loop - vertex 13.2867 -16.8469 0 - vertex 14.1246 -14.3424 -3 - vertex 14.1246 -14.3424 0 - endloop - endfacet - facet normal 0.948333 -0.317278 0 - outer loop - vertex 14.1246 -14.3424 -3 - vertex 13.2867 -16.8469 0 - vertex 13.2867 -16.8469 -3 - endloop - endfacet - facet normal 0.170025 0.98544 -0 - outer loop - vertex 14.1246 -14.3424 -3 - vertex 12.858 -14.1239 0 - vertex 14.1246 -14.3424 0 - endloop - endfacet - facet normal 0.170025 0.98544 0 - outer loop - vertex 12.858 -14.1239 0 - vertex 14.1246 -14.3424 -3 - vertex 12.858 -14.1239 -3 - endloop - endfacet - facet normal 0.649749 0.760149 -0 - outer loop - vertex 12.858 -14.1239 -3 - vertex 12.417 -13.7469 0 - vertex 12.858 -14.1239 0 - endloop - endfacet - facet normal 0.649749 0.760149 0 - outer loop - vertex 12.417 -13.7469 0 - vertex 12.858 -14.1239 -3 - vertex 12.417 -13.7469 -3 - endloop - endfacet - facet normal 0.999788 0.0206018 0 - outer loop - vertex 12.417 -13.7469 0 - vertex 12.4073 -13.2773 -3 - vertex 12.4073 -13.2773 0 - endloop - endfacet - facet normal 0.999788 0.0206018 0 - outer loop - vertex 12.4073 -13.2773 -3 - vertex 12.417 -13.7469 0 - vertex 12.417 -13.7469 -3 - endloop - endfacet - facet normal 0.884204 -0.467101 0 - outer loop - vertex 12.4073 -13.2773 0 - vertex 12.6527 -12.8127 -3 - vertex 12.6527 -12.8127 0 - endloop - endfacet - facet normal 0.884204 -0.467101 0 - outer loop - vertex 12.6527 -12.8127 -3 - vertex 12.4073 -13.2773 0 - vertex 12.4073 -13.2773 -3 - endloop - endfacet - facet normal 0.661795 -0.749685 0 - outer loop - vertex 12.6527 -12.8127 -3 - vertex 13.1035 -12.4147 0 - vertex 12.6527 -12.8127 0 - endloop - endfacet - facet normal 0.661795 -0.749685 0 - outer loop - vertex 13.1035 -12.4147 0 - vertex 12.6527 -12.8127 -3 - vertex 13.1035 -12.4147 -3 - endloop - endfacet - facet normal 0.406349 -0.913718 0 - outer loop - vertex 13.1035 -12.4147 -3 - vertex 13.71 -12.1451 0 - vertex 13.1035 -12.4147 0 - endloop - endfacet - facet normal 0.406349 -0.913718 0 - outer loop - vertex 13.71 -12.1451 0 - vertex 13.1035 -12.4147 -3 - vertex 13.71 -12.1451 -3 - endloop - endfacet - facet normal 0.283559 -0.958955 0 - outer loop - vertex 13.71 -12.1451 -3 - vertex 16.7993 -11.2316 0 - vertex 13.71 -12.1451 0 - endloop - endfacet - facet normal 0.283559 -0.958955 0 - outer loop - vertex 16.7993 -11.2316 0 - vertex 13.71 -12.1451 -3 - vertex 16.7993 -11.2316 -3 - endloop - endfacet - facet normal 0.227026 -0.973889 0 - outer loop - vertex 16.7993 -11.2316 -3 - vertex 19.0845 -10.6988 0 - vertex 16.7993 -11.2316 0 - endloop - endfacet - facet normal 0.227026 -0.973889 0 - outer loop - vertex 19.0845 -10.6988 0 - vertex 16.7993 -11.2316 -3 - vertex 19.0845 -10.6988 -3 - endloop - endfacet - facet normal -0.20555 -0.978647 0 - outer loop - vertex 19.0845 -10.6988 -3 - vertex 19.5452 -10.7956 0 - vertex 19.0845 -10.6988 0 - endloop - endfacet - facet normal -0.20555 -0.978647 -0 - outer loop - vertex 19.5452 -10.7956 0 - vertex 19.0845 -10.6988 -3 - vertex 19.5452 -10.7956 -3 - endloop - endfacet - facet normal -0.339851 0.940479 0 - outer loop - vertex 7.70773 -21.5983 -3 - vertex 6.85097 -21.9079 0 - vertex 7.70773 -21.5983 0 - endloop - endfacet - facet normal -0.339851 0.940479 0 - outer loop - vertex 6.85097 -21.9079 0 - vertex 7.70773 -21.5983 -3 - vertex 6.85097 -21.9079 -3 - endloop - endfacet - facet normal -0.514575 0.857445 0 - outer loop - vertex 6.85097 -21.9079 -3 - vertex 5.96068 -22.4422 0 - vertex 6.85097 -21.9079 0 - endloop - endfacet - facet normal -0.514575 0.857445 0 - outer loop - vertex 5.96068 -22.4422 0 - vertex 6.85097 -21.9079 -3 - vertex 5.96068 -22.4422 -3 - endloop - endfacet - facet normal -0.651148 0.758951 0 - outer loop - vertex 5.96068 -22.4422 -3 - vertex 5.07455 -23.2024 0 - vertex 5.96068 -22.4422 0 - endloop - endfacet - facet normal -0.651148 0.758951 0 - outer loop - vertex 5.07455 -23.2024 0 - vertex 5.96068 -22.4422 -3 - vertex 5.07455 -23.2024 -3 - endloop - endfacet - facet normal -0.756285 0.654243 0 - outer loop - vertex 3.84714 -24.6213 -3 - vertex 5.07455 -23.2024 0 - vertex 5.07455 -23.2024 -3 - endloop - endfacet - facet normal -0.756285 0.654243 0 - outer loop - vertex 5.07455 -23.2024 0 - vertex 3.84714 -24.6213 -3 - vertex 3.84714 -24.6213 0 - endloop - endfacet - facet normal -0.833253 0.552891 0 - outer loop - vertex 2.80055 -26.1986 -3 - vertex 3.84714 -24.6213 0 - vertex 3.84714 -24.6213 -3 - endloop - endfacet - facet normal -0.833253 0.552891 0 - outer loop - vertex 3.84714 -24.6213 0 - vertex 2.80055 -26.1986 -3 - vertex 2.80055 -26.1986 0 - endloop - endfacet - facet normal -0.891463 0.453094 0 - outer loop - vertex 1.95873 -27.8549 -3 - vertex 2.80055 -26.1986 0 - vertex 2.80055 -26.1986 -3 - endloop - endfacet - facet normal -0.891463 0.453094 0 - outer loop - vertex 2.80055 -26.1986 0 - vertex 1.95873 -27.8549 -3 - vertex 1.95873 -27.8549 0 - endloop - endfacet - facet normal -0.937776 0.347241 0 - outer loop - vertex 1.3456 -29.5107 -3 - vertex 1.95873 -27.8549 0 - vertex 1.95873 -27.8549 -3 - endloop - endfacet - facet normal -0.937776 0.347241 0 - outer loop - vertex 1.95873 -27.8549 0 - vertex 1.3456 -29.5107 -3 - vertex 1.3456 -29.5107 0 - endloop - endfacet - facet normal -0.97482 0.222992 0 - outer loop - vertex 0.985088 -31.0867 -3 - vertex 1.3456 -29.5107 0 - vertex 1.3456 -29.5107 -3 - endloop - endfacet - facet normal -0.97482 0.222992 0 - outer loop - vertex 1.3456 -29.5107 0 - vertex 0.985088 -31.0867 -3 - vertex 0.985088 -31.0867 0 - endloop - endfacet - facet normal -0.998249 0.0591584 0 - outer loop - vertex 0.901133 -32.5034 -3 - vertex 0.985088 -31.0867 0 - vertex 0.985088 -31.0867 -3 - endloop - endfacet - facet normal -0.998249 0.0591584 0 - outer loop - vertex 0.985088 -31.0867 0 - vertex 0.901133 -32.5034 -3 - vertex 0.901133 -32.5034 0 - endloop - endfacet - facet normal -0.983521 -0.180795 0 - outer loop - vertex 1.11766 -33.6813 -3 - vertex 0.901133 -32.5034 0 - vertex 0.901133 -32.5034 -3 - endloop - endfacet - facet normal -0.983521 -0.180795 0 - outer loop - vertex 0.901133 -32.5034 0 - vertex 1.11766 -33.6813 -3 - vertex 1.11766 -33.6813 0 - endloop - endfacet - facet normal -0.846397 -0.532553 0 - outer loop - vertex 1.65861 -34.5411 -3 - vertex 1.11766 -33.6813 0 - vertex 1.11766 -33.6813 -3 - endloop - endfacet - facet normal -0.846397 -0.532553 0 - outer loop - vertex 1.11766 -33.6813 0 - vertex 1.65861 -34.5411 -3 - vertex 1.65861 -34.5411 0 - endloop - endfacet - facet normal -0.511641 -0.859199 0 - outer loop - vertex 1.65861 -34.5411 -3 - vertex 2.32628 -34.9386 0 - vertex 1.65861 -34.5411 0 - endloop - endfacet - facet normal -0.511641 -0.859199 -0 - outer loop - vertex 2.32628 -34.9386 0 - vertex 1.65861 -34.5411 -3 - vertex 2.32628 -34.9386 -3 - endloop - endfacet - facet normal -0.182531 -0.9832 0 - outer loop - vertex 2.32628 -34.9386 -3 - vertex 3.17687 -35.0966 0 - vertex 2.32628 -34.9386 0 - endloop - endfacet - facet normal -0.182531 -0.9832 -0 - outer loop - vertex 3.17687 -35.0966 0 - vertex 2.32628 -34.9386 -3 - vertex 3.17687 -35.0966 -3 - endloop - endfacet - facet normal 0.0908592 -0.995864 0 - outer loop - vertex 3.17687 -35.0966 -3 - vertex 4.11511 -35.011 0 - vertex 3.17687 -35.0966 0 - endloop - endfacet - facet normal 0.0908592 -0.995864 0 - outer loop - vertex 4.11511 -35.011 0 - vertex 3.17687 -35.0966 -3 - vertex 4.11511 -35.011 -3 - endloop - endfacet - facet normal 0.336892 -0.941543 0 - outer loop - vertex 4.11511 -35.011 -3 - vertex 5.04571 -34.678 0 - vertex 4.11511 -35.011 0 - endloop - endfacet - facet normal 0.336892 -0.941543 0 - outer loop - vertex 5.04571 -34.678 0 - vertex 4.11511 -35.011 -3 - vertex 5.04571 -34.678 -3 - endloop - endfacet - facet normal 0.557528 -0.830158 0 - outer loop - vertex 5.04571 -34.678 -3 - vertex 5.71313 -34.2297 0 - vertex 5.04571 -34.678 0 - endloop - endfacet - facet normal 0.557528 -0.830158 0 - outer loop - vertex 5.71313 -34.2297 0 - vertex 5.04571 -34.678 -3 - vertex 5.71313 -34.2297 -3 - endloop - endfacet - facet normal 0.786383 -0.61774 0 - outer loop - vertex 5.71313 -34.2297 0 - vertex 6.30534 -33.4759 -3 - vertex 6.30534 -33.4759 0 - endloop - endfacet - facet normal 0.786383 -0.61774 0 - outer loop - vertex 6.30534 -33.4759 -3 - vertex 5.71313 -34.2297 0 - vertex 5.71313 -34.2297 -3 - endloop - endfacet - facet normal 0.906895 -0.421357 0 - outer loop - vertex 6.30534 -33.4759 0 - vertex 7.96204 -29.9101 -3 - vertex 7.96204 -29.9101 0 - endloop - endfacet - facet normal 0.906895 -0.421357 0 - outer loop - vertex 7.96204 -29.9101 -3 - vertex 6.30534 -33.4759 0 - vertex 6.30534 -33.4759 -3 - endloop - endfacet - facet normal 0.929235 -0.36949 0 - outer loop - vertex 7.96204 -29.9101 0 - vertex 9.7411 -25.4359 -3 - vertex 9.7411 -25.4359 0 - endloop - endfacet - facet normal 0.929235 -0.36949 0 - outer loop - vertex 9.7411 -25.4359 -3 - vertex 7.96204 -29.9101 0 - vertex 7.96204 -29.9101 -3 - endloop - endfacet - facet normal 0.962546 -0.271117 0 - outer loop - vertex 9.7411 -25.4359 0 - vertex 10.0775 -24.2416 -3 - vertex 10.0775 -24.2416 0 - endloop - endfacet - facet normal 0.962546 -0.271117 0 - outer loop - vertex 10.0775 -24.2416 -3 - vertex 9.7411 -25.4359 0 - vertex 9.7411 -25.4359 -3 - endloop - endfacet - facet normal 0.994463 -0.105087 0 - outer loop - vertex 10.0775 -24.2416 0 - vertex 10.169 -23.3758 -3 - vertex 10.169 -23.3758 0 - endloop - endfacet - facet normal 0.994463 -0.105087 0 - outer loop - vertex 10.169 -23.3758 -3 - vertex 10.0775 -24.2416 0 - vertex 10.0775 -24.2416 -3 - endloop - endfacet - facet normal 0.988121 0.153677 0 - outer loop - vertex 10.169 -23.3758 0 - vertex 10.0454 -22.5812 -3 - vertex 10.0454 -22.5812 0 - endloop - endfacet - facet normal 0.988121 0.153677 0 - outer loop - vertex 10.0454 -22.5812 -3 - vertex 10.169 -23.3758 0 - vertex 10.169 -23.3758 -3 - endloop - endfacet - facet normal 0.857617 0.514289 0 - outer loop - vertex 10.0454 -22.5812 0 - vertex 9.69979 -22.0048 -3 - vertex 9.69979 -22.0048 0 - endloop - endfacet - facet normal 0.857617 0.514289 0 - outer loop - vertex 9.69979 -22.0048 -3 - vertex 10.0454 -22.5812 0 - vertex 10.0454 -22.5812 -3 - endloop - endfacet - facet normal 0.558467 0.829527 -0 - outer loop - vertex 9.69979 -22.0048 -3 - vertex 9.16984 -21.6481 0 - vertex 9.69979 -22.0048 0 - endloop - endfacet - facet normal 0.558467 0.829527 0 - outer loop - vertex 9.16984 -21.6481 0 - vertex 9.69979 -22.0048 -3 - vertex 9.16984 -21.6481 -3 - endloop - endfacet - facet normal 0.196985 0.980407 -0 - outer loop - vertex 9.16984 -21.6481 -3 - vertex 8.49325 -21.5121 0 - vertex 9.16984 -21.6481 0 - endloop - endfacet - facet normal 0.196985 0.980407 0 - outer loop - vertex 8.49325 -21.5121 0 - vertex 9.16984 -21.6481 -3 - vertex 8.49325 -21.5121 -3 - endloop - endfacet - facet normal -0.109065 0.994035 0 - outer loop - vertex 8.49325 -21.5121 -3 - vertex 7.70773 -21.5983 0 - vertex 8.49325 -21.5121 0 - endloop - endfacet - facet normal -0.109065 0.994035 0 - outer loop - vertex 7.70773 -21.5983 0 - vertex 8.49325 -21.5121 -3 - vertex 7.70773 -21.5983 -3 - endloop - endfacet - facet normal -0.270451 -0.962734 0 - outer loop - vertex 28.989 -19.2301 -3 - vertex 29.9429 -19.4981 0 - vertex 28.989 -19.2301 0 - endloop - endfacet - facet normal -0.270451 -0.962734 -0 - outer loop - vertex 29.9429 -19.4981 0 - vertex 28.989 -19.2301 -3 - vertex 29.9429 -19.4981 -3 - endloop - endfacet - facet normal -0.511153 -0.85949 0 - outer loop - vertex 29.9429 -19.4981 -3 - vertex 30.7248 -19.9631 0 - vertex 29.9429 -19.4981 0 - endloop - endfacet - facet normal -0.511153 -0.85949 -0 - outer loop - vertex 30.7248 -19.9631 0 - vertex 29.9429 -19.4981 -3 - vertex 30.7248 -19.9631 -3 - endloop - endfacet - facet normal -0.723919 -0.689885 0 - outer loop - vertex 31.3699 -20.64 -3 - vertex 30.7248 -19.9631 0 - vertex 30.7248 -19.9631 -3 - endloop - endfacet - facet normal -0.723919 -0.689885 0 - outer loop - vertex 30.7248 -19.9631 0 - vertex 31.3699 -20.64 -3 - vertex 31.3699 -20.64 0 - endloop - endfacet - facet normal -0.867187 -0.497983 0 - outer loop - vertex 31.8086 -21.404 -3 - vertex 31.3699 -20.64 0 - vertex 31.3699 -20.64 -3 - endloop - endfacet - facet normal -0.867187 -0.497983 0 - outer loop - vertex 31.3699 -20.64 0 - vertex 31.8086 -21.404 -3 - vertex 31.8086 -21.404 0 - endloop - endfacet - facet normal -0.971458 -0.237212 0 - outer loop - vertex 32.0232 -22.2828 -3 - vertex 31.8086 -21.404 0 - vertex 31.8086 -21.404 -3 - endloop - endfacet - facet normal -0.971458 -0.237212 0 - outer loop - vertex 31.8086 -21.404 0 - vertex 32.0232 -22.2828 -3 - vertex 32.0232 -22.2828 0 - endloop - endfacet - facet normal -0.999998 -0.00210454 0 - outer loop - vertex 32.0255 -23.3848 -3 - vertex 32.0232 -22.2828 0 - vertex 32.0232 -22.2828 -3 - endloop - endfacet - facet normal -0.999998 -0.00210454 0 - outer loop - vertex 32.0232 -22.2828 0 - vertex 32.0255 -23.3848 -3 - vertex 32.0255 -23.3848 0 - endloop - endfacet - facet normal -0.990595 0.136824 0 - outer loop - vertex 31.8275 -24.8188 -3 - vertex 32.0255 -23.3848 0 - vertex 32.0255 -23.3848 -3 - endloop - endfacet - facet normal -0.990595 0.136824 0 - outer loop - vertex 32.0255 -23.3848 0 - vertex 31.8275 -24.8188 -3 - vertex 31.8275 -24.8188 0 - endloop - endfacet - facet normal -0.978641 0.205575 0 - outer loop - vertex 31.4974 -26.3899 -3 - vertex 31.8275 -24.8188 0 - vertex 31.8275 -24.8188 -3 - endloop - endfacet - facet normal -0.978641 0.205575 0 - outer loop - vertex 31.8275 -24.8188 0 - vertex 31.4974 -26.3899 -3 - vertex 31.4974 -26.3899 0 - endloop - endfacet - facet normal -0.869264 0.494348 0 - outer loop - vertex 31.2318 -26.857 -3 - vertex 31.4974 -26.3899 0 - vertex 31.4974 -26.3899 -3 - endloop - endfacet - facet normal -0.869264 0.494348 0 - outer loop - vertex 31.4974 -26.3899 0 - vertex 31.2318 -26.857 -3 - vertex 31.2318 -26.857 0 - endloop - endfacet - facet normal -0.557816 0.829965 0 - outer loop - vertex 31.2318 -26.857 -3 - vertex 30.7817 -27.1595 0 - vertex 31.2318 -26.857 0 - endloop - endfacet - facet normal -0.557816 0.829965 0 - outer loop - vertex 30.7817 -27.1595 0 - vertex 31.2318 -26.857 -3 - vertex 30.7817 -27.1595 -3 - endloop - endfacet - facet normal -0.13929 0.990252 0 - outer loop - vertex 30.7817 -27.1595 -3 - vertex 28.9763 -27.4135 0 - vertex 30.7817 -27.1595 0 - endloop - endfacet - facet normal -0.13929 0.990252 0 - outer loop - vertex 28.9763 -27.4135 0 - vertex 30.7817 -27.1595 -3 - vertex 28.9763 -27.4135 -3 - endloop - endfacet - facet normal -0.00668289 0.999978 0 - outer loop - vertex 28.9763 -27.4135 -3 - vertex 25.3774 -27.4375 0 - vertex 28.9763 -27.4135 0 - endloop - endfacet - facet normal -0.00668289 0.999978 0 - outer loop - vertex 25.3774 -27.4375 0 - vertex 28.9763 -27.4135 -3 - vertex 25.3774 -27.4375 -3 - endloop - endfacet - facet normal -0.00092424 1 0 - outer loop - vertex 25.3774 -27.4375 -3 - vertex 20.1129 -27.4424 0 - vertex 25.3774 -27.4375 0 - endloop - endfacet - facet normal -0.00092424 1 0 - outer loop - vertex 20.1129 -27.4424 0 - vertex 25.3774 -27.4375 -3 - vertex 20.1129 -27.4424 -3 - endloop - endfacet - facet normal -0.945282 0.326255 0 - outer loop - vertex 19.9054 -28.0436 -3 - vertex 20.1129 -27.4424 0 - vertex 20.1129 -27.4424 -3 - endloop - endfacet - facet normal -0.945282 0.326255 0 - outer loop - vertex 20.1129 -27.4424 0 - vertex 19.9054 -28.0436 -3 - vertex 19.9054 -28.0436 0 - endloop - endfacet - facet normal -0.967122 0.254313 0 - outer loop - vertex 19.5138 -29.5327 -3 - vertex 19.9054 -28.0436 0 - vertex 19.9054 -28.0436 -3 - endloop - endfacet - facet normal -0.967122 0.254313 0 - outer loop - vertex 19.9054 -28.0436 0 - vertex 19.5138 -29.5327 -3 - vertex 19.5138 -29.5327 0 - endloop - endfacet - facet normal -0.991046 0.133521 0 - outer loop - vertex 19.3087 -31.0557 -3 - vertex 19.5138 -29.5327 0 - vertex 19.5138 -29.5327 -3 - endloop - endfacet - facet normal -0.991046 0.133521 0 - outer loop - vertex 19.5138 -29.5327 0 - vertex 19.3087 -31.0557 -3 - vertex 19.3087 -31.0557 0 - endloop - endfacet - facet normal -1 8.95066e-05 0 - outer loop - vertex 19.3085 -32.3556 -3 - vertex 19.3087 -31.0557 0 - vertex 19.3087 -31.0557 -3 - endloop - endfacet - facet normal -1 8.95066e-05 0 - outer loop - vertex 19.3087 -31.0557 0 - vertex 19.3085 -32.3556 -3 - vertex 19.3085 -32.3556 0 - endloop - endfacet - facet normal -0.964746 -0.263183 0 - outer loop - vertex 19.5322 -33.1754 -3 - vertex 19.3085 -32.3556 0 - vertex 19.3085 -32.3556 -3 - endloop - endfacet - facet normal -0.964746 -0.263183 0 - outer loop - vertex 19.3085 -32.3556 0 - vertex 19.5322 -33.1754 -3 - vertex 19.5322 -33.1754 0 - endloop - endfacet - facet normal -0.729596 -0.683879 0 - outer loop - vertex 20.0228 -33.6987 -3 - vertex 19.5322 -33.1754 0 - vertex 19.5322 -33.1754 -3 - endloop - endfacet - facet normal -0.729596 -0.683879 0 - outer loop - vertex 19.5322 -33.1754 0 - vertex 20.0228 -33.6987 -3 - vertex 20.0228 -33.6987 0 - endloop - endfacet - facet normal -0.526282 -0.85031 0 - outer loop - vertex 20.0228 -33.6987 -3 - vertex 20.6651 -34.0963 0 - vertex 20.0228 -33.6987 0 - endloop - endfacet - facet normal -0.526282 -0.85031 -0 - outer loop - vertex 20.6651 -34.0963 0 - vertex 20.0228 -33.6987 -3 - vertex 20.6651 -34.0963 -3 - endloop - endfacet - facet normal -0.318074 -0.948066 0 - outer loop - vertex 20.6651 -34.0963 -3 - vertex 21.4183 -34.349 0 - vertex 20.6651 -34.0963 0 - endloop - endfacet - facet normal -0.318074 -0.948066 -0 - outer loop - vertex 21.4183 -34.349 0 - vertex 20.6651 -34.0963 -3 - vertex 21.4183 -34.349 -3 - endloop - endfacet - facet normal -0.107309 -0.994226 0 - outer loop - vertex 21.4183 -34.349 -3 - vertex 22.2417 -34.4379 0 - vertex 21.4183 -34.349 0 - endloop - endfacet - facet normal -0.107309 -0.994226 -0 - outer loop - vertex 22.2417 -34.4379 0 - vertex 21.4183 -34.349 -3 - vertex 22.2417 -34.4379 -3 - endloop - endfacet - facet normal 0.120086 -0.992763 0 - outer loop - vertex 22.2417 -34.4379 -3 - vertex 23.5816 -34.2758 0 - vertex 22.2417 -34.4379 0 - endloop - endfacet - facet normal 0.120086 -0.992763 0 - outer loop - vertex 23.5816 -34.2758 0 - vertex 22.2417 -34.4379 -3 - vertex 23.5816 -34.2758 -3 - endloop - endfacet - facet normal 0.371865 -0.928287 0 - outer loop - vertex 23.5816 -34.2758 -3 - vertex 24.9271 -33.7368 0 - vertex 23.5816 -34.2758 0 - endloop - endfacet - facet normal 0.371865 -0.928287 0 - outer loop - vertex 24.9271 -33.7368 0 - vertex 23.5816 -34.2758 -3 - vertex 24.9271 -33.7368 -3 - endloop - endfacet - facet normal 0.553658 -0.832744 0 - outer loop - vertex 24.9271 -33.7368 -3 - vertex 26.4192 -32.7448 0 - vertex 24.9271 -33.7368 0 - endloop - endfacet - facet normal 0.553658 -0.832744 0 - outer loop - vertex 26.4192 -32.7448 0 - vertex 24.9271 -33.7368 -3 - vertex 26.4192 -32.7448 -3 - endloop - endfacet - facet normal 0.649717 -0.760176 0 - outer loop - vertex 26.4192 -32.7448 -3 - vertex 28.199 -31.2235 0 - vertex 26.4192 -32.7448 0 - endloop - endfacet - facet normal 0.649717 -0.760176 0 - outer loop - vertex 28.199 -31.2235 0 - vertex 26.4192 -32.7448 -3 - vertex 28.199 -31.2235 -3 - endloop - endfacet - facet normal 0.570708 -0.821153 0 - outer loop - vertex 28.199 -31.2235 -3 - vertex 29.2916 -30.4642 0 - vertex 28.199 -31.2235 0 - endloop - endfacet - facet normal 0.570708 -0.821153 0 - outer loop - vertex 29.2916 -30.4642 0 - vertex 28.199 -31.2235 -3 - vertex 29.2916 -30.4642 -3 - endloop - endfacet - facet normal -0.0859885 -0.996296 0 - outer loop - vertex 29.2916 -30.4642 -3 - vertex 29.6885 -30.4984 0 - vertex 29.2916 -30.4642 0 - endloop - endfacet - facet normal -0.0859885 -0.996296 -0 - outer loop - vertex 29.6885 -30.4984 0 - vertex 29.2916 -30.4642 -3 - vertex 29.6885 -30.4984 -3 - endloop - endfacet - facet normal -0.559844 -0.828598 0 - outer loop - vertex 29.6885 -30.4984 -3 - vertex 30.1062 -30.7807 0 - vertex 29.6885 -30.4984 0 - endloop - endfacet - facet normal -0.559844 -0.828598 -0 - outer loop - vertex 30.1062 -30.7807 0 - vertex 29.6885 -30.4984 -3 - vertex 30.1062 -30.7807 -3 - endloop - endfacet - facet normal -0.971403 -0.237438 0 - outer loop - vertex 30.2029 -31.1764 -3 - vertex 30.1062 -30.7807 0 - vertex 30.1062 -30.7807 -3 - endloop - endfacet - facet normal -0.971403 -0.237438 0 - outer loop - vertex 30.1062 -30.7807 0 - vertex 30.2029 -31.1764 -3 - vertex 30.2029 -31.1764 0 - endloop - endfacet - facet normal -0.897428 0.441162 0 - outer loop - vertex 29.8709 -31.8517 -3 - vertex 30.2029 -31.1764 0 - vertex 30.2029 -31.1764 -3 - endloop - endfacet - facet normal -0.897428 0.441162 0 - outer loop - vertex 30.2029 -31.1764 0 - vertex 29.8709 -31.8517 -3 - vertex 29.8709 -31.8517 0 - endloop - endfacet - facet normal -0.750818 0.660509 0 - outer loop - vertex 27.8442 -34.1555 -3 - vertex 29.8709 -31.8517 0 - vertex 29.8709 -31.8517 -3 - endloop - endfacet - facet normal -0.750818 0.660509 0 - outer loop - vertex 29.8709 -31.8517 0 - vertex 27.8442 -34.1555 -3 - vertex 27.8442 -34.1555 0 - endloop - endfacet - facet normal -0.671006 0.741452 0 - outer loop - vertex 27.8442 -34.1555 -3 - vertex 25.9895 -35.834 0 - vertex 27.8442 -34.1555 0 - endloop - endfacet - facet normal -0.671006 0.741452 0 - outer loop - vertex 25.9895 -35.834 0 - vertex 27.8442 -34.1555 -3 - vertex 25.9895 -35.834 -3 - endloop - endfacet - facet normal -0.538751 0.842465 0 - outer loop - vertex 25.9895 -35.834 -3 - vertex 24.0601 -37.0678 0 - vertex 25.9895 -35.834 0 - endloop - endfacet - facet normal -0.538751 0.842465 0 - outer loop - vertex 24.0601 -37.0678 0 - vertex 25.9895 -35.834 -3 - vertex 24.0601 -37.0678 -3 - endloop - endfacet - facet normal -0.416623 0.909079 0 - outer loop - vertex 24.0601 -37.0678 -3 - vertex 21.4079 -38.2833 0 - vertex 24.0601 -37.0678 0 - endloop - endfacet - facet normal -0.416623 0.909079 0 - outer loop - vertex 21.4079 -38.2833 0 - vertex 24.0601 -37.0678 -3 - vertex 21.4079 -38.2833 -3 - endloop - endfacet - facet normal -0.208885 0.97794 0 - outer loop - vertex 21.4079 -38.2833 -3 - vertex 20.3084 -38.5182 0 - vertex 21.4079 -38.2833 0 - endloop - endfacet - facet normal -0.208885 0.97794 0 - outer loop - vertex 20.3084 -38.5182 0 - vertex 21.4079 -38.2833 -3 - vertex 20.3084 -38.5182 -3 - endloop - endfacet - facet normal -0.0552232 0.998474 0 - outer loop - vertex 20.3084 -38.5182 -3 - vertex 19.0956 -38.5852 0 - vertex 20.3084 -38.5182 0 - endloop - endfacet - facet normal -0.0552232 0.998474 0 - outer loop - vertex 19.0956 -38.5852 0 - vertex 20.3084 -38.5182 -3 - vertex 19.0956 -38.5852 -3 - endloop - endfacet - facet normal 0.0949344 0.995484 -0 - outer loop - vertex 19.0956 -38.5852 -3 - vertex 17.8945 -38.4707 0 - vertex 19.0956 -38.5852 0 - endloop - endfacet - facet normal 0.0949344 0.995484 0 - outer loop - vertex 17.8945 -38.4707 0 - vertex 19.0956 -38.5852 -3 - vertex 17.8945 -38.4707 -3 - endloop - endfacet - facet normal 0.357488 0.933918 -0 - outer loop - vertex 17.8945 -38.4707 -3 - vertex 16.8412 -38.0675 0 - vertex 17.8945 -38.4707 0 - endloop - endfacet - facet normal 0.357488 0.933918 0 - outer loop - vertex 16.8412 -38.0675 0 - vertex 17.8945 -38.4707 -3 - vertex 16.8412 -38.0675 -3 - endloop - endfacet - facet normal 0.556683 0.830725 -0 - outer loop - vertex 16.8412 -38.0675 -3 - vertex 15.8953 -37.4336 0 - vertex 16.8412 -38.0675 0 - endloop - endfacet - facet normal 0.556683 0.830725 0 - outer loop - vertex 15.8953 -37.4336 0 - vertex 16.8412 -38.0675 -3 - vertex 15.8953 -37.4336 -3 - endloop - endfacet - facet normal 0.764952 0.644087 0 - outer loop - vertex 15.8953 -37.4336 0 - vertex 15.2376 -36.6526 -3 - vertex 15.2376 -36.6526 0 - endloop - endfacet - facet normal 0.764952 0.644087 0 - outer loop - vertex 15.2376 -36.6526 -3 - vertex 15.8953 -37.4336 0 - vertex 15.8953 -37.4336 -3 - endloop - endfacet - facet normal 0.925772 0.378082 0 - outer loop - vertex 15.2376 -36.6526 0 - vertex 14.8379 -35.6738 -3 - vertex 14.8379 -35.6738 0 - endloop - endfacet - facet normal 0.925772 0.378082 0 - outer loop - vertex 14.8379 -35.6738 -3 - vertex 15.2376 -36.6526 0 - vertex 15.2376 -36.6526 -3 - endloop - endfacet - facet normal 0.990293 0.138993 0 - outer loop - vertex 14.8379 -35.6738 0 - vertex 14.6656 -34.4466 -3 - vertex 14.6656 -34.4466 0 - endloop - endfacet - facet normal 0.990293 0.138993 0 - outer loop - vertex 14.6656 -34.4466 -3 - vertex 14.8379 -35.6738 0 - vertex 14.8379 -35.6738 -3 - endloop - endfacet - facet normal 0.99828 -0.0586187 0 - outer loop - vertex 14.6656 -34.4466 0 - vertex 14.7938 -32.2631 -3 - vertex 14.7938 -32.2631 0 - endloop - endfacet - facet normal 0.99828 -0.0586187 0 - outer loop - vertex 14.7938 -32.2631 -3 - vertex 14.6656 -34.4466 0 - vertex 14.6656 -34.4466 -3 - endloop - endfacet - facet normal 0.96872 -0.248157 0 - outer loop - vertex 14.7938 -32.2631 0 - vertex 15.3794 -29.9771 -3 - vertex 15.3794 -29.9771 0 - endloop - endfacet - facet normal 0.96872 -0.248157 0 - outer loop - vertex 15.3794 -29.9771 -3 - vertex 14.7938 -32.2631 0 - vertex 14.7938 -32.2631 -3 - endloop - endfacet - facet normal 0.915816 -0.401597 0 - outer loop - vertex 15.3794 -29.9771 0 - vertex 16.4055 -27.6373 -3 - vertex 16.4055 -27.6373 0 - endloop - endfacet - facet normal 0.915816 -0.401597 0 - outer loop - vertex 16.4055 -27.6373 -3 - vertex 15.3794 -29.9771 0 - vertex 15.3794 -29.9771 -3 - endloop - endfacet - facet normal 0.850611 -0.525795 0 - outer loop - vertex 16.4055 -27.6373 0 - vertex 17.855 -25.2923 -3 - vertex 17.855 -25.2923 0 - endloop - endfacet - facet normal 0.850611 -0.525795 0 - outer loop - vertex 17.855 -25.2923 -3 - vertex 16.4055 -27.6373 0 - vertex 16.4055 -27.6373 -3 - endloop - endfacet - facet normal 0.787541 -0.616262 0 - outer loop - vertex 17.855 -25.2923 0 - vertex 19.0386 -23.7798 -3 - vertex 19.0386 -23.7798 0 - endloop - endfacet - facet normal 0.787541 -0.616262 0 - outer loop - vertex 19.0386 -23.7798 -3 - vertex 17.855 -25.2923 0 - vertex 17.855 -25.2923 -3 - endloop - endfacet - facet normal 0.719973 -0.694002 0 - outer loop - vertex 19.0386 -23.7798 0 - vertex 20.2954 -22.4759 -3 - vertex 20.2954 -22.4759 0 - endloop - endfacet - facet normal 0.719973 -0.694002 0 - outer loop - vertex 20.2954 -22.4759 -3 - vertex 19.0386 -23.7798 0 - vertex 19.0386 -23.7798 -3 - endloop - endfacet - facet normal 0.636055 -0.771644 0 - outer loop - vertex 20.2954 -22.4759 -3 - vertex 21.6367 -21.3703 0 - vertex 20.2954 -22.4759 0 - endloop - endfacet - facet normal 0.636055 -0.771644 0 - outer loop - vertex 21.6367 -21.3703 0 - vertex 20.2954 -22.4759 -3 - vertex 21.6367 -21.3703 -3 - endloop - endfacet - facet normal 0.538257 -0.842781 0 - outer loop - vertex 21.6367 -21.3703 -3 - vertex 23.0737 -20.4525 0 - vertex 21.6367 -21.3703 0 - endloop - endfacet - facet normal 0.538257 -0.842781 0 - outer loop - vertex 23.0737 -20.4525 0 - vertex 21.6367 -21.3703 -3 - vertex 23.0737 -20.4525 -3 - endloop - endfacet - facet normal 0.404347 -0.914606 0 - outer loop - vertex 23.0737 -20.4525 -3 - vertex 25.4359 -19.4082 0 - vertex 23.0737 -20.4525 0 - endloop - endfacet - facet normal 0.404347 -0.914606 0 - outer loop - vertex 25.4359 -19.4082 0 - vertex 23.0737 -20.4525 -3 - vertex 25.4359 -19.4082 -3 - endloop - endfacet - facet normal 0.182814 -0.983148 0 - outer loop - vertex 25.4359 -19.4082 -3 - vertex 26.5413 -19.2026 0 - vertex 25.4359 -19.4082 0 - endloop - endfacet - facet normal 0.182814 -0.983148 0 - outer loop - vertex 26.5413 -19.2026 0 - vertex 25.4359 -19.4082 -3 - vertex 26.5413 -19.2026 -3 - endloop - endfacet - facet normal 0.0452162 -0.998977 0 - outer loop - vertex 26.5413 -19.2026 -3 - vertex 27.8281 -19.1444 0 - vertex 26.5413 -19.2026 0 - endloop - endfacet - facet normal 0.0452162 -0.998977 0 - outer loop - vertex 27.8281 -19.1444 0 - vertex 26.5413 -19.2026 -3 - vertex 27.8281 -19.1444 -3 - endloop - endfacet - facet normal -0.0736221 -0.997286 0 - outer loop - vertex 27.8281 -19.1444 -3 - vertex 28.989 -19.2301 0 - vertex 27.8281 -19.1444 0 - endloop - endfacet - facet normal -0.0736221 -0.997286 -0 - outer loop - vertex 28.989 -19.2301 0 - vertex 27.8281 -19.1444 -3 - vertex 28.989 -19.2301 -3 - endloop - endfacet - facet normal -0.382628 0.923903 0 - outer loop - vertex 24.8153 -21.9586 -3 - vertex 23.7526 -22.3987 0 - vertex 24.8153 -21.9586 0 - endloop - endfacet - facet normal -0.382628 0.923903 0 - outer loop - vertex 23.7526 -22.3987 0 - vertex 24.8153 -21.9586 -3 - vertex 23.7526 -22.3987 -3 - endloop - endfacet - facet normal -0.656055 0.754713 0 - outer loop - vertex 23.7526 -22.3987 -3 - vertex 22.6861 -23.3258 0 - vertex 23.7526 -22.3987 0 - endloop - endfacet - facet normal -0.656055 0.754713 0 - outer loop - vertex 22.6861 -23.3258 0 - vertex 23.7526 -22.3987 -3 - vertex 22.6861 -23.3258 -3 - endloop - endfacet - facet normal -0.77183 0.635829 0 - outer loop - vertex 21.6183 -24.6221 -3 - vertex 22.6861 -23.3258 0 - vertex 22.6861 -23.3258 -3 - endloop - endfacet - facet normal -0.77183 0.635829 0 - outer loop - vertex 22.6861 -23.3258 0 - vertex 21.6183 -24.6221 -3 - vertex 21.6183 -24.6221 0 - endloop - endfacet - facet normal -0.0699516 -0.99755 0 - outer loop - vertex 21.6183 -24.6221 -3 - vertex 24.4233 -24.8188 0 - vertex 21.6183 -24.6221 0 - endloop - endfacet - facet normal -0.0699516 -0.99755 -0 - outer loop - vertex 24.4233 -24.8188 0 - vertex 21.6183 -24.6221 -3 - vertex 24.4233 -24.8188 -3 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 24.4233 -24.8188 -3 - vertex 27.2283 -24.8188 0 - vertex 24.4233 -24.8188 0 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex 27.2283 -24.8188 0 - vertex 24.4233 -24.8188 -3 - vertex 27.2283 -24.8188 -3 - endloop - endfacet - facet normal 0.986418 -0.164252 0 - outer loop - vertex 27.2283 -24.8188 0 - vertex 27.3613 -24.0204 -3 - vertex 27.3613 -24.0204 0 - endloop - endfacet - facet normal 0.986418 -0.164252 0 - outer loop - vertex 27.3613 -24.0204 -3 - vertex 27.2283 -24.8188 0 - vertex 27.2283 -24.8188 -3 - endloop - endfacet - facet normal 0.999989 -0.00473466 0 - outer loop - vertex 27.3613 -24.0204 0 - vertex 27.3668 -22.8574 -3 - vertex 27.3668 -22.8574 0 - endloop - endfacet - facet normal 0.999989 -0.00473466 0 - outer loop - vertex 27.3668 -22.8574 -3 - vertex 27.3613 -24.0204 0 - vertex 27.3613 -24.0204 -3 - endloop - endfacet - facet normal 0.863473 0.504395 0 - outer loop - vertex 27.3668 -22.8574 0 - vertex 26.9354 -22.1189 -3 - vertex 26.9354 -22.1189 0 - endloop - endfacet - facet normal 0.863473 0.504395 0 - outer loop - vertex 26.9354 -22.1189 -3 - vertex 27.3668 -22.8574 0 - vertex 27.3668 -22.8574 -3 - endloop - endfacet - facet normal 0.334224 0.942494 -0 - outer loop - vertex 26.9354 -22.1189 -3 - vertex 26.0804 -21.8157 0 - vertex 26.9354 -22.1189 0 - endloop - endfacet - facet normal 0.334224 0.942494 0 - outer loop - vertex 26.0804 -21.8157 0 - vertex 26.9354 -22.1189 -3 - vertex 26.0804 -21.8157 -3 - endloop - endfacet - facet normal -0.112261 0.993679 0 - outer loop - vertex 26.0804 -21.8157 -3 - vertex 24.8153 -21.9586 0 - vertex 26.0804 -21.8157 0 - endloop - endfacet - facet normal -0.112261 0.993679 0 - outer loop - vertex 24.8153 -21.9586 0 - vertex 26.0804 -21.8157 -3 - vertex 24.8153 -21.9586 -3 - endloop - endfacet - facet normal -0.0126654 -0.99992 0 - outer loop - vertex -27.1868 -11.3523 -3 - vertex -17.7993 -11.4712 0 - vertex -27.1868 -11.3523 0 - endloop - endfacet - facet normal -0.0126654 -0.99992 -0 - outer loop - vertex -17.7993 -11.4712 0 - vertex -27.1868 -11.3523 -3 - vertex -17.7993 -11.4712 -3 - endloop - endfacet - facet normal -0.303355 -0.952878 0 - outer loop - vertex -17.7993 -11.4712 -3 - vertex -17.4385 -11.5861 0 - vertex -17.7993 -11.4712 0 - endloop - endfacet - facet normal -0.303355 -0.952878 -0 - outer loop - vertex -17.4385 -11.5861 0 - vertex -17.7993 -11.4712 -3 - vertex -17.4385 -11.5861 -3 - endloop - endfacet - facet normal -0.999899 0.0142188 0 - outer loop - vertex -17.4456 -12.0833 -3 - vertex -17.4385 -11.5861 0 - vertex -17.4385 -11.5861 -3 - endloop - endfacet - facet normal -0.999899 0.0142188 0 - outer loop - vertex -17.4385 -11.5861 0 - vertex -17.4456 -12.0833 -3 - vertex -17.4456 -12.0833 0 - endloop - endfacet - facet normal -0.933863 0.35763 0 - outer loop - vertex -19.3785 -17.1305 -3 - vertex -17.4456 -12.0833 0 - vertex -17.4456 -12.0833 -3 - endloop - endfacet - facet normal -0.933863 0.35763 0 - outer loop - vertex -17.4456 -12.0833 0 - vertex -19.3785 -17.1305 -3 - vertex -19.3785 -17.1305 0 - endloop - endfacet - facet normal -0.830148 0.557543 0 - outer loop - vertex -19.683 -17.584 -3 - vertex -19.3785 -17.1305 0 - vertex -19.3785 -17.1305 -3 - endloop - endfacet - facet normal -0.830148 0.557543 0 - outer loop - vertex -19.3785 -17.1305 0 - vertex -19.683 -17.584 -3 - vertex -19.683 -17.584 0 - endloop - endfacet - facet normal -0.617609 0.786485 0 - outer loop - vertex -19.683 -17.584 -3 - vertex -20.1126 -17.9213 0 - vertex -19.683 -17.584 0 - endloop - endfacet - facet normal -0.617609 0.786485 0 - outer loop - vertex -20.1126 -17.9213 0 - vertex -19.683 -17.584 -3 - vertex -20.1126 -17.9213 -3 - endloop - endfacet - facet normal -0.353642 0.935381 0 - outer loop - vertex -20.1126 -17.9213 -3 - vertex -20.6062 -18.108 0 - vertex -20.1126 -17.9213 0 - endloop - endfacet - facet normal -0.353642 0.935381 0 - outer loop - vertex -20.6062 -18.108 0 - vertex -20.1126 -17.9213 -3 - vertex -20.6062 -18.108 -3 - endloop - endfacet - facet normal -0.00259595 0.999997 0 - outer loop - vertex -20.6062 -18.108 -3 - vertex -21.1029 -18.1093 0 - vertex -20.6062 -18.108 0 - endloop - endfacet - facet normal -0.00259595 0.999997 0 - outer loop - vertex -21.1029 -18.1093 0 - vertex -20.6062 -18.108 -3 - vertex -21.1029 -18.1093 -3 - endloop - endfacet - facet normal 0.306009 0.952029 -0 - outer loop - vertex -21.1029 -18.1093 -3 - vertex -21.3898 -18.0171 0 - vertex -21.1029 -18.1093 0 - endloop - endfacet - facet normal 0.306009 0.952029 0 - outer loop - vertex -21.3898 -18.0171 0 - vertex -21.1029 -18.1093 -3 - vertex -21.3898 -18.0171 -3 - endloop - endfacet - facet normal 0.820593 0.571513 0 - outer loop - vertex -21.3898 -18.0171 0 - vertex -21.538 -17.8042 -3 - vertex -21.538 -17.8042 0 - endloop - endfacet - facet normal 0.820593 0.571513 0 - outer loop - vertex -21.538 -17.8042 -3 - vertex -21.3898 -18.0171 0 - vertex -21.3898 -18.0171 -3 - endloop - endfacet - facet normal 0.999415 0.0341969 0 - outer loop - vertex -21.538 -17.8042 0 - vertex -21.5846 -16.4428 -3 - vertex -21.5846 -16.4428 0 - endloop - endfacet - facet normal 0.999415 0.0341969 0 - outer loop - vertex -21.5846 -16.4428 -3 - vertex -21.538 -17.8042 0 - vertex -21.538 -17.8042 -3 - endloop - endfacet - facet normal 0.999208 0.039804 0 - outer loop - vertex -21.5846 -16.4428 0 - vertex -21.6401 -15.0493 -3 - vertex -21.6401 -15.0493 0 - endloop - endfacet - facet normal 0.999208 0.039804 0 - outer loop - vertex -21.6401 -15.0493 -3 - vertex -21.5846 -16.4428 0 - vertex -21.5846 -16.4428 -3 - endloop - endfacet - facet normal 0.85074 0.525587 0 - outer loop - vertex -21.6401 -15.0493 0 - vertex -21.8106 -14.7733 -3 - vertex -21.8106 -14.7733 0 - endloop - endfacet - facet normal 0.85074 0.525587 0 - outer loop - vertex -21.8106 -14.7733 -3 - vertex -21.6401 -15.0493 0 - vertex -21.6401 -15.0493 -3 - endloop - endfacet - facet normal 0.546243 0.837626 -0 - outer loop - vertex -21.8106 -14.7733 -3 - vertex -22.1413 -14.5577 0 - vertex -21.8106 -14.7733 0 - endloop - endfacet - facet normal 0.546243 0.837626 0 - outer loop - vertex -22.1413 -14.5577 0 - vertex -21.8106 -14.7733 -3 - vertex -22.1413 -14.5577 -3 - endloop - endfacet - facet normal 0.21941 0.975633 -0 - outer loop - vertex -22.1413 -14.5577 -3 - vertex -23.3419 -14.2877 0 - vertex -22.1413 -14.5577 0 - endloop - endfacet - facet normal 0.21941 0.975633 0 - outer loop - vertex -23.3419 -14.2877 0 - vertex -22.1413 -14.5577 -3 - vertex -23.3419 -14.2877 -3 - endloop - endfacet - facet normal 0.0439983 0.999032 -0 - outer loop - vertex -23.3419 -14.2877 -3 - vertex -26.1195 -14.1654 0 - vertex -23.3419 -14.2877 0 - endloop - endfacet - facet normal 0.0439983 0.999032 0 - outer loop - vertex -26.1195 -14.1654 0 - vertex -23.3419 -14.2877 -3 - vertex -26.1195 -14.1654 -3 - endloop - endfacet - facet normal -0.00734919 0.999973 0 - outer loop - vertex -26.1195 -14.1654 -3 - vertex -29.5608 -14.1906 0 - vertex -26.1195 -14.1654 0 - endloop - endfacet - facet normal -0.00734919 0.999973 0 - outer loop - vertex -29.5608 -14.1906 0 - vertex -26.1195 -14.1654 -3 - vertex -29.5608 -14.1906 -3 - endloop - endfacet - facet normal -0.196359 0.980532 0 - outer loop - vertex -29.5608 -14.1906 -3 - vertex -30.2116 -14.321 0 - vertex -29.5608 -14.1906 0 - endloop - endfacet - facet normal -0.196359 0.980532 0 - outer loop - vertex -30.2116 -14.321 0 - vertex -29.5608 -14.1906 -3 - vertex -30.2116 -14.321 -3 - endloop - endfacet - facet normal -0.792981 0.609246 0 - outer loop - vertex -30.3887 -14.5514 -3 - vertex -30.2116 -14.321 0 - vertex -30.2116 -14.321 -3 - endloop - endfacet - facet normal -0.792981 0.609246 0 - outer loop - vertex -30.2116 -14.321 0 - vertex -30.3887 -14.5514 -3 - vertex -30.3887 -14.5514 0 - endloop - endfacet - facet normal -0.912409 0.409279 0 - outer loop - vertex -30.8809 -15.6487 -3 - vertex -30.3887 -14.5514 0 - vertex -30.3887 -14.5514 -3 - endloop - endfacet - facet normal -0.912409 0.409279 0 - outer loop - vertex -30.3887 -14.5514 0 - vertex -30.8809 -15.6487 -3 - vertex -30.8809 -15.6487 0 - endloop - endfacet - facet normal -0.91465 0.404247 0 - outer loop - vertex -32.1593 -18.5412 -3 - vertex -30.8809 -15.6487 0 - vertex -30.8809 -15.6487 -3 - endloop - endfacet - facet normal -0.91465 0.404247 0 - outer loop - vertex -30.8809 -15.6487 0 - vertex -32.1593 -18.5412 -3 - vertex -32.1593 -18.5412 0 - endloop - endfacet - facet normal -0.929897 0.36782 0 - outer loop - vertex -33.3019 -21.4299 -3 - vertex -32.1593 -18.5412 0 - vertex -32.1593 -18.5412 -3 - endloop - endfacet - facet normal -0.929897 0.36782 0 - outer loop - vertex -32.1593 -18.5412 0 - vertex -33.3019 -21.4299 -3 - vertex -33.3019 -21.4299 0 - endloop - endfacet - facet normal -0.949218 0.314618 0 - outer loop - vertex -33.5147 -22.0719 -3 - vertex -33.3019 -21.4299 0 - vertex -33.3019 -21.4299 -3 - endloop - endfacet - facet normal -0.949218 0.314618 0 - outer loop - vertex -33.3019 -21.4299 0 - vertex -33.5147 -22.0719 -3 - vertex -33.5147 -22.0719 0 - endloop - endfacet - facet normal -0.877443 -0.47968 0 - outer loop - vertex -33.3295 -22.4108 -3 - vertex -33.5147 -22.0719 0 - vertex -33.5147 -22.0719 -3 - endloop - endfacet - facet normal -0.877443 -0.47968 0 - outer loop - vertex -33.5147 -22.0719 0 - vertex -33.3295 -22.4108 -3 - vertex -33.3295 -22.4108 0 - endloop - endfacet - facet normal -0.175573 -0.984466 0 - outer loop - vertex -33.3295 -22.4108 -3 - vertex -32.5249 -22.5543 0 - vertex -33.3295 -22.4108 0 - endloop - endfacet - facet normal -0.175573 -0.984466 -0 - outer loop - vertex -32.5249 -22.5543 0 - vertex -33.3295 -22.4108 -3 - vertex -32.5249 -22.5543 -3 - endloop - endfacet - facet normal -0.0340039 -0.999422 0 - outer loop - vertex -32.5249 -22.5543 -3 - vertex -30.8797 -22.6102 0 - vertex -32.5249 -22.5543 0 - endloop - endfacet - facet normal -0.0340039 -0.999422 -0 - outer loop - vertex -30.8797 -22.6102 0 - vertex -32.5249 -22.5543 -3 - vertex -30.8797 -22.6102 -3 - endloop - endfacet - facet normal 0.0362533 -0.999343 0 - outer loop - vertex -30.8797 -22.6102 -3 - vertex -28.6031 -22.5277 0 - vertex -30.8797 -22.6102 0 - endloop - endfacet - facet normal 0.0362533 -0.999343 0 - outer loop - vertex -28.6031 -22.5277 0 - vertex -30.8797 -22.6102 -3 - vertex -28.6031 -22.5277 -3 - endloop - endfacet - facet normal 0.242378 -0.970182 0 - outer loop - vertex -28.6031 -22.5277 -3 - vertex -26.9351 -22.1109 0 - vertex -28.6031 -22.5277 0 - endloop - endfacet - facet normal 0.242378 -0.970182 0 - outer loop - vertex -26.9351 -22.1109 0 - vertex -28.6031 -22.5277 -3 - vertex -26.9351 -22.1109 -3 - endloop - endfacet - facet normal 0.555939 -0.831223 0 - outer loop - vertex -26.9351 -22.1109 -3 - vertex -25.7001 -21.2849 0 - vertex -26.9351 -22.1109 0 - endloop - endfacet - facet normal 0.555939 -0.831223 0 - outer loop - vertex -25.7001 -21.2849 0 - vertex -26.9351 -22.1109 -3 - vertex -25.7001 -21.2849 -3 - endloop - endfacet - facet normal 0.801538 -0.597944 0 - outer loop - vertex -25.7001 -21.2849 0 - vertex -24.7225 -19.9745 -3 - vertex -24.7225 -19.9745 0 - endloop - endfacet - facet normal 0.801538 -0.597944 0 - outer loop - vertex -24.7225 -19.9745 -3 - vertex -25.7001 -21.2849 0 - vertex -25.7001 -21.2849 -3 - endloop - endfacet - facet normal 0.817601 -0.575785 0 - outer loop - vertex -24.7225 -19.9745 0 - vertex -24.1111 -19.1062 -3 - vertex -24.1111 -19.1062 0 - endloop - endfacet - facet normal 0.817601 -0.575785 0 - outer loop - vertex -24.1111 -19.1062 -3 - vertex -24.7225 -19.9745 0 - vertex -24.7225 -19.9745 -3 - endloop - endfacet - facet normal 0.293726 -0.95589 0 - outer loop - vertex -24.1111 -19.1062 -3 - vertex -23.4908 -18.9156 0 - vertex -24.1111 -19.1062 0 - endloop - endfacet - facet normal 0.293726 -0.95589 0 - outer loop - vertex -23.4908 -18.9156 0 - vertex -24.1111 -19.1062 -3 - vertex -23.4908 -18.9156 -3 - endloop - endfacet - facet normal -0.145773 -0.989318 0 - outer loop - vertex -23.4908 -18.9156 -3 - vertex -22.8641 -19.008 0 - vertex -23.4908 -18.9156 0 - endloop - endfacet - facet normal -0.145773 -0.989318 -0 - outer loop - vertex -22.8641 -19.008 0 - vertex -23.4908 -18.9156 -3 - vertex -22.8641 -19.008 -3 - endloop - endfacet - facet normal -0.802531 -0.59661 0 - outer loop - vertex -22.6057 -19.3555 -3 - vertex -22.8641 -19.008 0 - vertex -22.8641 -19.008 -3 - endloop - endfacet - facet normal -0.802531 -0.59661 0 - outer loop - vertex -22.8641 -19.008 0 - vertex -22.6057 -19.3555 -3 - vertex -22.6057 -19.3555 0 - endloop - endfacet - facet normal -0.991425 0.130676 0 - outer loop - vertex -22.6991 -20.0641 -3 - vertex -22.6057 -19.3555 0 - vertex -22.6057 -19.3555 -3 - endloop - endfacet - facet normal -0.991425 0.130676 0 - outer loop - vertex -22.6057 -19.3555 0 - vertex -22.6991 -20.0641 -3 - vertex -22.6991 -20.0641 0 - endloop - endfacet - facet normal -0.939482 0.342598 0 - outer loop - vertex -23.1278 -21.2395 -3 - vertex -22.6991 -20.0641 0 - vertex -22.6991 -20.0641 -3 - endloop - endfacet - facet normal -0.939482 0.342598 0 - outer loop - vertex -22.6991 -20.0641 0 - vertex -23.1278 -21.2395 -3 - vertex -23.1278 -21.2395 0 - endloop - endfacet - facet normal -0.926121 0.377226 0 - outer loop - vertex -24.4076 -24.3815 -3 - vertex -23.1278 -21.2395 0 - vertex -23.1278 -21.2395 -3 - endloop - endfacet - facet normal -0.926121 0.377226 0 - outer loop - vertex -23.1278 -21.2395 0 - vertex -24.4076 -24.3815 -3 - vertex -24.4076 -24.3815 0 - endloop - endfacet - facet normal -0.921607 0.388125 0 - outer loop - vertex -25.4741 -26.9141 -3 - vertex -24.4076 -24.3815 0 - vertex -24.4076 -24.3815 -3 - endloop - endfacet - facet normal -0.921607 0.388125 0 - outer loop - vertex -24.4076 -24.3815 0 - vertex -25.4741 -26.9141 -3 - vertex -25.4741 -26.9141 0 - endloop - endfacet - facet normal -0.886525 0.462682 0 - outer loop - vertex -26.2338 -28.3696 -3 - vertex -25.4741 -26.9141 0 - vertex -25.4741 -26.9141 -3 - endloop - endfacet - facet normal -0.886525 0.462682 0 - outer loop - vertex -25.4741 -26.9141 0 - vertex -26.2338 -28.3696 -3 - vertex -26.2338 -28.3696 0 - endloop - endfacet - facet normal -0.719187 0.694816 0 - outer loop - vertex -26.8752 -29.0336 -3 - vertex -26.2338 -28.3696 0 - vertex -26.2338 -28.3696 -3 - endloop - endfacet - facet normal -0.719187 0.694816 0 - outer loop - vertex -26.2338 -28.3696 0 - vertex -26.8752 -29.0336 -3 - vertex -26.8752 -29.0336 0 - endloop - endfacet - facet normal -0.216473 0.976289 0 - outer loop - vertex -26.8752 -29.0336 -3 - vertex -27.5872 -29.1914 0 - vertex -26.8752 -29.0336 0 - endloop - endfacet - facet normal -0.216473 0.976289 0 - outer loop - vertex -27.5872 -29.1914 0 - vertex -26.8752 -29.0336 -3 - vertex -27.5872 -29.1914 -3 - endloop - endfacet - facet normal 0.155401 0.987851 -0 - outer loop - vertex -27.5872 -29.1914 -3 - vertex -28.1878 -29.097 0 - vertex -27.5872 -29.1914 0 - endloop - endfacet - facet normal 0.155401 0.987851 0 - outer loop - vertex -28.1878 -29.097 0 - vertex -27.5872 -29.1914 -3 - vertex -28.1878 -29.097 -3 - endloop - endfacet - facet normal 0.99998 -0.00638056 0 - outer loop - vertex -28.1878 -29.097 0 - vertex -28.1838 -28.4809 -3 - vertex -28.1838 -28.4809 0 - endloop - endfacet - facet normal 0.99998 -0.00638056 0 - outer loop - vertex -28.1838 -28.4809 -3 - vertex -28.1878 -29.097 0 - vertex -28.1878 -29.097 -3 - endloop - endfacet - facet normal 0.992864 -0.119255 0 - outer loop - vertex -28.1838 -28.4809 0 - vertex -27.9105 -26.2055 -3 - vertex -27.9105 -26.2055 0 - endloop - endfacet - facet normal 0.992864 -0.119255 0 - outer loop - vertex -27.9105 -26.2055 -3 - vertex -28.1838 -28.4809 0 - vertex -28.1838 -28.4809 -3 - endloop - endfacet - facet normal 0.858031 0.513598 0 - outer loop - vertex -27.9105 -26.2055 0 - vertex -28.1036 -25.8829 -3 - vertex -28.1036 -25.8829 0 - endloop - endfacet - facet normal 0.858031 0.513598 0 - outer loop - vertex -28.1036 -25.8829 -3 - vertex -27.9105 -26.2055 0 - vertex -27.9105 -26.2055 -3 - endloop - endfacet - facet normal 0.343726 0.93907 -0 - outer loop - vertex -28.1036 -25.8829 -3 - vertex -28.5713 -25.7117 0 - vertex -28.1036 -25.8829 0 - endloop - endfacet - facet normal 0.343726 0.93907 0 - outer loop - vertex -28.5713 -25.7117 0 - vertex -28.1036 -25.8829 -3 - vertex -28.5713 -25.7117 -3 - endloop - endfacet - facet normal 0.0659122 0.997825 -0 - outer loop - vertex -28.5713 -25.7117 -3 - vertex -32.142 -25.4759 0 - vertex -28.5713 -25.7117 0 - endloop - endfacet - facet normal 0.0659122 0.997825 0 - outer loop - vertex -32.142 -25.4759 0 - vertex -28.5713 -25.7117 -3 - vertex -32.142 -25.4759 -3 - endloop - endfacet - facet normal 0.000432103 1 -0 - outer loop - vertex -32.142 -25.4759 -3 - vertex -34.9626 -25.4747 0 - vertex -32.142 -25.4759 0 - endloop - endfacet - facet normal 0.000432103 1 0 - outer loop - vertex -34.9626 -25.4747 0 - vertex -32.142 -25.4759 -3 - vertex -34.9626 -25.4747 -3 - endloop - endfacet - facet normal -0.910935 0.41255 0 - outer loop - vertex -35.4824 -26.6225 -3 - vertex -34.9626 -25.4747 0 - vertex -34.9626 -25.4747 -3 - endloop - endfacet - facet normal -0.910935 0.41255 0 - outer loop - vertex -34.9626 -25.4747 0 - vertex -35.4824 -26.6225 -3 - vertex -35.4824 -26.6225 0 - endloop - endfacet - facet normal -0.92531 0.379212 0 - outer loop - vertex -38.7331 -34.5543 -3 - vertex -35.4824 -26.6225 0 - vertex -35.4824 -26.6225 -3 - endloop - endfacet - facet normal -0.92531 0.379212 0 - outer loop - vertex -35.4824 -26.6225 0 - vertex -38.7331 -34.5543 -3 - vertex -38.7331 -34.5543 0 - endloop - endfacet - facet normal -0.798774 -0.601632 0 - outer loop - vertex -38.4261 -34.9619 -3 - vertex -38.7331 -34.5543 0 - vertex -38.7331 -34.5543 -3 - endloop - endfacet - facet normal -0.798774 -0.601632 0 - outer loop - vertex -38.7331 -34.5543 0 - vertex -38.4261 -34.9619 -3 - vertex -38.4261 -34.9619 0 - endloop - endfacet - facet normal -0.0360382 -0.99935 0 - outer loop - vertex -38.4261 -34.9619 -3 - vertex -35.0529 -35.0835 0 - vertex -38.4261 -34.9619 0 - endloop - endfacet - facet normal -0.0360382 -0.99935 -0 - outer loop - vertex -35.0529 -35.0835 0 - vertex -38.4261 -34.9619 -3 - vertex -35.0529 -35.0835 -3 - endloop - endfacet - facet normal 0.0608671 -0.998146 0 - outer loop - vertex -35.0529 -35.0835 -3 - vertex -31.3644 -34.8586 0 - vertex -35.0529 -35.0835 0 - endloop - endfacet - facet normal 0.0608671 -0.998146 0 - outer loop - vertex -31.3644 -34.8586 0 - vertex -35.0529 -35.0835 -3 - vertex -31.3644 -34.8586 -3 - endloop - endfacet - facet normal 0.33651 -0.94168 0 - outer loop - vertex -31.3644 -34.8586 -3 - vertex -30.2578 -34.4631 0 - vertex -31.3644 -34.8586 0 - endloop - endfacet - facet normal 0.33651 -0.94168 0 - outer loop - vertex -30.2578 -34.4631 0 - vertex -31.3644 -34.8586 -3 - vertex -30.2578 -34.4631 -3 - endloop - endfacet - facet normal 0.467106 -0.884201 0 - outer loop - vertex -30.2578 -34.4631 -3 - vertex -29.0969 -33.8499 0 - vertex -30.2578 -34.4631 0 - endloop - endfacet - facet normal 0.467106 -0.884201 0 - outer loop - vertex -29.0969 -33.8499 0 - vertex -30.2578 -34.4631 -3 - vertex -29.0969 -33.8499 -3 - endloop - endfacet - facet normal 0.610499 -0.792017 0 - outer loop - vertex -29.0969 -33.8499 -3 - vertex -26.8283 -32.1012 0 - vertex -29.0969 -33.8499 0 - endloop - endfacet - facet normal 0.610499 -0.792017 0 - outer loop - vertex -26.8283 -32.1012 0 - vertex -29.0969 -33.8499 -3 - vertex -26.8283 -32.1012 -3 - endloop - endfacet - facet normal 0.674561 -0.738219 0 - outer loop - vertex -26.8283 -32.1012 -3 - vertex -24.8569 -30.2998 0 - vertex -26.8283 -32.1012 0 - endloop - endfacet - facet normal 0.674561 -0.738219 0 - outer loop - vertex -24.8569 -30.2998 0 - vertex -26.8283 -32.1012 -3 - vertex -24.8569 -30.2998 -3 - endloop - endfacet - facet normal 0.349743 -0.936846 0 - outer loop - vertex -24.8569 -30.2998 -3 - vertex -24.4667 -30.1541 0 - vertex -24.8569 -30.2998 0 - endloop - endfacet - facet normal 0.349743 -0.936846 0 - outer loop - vertex -24.4667 -30.1541 0 - vertex -24.8569 -30.2998 -3 - vertex -24.4667 -30.1541 -3 - endloop - endfacet - facet normal -0.235678 -0.971831 0 - outer loop - vertex -24.4667 -30.1541 -3 - vertex -24.0819 -30.2475 0 - vertex -24.4667 -30.1541 0 - endloop - endfacet - facet normal -0.235678 -0.971831 -0 - outer loop - vertex -24.0819 -30.2475 0 - vertex -24.4667 -30.1541 -3 - vertex -24.0819 -30.2475 -3 - endloop - endfacet - facet normal -0.453986 -0.891009 0 - outer loop - vertex -24.0819 -30.2475 -3 - vertex -23.655 -30.4649 0 - vertex -24.0819 -30.2475 0 - endloop - endfacet - facet normal -0.453986 -0.891009 -0 - outer loop - vertex -23.655 -30.4649 0 - vertex -24.0819 -30.2475 -3 - vertex -23.655 -30.4649 -3 - endloop - endfacet - facet normal -0.79441 -0.607382 0 - outer loop - vertex -23.4462 -30.738 -3 - vertex -23.655 -30.4649 0 - vertex -23.655 -30.4649 -3 - endloop - endfacet - facet normal -0.79441 -0.607382 0 - outer loop - vertex -23.655 -30.4649 0 - vertex -23.4462 -30.738 -3 - vertex -23.4462 -30.738 0 - endloop - endfacet - facet normal -0.917968 0.396655 0 - outer loop - vertex -23.8149 -31.5911 -3 - vertex -23.4462 -30.738 0 - vertex -23.4462 -30.738 -3 - endloop - endfacet - facet normal -0.917968 0.396655 0 - outer loop - vertex -23.4462 -30.738 0 - vertex -23.8149 -31.5911 -3 - vertex -23.8149 -31.5911 0 - endloop - endfacet - facet normal -0.860785 0.508968 0 - outer loop - vertex -24.7956 -33.2498 -3 - vertex -23.8149 -31.5911 0 - vertex -23.8149 -31.5911 -3 - endloop - endfacet - facet normal -0.860785 0.508968 0 - outer loop - vertex -23.8149 -31.5911 0 - vertex -24.7956 -33.2498 -3 - vertex -24.7956 -33.2498 0 - endloop - endfacet - facet normal -0.825216 0.564817 0 - outer loop - vertex -27.2791 -36.8782 -3 - vertex -24.7956 -33.2498 0 - vertex -24.7956 -33.2498 -3 - endloop - endfacet - facet normal -0.825216 0.564817 0 - outer loop - vertex -24.7956 -33.2498 0 - vertex -27.2791 -36.8782 -3 - vertex -27.2791 -36.8782 0 - endloop - endfacet - facet normal -0.788011 0.615661 0 - outer loop - vertex -28.2835 -38.1638 -3 - vertex -27.2791 -36.8782 0 - vertex -27.2791 -36.8782 -3 - endloop - endfacet - facet normal -0.788011 0.615661 0 - outer loop - vertex -27.2791 -36.8782 0 - vertex -28.2835 -38.1638 -3 - vertex -28.2835 -38.1638 0 - endloop - endfacet - facet normal 0.0033546 0.999994 -0 - outer loop - vertex -28.2835 -38.1638 -3 - vertex -37.632 -38.1325 0 - vertex -28.2835 -38.1638 0 - endloop - endfacet - facet normal 0.0033546 0.999994 0 - outer loop - vertex -37.632 -38.1325 0 - vertex -28.2835 -38.1638 -3 - vertex -37.632 -38.1325 -3 - endloop - endfacet - facet normal 0.018075 0.999837 -0 - outer loop - vertex -37.632 -38.1325 -3 - vertex -47.4646 -37.9547 0 - vertex -37.632 -38.1325 0 - endloop - endfacet - facet normal 0.018075 0.999837 0 - outer loop - vertex -47.4646 -37.9547 0 - vertex -37.632 -38.1325 -3 - vertex -47.4646 -37.9547 -3 - endloop - endfacet - facet normal 0.462743 0.886493 -0 - outer loop - vertex -47.4646 -37.9547 -3 - vertex -47.8161 -37.7712 0 - vertex -47.4646 -37.9547 0 - endloop - endfacet - facet normal 0.462743 0.886493 0 - outer loop - vertex -47.8161 -37.7712 0 - vertex -47.4646 -37.9547 -3 - vertex -47.8161 -37.7712 -3 - endloop - endfacet - facet normal 0.836367 0.54817 0 - outer loop - vertex -47.8161 -37.7712 0 - vertex -47.9875 -37.5097 -3 - vertex -47.9875 -37.5097 0 - endloop - endfacet - facet normal 0.836367 0.54817 0 - outer loop - vertex -47.9875 -37.5097 -3 - vertex -47.8161 -37.7712 0 - vertex -47.8161 -37.7712 -3 - endloop - endfacet - facet normal 0.980441 -0.196811 0 - outer loop - vertex -47.9875 -37.5097 0 - vertex -47.8577 -36.863 -3 - vertex -47.8577 -36.863 0 - endloop - endfacet - facet normal 0.980441 -0.196811 0 - outer loop - vertex -47.8577 -36.863 -3 - vertex -47.9875 -37.5097 0 - vertex -47.9875 -37.5097 -3 - endloop - endfacet - facet normal 0.695658 -0.718373 0 - outer loop - vertex -47.8577 -36.863 -3 - vertex -47.2102 -36.2359 0 - vertex -47.8577 -36.863 0 - endloop - endfacet - facet normal 0.695658 -0.718373 0 - outer loop - vertex -47.2102 -36.2359 0 - vertex -47.8577 -36.863 -3 - vertex -47.2102 -36.2359 -3 - endloop - endfacet - facet normal 0.350904 -0.936412 0 - outer loop - vertex -47.2102 -36.2359 -3 - vertex -46.1801 -35.8499 0 - vertex -47.2102 -36.2359 0 - endloop - endfacet - facet normal 0.350904 -0.936412 0 - outer loop - vertex -46.1801 -35.8499 0 - vertex -47.2102 -36.2359 -3 - vertex -46.1801 -35.8499 -3 - endloop - endfacet - facet normal 0.289535 -0.957168 0 - outer loop - vertex -46.1801 -35.8499 -3 - vertex -45.0296 -35.5019 0 - vertex -46.1801 -35.8499 0 - endloop - endfacet - facet normal 0.289535 -0.957168 0 - outer loop - vertex -45.0296 -35.5019 0 - vertex -46.1801 -35.8499 -3 - vertex -45.0296 -35.5019 -3 - endloop - endfacet - facet normal 0.646662 -0.762777 0 - outer loop - vertex -45.0296 -35.5019 -3 - vertex -44.1198 -34.7306 0 - vertex -45.0296 -35.5019 0 - endloop - endfacet - facet normal 0.646662 -0.762777 0 - outer loop - vertex -44.1198 -34.7306 0 - vertex -45.0296 -35.5019 -3 - vertex -44.1198 -34.7306 -3 - endloop - endfacet - facet normal 0.856952 -0.515395 0 - outer loop - vertex -44.1198 -34.7306 0 - vertex -43.2543 -33.2915 -3 - vertex -43.2543 -33.2915 0 - endloop - endfacet - facet normal 0.856952 -0.515395 0 - outer loop - vertex -43.2543 -33.2915 -3 - vertex -44.1198 -34.7306 0 - vertex -44.1198 -34.7306 -3 - endloop - endfacet - facet normal 0.917761 -0.397133 0 - outer loop - vertex -43.2543 -33.2915 0 - vertex -42.237 -30.9405 -3 - vertex -42.237 -30.9405 0 - endloop - endfacet - facet normal 0.917761 -0.397133 0 - outer loop - vertex -42.237 -30.9405 -3 - vertex -43.2543 -33.2915 0 - vertex -43.2543 -33.2915 -3 - endloop - endfacet - facet normal 0.919921 -0.392104 0 - outer loop - vertex -42.237 -30.9405 0 - vertex -39.9072 -25.4747 -3 - vertex -39.9072 -25.4747 0 - endloop - endfacet - facet normal 0.919921 -0.392104 0 - outer loop - vertex -39.9072 -25.4747 -3 - vertex -42.237 -30.9405 0 - vertex -42.237 -30.9405 -3 - endloop - endfacet - facet normal 0.92143 -0.388544 0 - outer loop - vertex -39.9072 -25.4747 0 - vertex -37.0548 -18.7102 -3 - vertex -37.0548 -18.7102 0 - endloop - endfacet - facet normal 0.92143 -0.388544 0 - outer loop - vertex -37.0548 -18.7102 -3 - vertex -39.9072 -25.4747 0 - vertex -39.9072 -25.4747 -3 - endloop - endfacet - facet normal 0.937894 -0.346922 0 - outer loop - vertex -37.0548 -18.7102 0 - vertex -35.6081 -14.799 -3 - vertex -35.6081 -14.799 0 - endloop - endfacet - facet normal 0.937894 -0.346922 0 - outer loop - vertex -35.6081 -14.799 -3 - vertex -37.0548 -18.7102 0 - vertex -37.0548 -18.7102 -3 - endloop - endfacet - facet normal 0.984127 -0.177463 0 - outer loop - vertex -35.6081 -14.799 0 - vertex -35.4871 -14.1281 -3 - vertex -35.4871 -14.1281 0 - endloop - endfacet - facet normal 0.984127 -0.177463 0 - outer loop - vertex -35.4871 -14.1281 -3 - vertex -35.6081 -14.799 0 - vertex -35.6081 -14.799 -3 - endloop - endfacet - facet normal 0.978316 0.207116 0 - outer loop - vertex -35.4871 -14.1281 0 - vertex -35.5739 -13.718 -3 - vertex -35.5739 -13.718 0 - endloop - endfacet - facet normal 0.978316 0.207116 0 - outer loop - vertex -35.5739 -13.718 -3 - vertex -35.4871 -14.1281 0 - vertex -35.4871 -14.1281 -3 - endloop - endfacet - facet normal 0.525627 0.850715 -0 - outer loop - vertex -35.5739 -13.718 -3 - vertex -35.9073 -13.512 0 - vertex -35.5739 -13.718 0 - endloop - endfacet - facet normal 0.525627 0.850715 0 - outer loop - vertex -35.9073 -13.512 0 - vertex -35.5739 -13.718 -3 - vertex -35.9073 -13.512 -3 - endloop - endfacet - facet normal 0.0947129 0.995505 -0 - outer loop - vertex -35.9073 -13.512 -3 - vertex -36.5262 -13.4531 0 - vertex -35.9073 -13.512 0 - endloop - endfacet - facet normal 0.0947129 0.995505 0 - outer loop - vertex -36.5262 -13.4531 0 - vertex -35.9073 -13.512 -3 - vertex -36.5262 -13.4531 -3 - endloop - endfacet - facet normal 0.264376 0.96442 -0 - outer loop - vertex -36.5262 -13.4531 -3 - vertex -37.2393 -13.2576 0 - vertex -36.5262 -13.4531 0 - endloop - endfacet - facet normal 0.264376 0.96442 0 - outer loop - vertex -37.2393 -13.2576 0 - vertex -36.5262 -13.4531 -3 - vertex -37.2393 -13.2576 -3 - endloop - endfacet - facet normal 0.846268 0.532757 0 - outer loop - vertex -37.2393 -13.2576 0 - vertex -37.5366 -12.7854 -3 - vertex -37.5366 -12.7854 0 - endloop - endfacet - facet normal 0.846268 0.532757 0 - outer loop - vertex -37.5366 -12.7854 -3 - vertex -37.2393 -13.2576 0 - vertex -37.2393 -13.2576 -3 - endloop - endfacet - facet normal 0.972647 -0.232287 0 - outer loop - vertex -37.5366 -12.7854 0 - vertex -37.3951 -12.1929 -3 - vertex -37.3951 -12.1929 0 - endloop - endfacet - facet normal 0.972647 -0.232287 0 - outer loop - vertex -37.3951 -12.1929 -3 - vertex -37.5366 -12.7854 0 - vertex -37.5366 -12.7854 -3 - endloop - endfacet - facet normal 0.678121 -0.73495 0 - outer loop - vertex -37.3951 -12.1929 -3 - vertex -36.792 -11.6364 0 - vertex -37.3951 -12.1929 0 - endloop - endfacet - facet normal 0.678121 -0.73495 0 - outer loop - vertex -36.792 -11.6364 0 - vertex -37.3951 -12.1929 -3 - vertex -36.792 -11.6364 -3 - endloop - endfacet - facet normal 0.33489 -0.942257 0 - outer loop - vertex -36.792 -11.6364 -3 - vertex -36.1936 -11.4238 0 - vertex -36.792 -11.6364 0 - endloop - endfacet - facet normal 0.33489 -0.942257 0 - outer loop - vertex -36.1936 -11.4238 0 - vertex -36.792 -11.6364 -3 - vertex -36.1936 -11.4238 -3 - endloop - endfacet - facet normal 0.0784345 -0.996919 0 - outer loop - vertex -36.1936 -11.4238 -3 - vertex -34.87 -11.3196 0 - vertex -36.1936 -11.4238 0 - endloop - endfacet - facet normal 0.0784345 -0.996919 0 - outer loop - vertex -34.87 -11.3196 0 - vertex -36.1936 -11.4238 -3 - vertex -34.87 -11.3196 -3 - endloop - endfacet - facet normal -0.00425069 -0.999991 0 - outer loop - vertex -34.87 -11.3196 -3 - vertex -27.1868 -11.3523 0 - vertex -34.87 -11.3196 0 - endloop - endfacet - facet normal -0.00425069 -0.999991 -0 - outer loop - vertex -27.1868 -11.3523 0 - vertex -34.87 -11.3196 -3 - vertex -27.1868 -11.3523 -3 - endloop - endfacet - facet normal -0.778969 -0.627062 0 - outer loop - vertex -11.7016 -19.4898 -3 - vertex -11.9141 -19.2259 0 - vertex -11.9141 -19.2259 -3 - endloop - endfacet - facet normal -0.778969 -0.627062 0 - outer loop - vertex -11.9141 -19.2259 0 - vertex -11.7016 -19.4898 -3 - vertex -11.7016 -19.4898 0 - endloop - endfacet - facet normal -0.998948 -0.0458637 0 - outer loop - vertex -11.6824 -19.9072 -3 - vertex -11.7016 -19.4898 0 - vertex -11.7016 -19.4898 -3 - endloop - endfacet - facet normal -0.998948 -0.0458637 0 - outer loop - vertex -11.7016 -19.4898 0 - vertex -11.6824 -19.9072 -3 - vertex -11.6824 -19.9072 0 - endloop - endfacet - facet normal -0.950718 0.310058 0 - outer loop - vertex -11.8627 -20.4599 -3 - vertex -11.6824 -19.9072 0 - vertex -11.6824 -19.9072 -3 - endloop - endfacet - facet normal -0.950718 0.310058 0 - outer loop - vertex -11.6824 -19.9072 0 - vertex -11.8627 -20.4599 -3 - vertex -11.8627 -20.4599 0 - endloop - endfacet - facet normal -0.958208 0.286074 0 - outer loop - vertex -12.0544 -21.102 -3 - vertex -11.8627 -20.4599 0 - vertex -11.8627 -20.4599 -3 - endloop - endfacet - facet normal -0.958208 0.286074 0 - outer loop - vertex -11.8627 -20.4599 0 - vertex -12.0544 -21.102 -3 - vertex -12.0544 -21.102 0 - endloop - endfacet - facet normal 0.484491 -0.874796 0 - outer loop - vertex -12.0544 -21.102 -3 - vertex -10.3766 -20.1728 0 - vertex -12.0544 -21.102 0 - endloop - endfacet - facet normal 0.484491 -0.874796 0 - outer loop - vertex -10.3766 -20.1728 0 - vertex -12.0544 -21.102 -3 - vertex -10.3766 -20.1728 -3 - endloop - endfacet - facet normal 0.447022 -0.894523 0 - outer loop - vertex -10.3766 -20.1728 -3 - vertex -8.78621 -19.378 0 - vertex -10.3766 -20.1728 0 - endloop - endfacet - facet normal 0.447022 -0.894523 0 - outer loop - vertex -8.78621 -19.378 0 - vertex -10.3766 -20.1728 -3 - vertex -8.78621 -19.378 -3 - endloop - endfacet - facet normal 0.124012 -0.992281 0 - outer loop - vertex -8.78621 -19.378 -3 - vertex -7.1272 -19.1706 0 - vertex -8.78621 -19.378 0 - endloop - endfacet - facet normal 0.124012 -0.992281 0 - outer loop - vertex -7.1272 -19.1706 0 - vertex -8.78621 -19.378 -3 - vertex -7.1272 -19.1706 -3 - endloop - endfacet - facet normal -0.019656 -0.999807 0 - outer loop - vertex -7.1272 -19.1706 -3 - vertex -5.57075 -19.2012 0 - vertex -7.1272 -19.1706 0 - endloop - endfacet - facet normal -0.019656 -0.999807 -0 - outer loop - vertex -5.57075 -19.2012 0 - vertex -7.1272 -19.1706 -3 - vertex -5.57075 -19.2012 -3 - endloop - endfacet - facet normal -0.587249 -0.809407 0 - outer loop - vertex -5.57075 -19.2012 -3 - vertex -4.70045 -19.8327 0 - vertex -5.57075 -19.2012 0 - endloop - endfacet - facet normal -0.587249 -0.809407 -0 - outer loop - vertex -4.70045 -19.8327 0 - vertex -5.57075 -19.2012 -3 - vertex -4.70045 -19.8327 -3 - endloop - endfacet - facet normal -0.783181 -0.621793 0 - outer loop - vertex -4.06681 -20.6308 -3 - vertex -4.70045 -19.8327 0 - vertex -4.70045 -19.8327 -3 - endloop - endfacet - facet normal -0.783181 -0.621793 0 - outer loop - vertex -4.70045 -19.8327 0 - vertex -4.06681 -20.6308 -3 - vertex -4.06681 -20.6308 0 - endloop - endfacet - facet normal -0.979543 -0.201235 0 - outer loop - vertex -3.85646 -21.6547 -3 - vertex -4.06681 -20.6308 0 - vertex -4.06681 -20.6308 -3 - endloop - endfacet - facet normal -0.979543 -0.201235 0 - outer loop - vertex -4.06681 -20.6308 0 - vertex -3.85646 -21.6547 -3 - vertex -3.85646 -21.6547 0 - endloop - endfacet - facet normal -0.999487 0.0320236 0 - outer loop - vertex -3.89417 -22.8317 -3 - vertex -3.85646 -21.6547 0 - vertex -3.85646 -21.6547 -3 - endloop - endfacet - facet normal -0.999487 0.0320236 0 - outer loop - vertex -3.85646 -21.6547 0 - vertex -3.89417 -22.8317 -3 - vertex -3.89417 -22.8317 0 - endloop - endfacet - facet normal -0.971741 0.236051 0 - outer loop - vertex -4.26405 -24.3543 -3 - vertex -3.89417 -22.8317 0 - vertex -3.89417 -22.8317 -3 - endloop - endfacet - facet normal -0.971741 0.236051 0 - outer loop - vertex -3.89417 -22.8317 0 - vertex -4.26405 -24.3543 -3 - vertex -4.26405 -24.3543 0 - endloop - endfacet - facet normal -0.928824 0.370521 0 - outer loop - vertex -6.41168 -29.738 -3 - vertex -4.26405 -24.3543 0 - vertex -4.26405 -24.3543 -3 - endloop - endfacet - facet normal -0.928824 0.370521 0 - outer loop - vertex -4.26405 -24.3543 0 - vertex -6.41168 -29.738 -3 - vertex -6.41168 -29.738 0 - endloop - endfacet - facet normal -0.923854 0.382746 0 - outer loop - vertex -8.33648 -34.384 -3 - vertex -6.41168 -29.738 0 - vertex -6.41168 -29.738 -3 - endloop - endfacet - facet normal -0.923854 0.382746 0 - outer loop - vertex -6.41168 -29.738 0 - vertex -8.33648 -34.384 -3 - vertex -8.33648 -34.384 0 - endloop - endfacet - facet normal -0.969782 0.243973 0 - outer loop - vertex -8.56822 -35.3052 -3 - vertex -8.33648 -34.384 0 - vertex -8.33648 -34.384 -3 - endloop - endfacet - facet normal -0.969782 0.243973 0 - outer loop - vertex -8.33648 -34.384 0 - vertex -8.56822 -35.3052 -3 - vertex -8.56822 -35.3052 0 - endloop - endfacet - facet normal -0.990389 -0.138307 0 - outer loop - vertex -8.51129 -35.7129 -3 - vertex -8.56822 -35.3052 0 - vertex -8.56822 -35.3052 -3 - endloop - endfacet - facet normal -0.990389 -0.138307 0 - outer loop - vertex -8.56822 -35.3052 0 - vertex -8.51129 -35.7129 -3 - vertex -8.51129 -35.7129 0 - endloop - endfacet - facet normal -0.550548 -0.834803 0 - outer loop - vertex -8.51129 -35.7129 -3 - vertex -7.98605 -36.0592 0 - vertex -8.51129 -35.7129 0 - endloop - endfacet - facet normal -0.550548 -0.834803 -0 - outer loop - vertex -7.98605 -36.0592 0 - vertex -8.51129 -35.7129 -3 - vertex -7.98605 -36.0592 -3 - endloop - endfacet - facet normal -0.557022 -0.830498 0 - outer loop - vertex -7.98605 -36.0592 -3 - vertex -7.51249 -36.3769 0 - vertex -7.98605 -36.0592 0 - endloop - endfacet - facet normal -0.557022 -0.830498 -0 - outer loop - vertex -7.51249 -36.3769 0 - vertex -7.98605 -36.0592 -3 - vertex -7.51249 -36.3769 -3 - endloop - endfacet - facet normal -0.885076 -0.465446 0 - outer loop - vertex -7.31439 -36.7536 -3 - vertex -7.51249 -36.3769 0 - vertex -7.51249 -36.3769 -3 - endloop - endfacet - facet normal -0.885076 -0.465446 0 - outer loop - vertex -7.51249 -36.3769 0 - vertex -7.31439 -36.7536 -3 - vertex -7.31439 -36.7536 0 - endloop - endfacet - facet normal -0.984477 0.175514 0 - outer loop - vertex -7.3919 -37.1883 -3 - vertex -7.31439 -36.7536 0 - vertex -7.31439 -36.7536 -3 - endloop - endfacet - facet normal -0.984477 0.175514 0 - outer loop - vertex -7.31439 -36.7536 0 - vertex -7.3919 -37.1883 -3 - vertex -7.3919 -37.1883 0 - endloop - endfacet - facet normal -0.812154 0.583443 0 - outer loop - vertex -7.74517 -37.6801 -3 - vertex -7.3919 -37.1883 0 - vertex -7.3919 -37.1883 -3 - endloop - endfacet - facet normal -0.812154 0.583443 0 - outer loop - vertex -7.3919 -37.1883 0 - vertex -7.74517 -37.6801 -3 - vertex -7.74517 -37.6801 0 - endloop - endfacet - facet normal -0.622963 0.782251 0 - outer loop - vertex -7.74517 -37.6801 -3 - vertex -8.07933 -37.9462 0 - vertex -7.74517 -37.6801 0 - endloop - endfacet - facet normal -0.622963 0.782251 0 - outer loop - vertex -8.07933 -37.9462 0 - vertex -7.74517 -37.6801 -3 - vertex -8.07933 -37.9462 -3 - endloop - endfacet - facet normal -0.234375 0.972146 0 - outer loop - vertex -8.07933 -37.9462 -3 - vertex -8.66873 -38.0883 0 - vertex -8.07933 -37.9462 0 - endloop - endfacet - facet normal -0.234375 0.972146 0 - outer loop - vertex -8.66873 -38.0883 0 - vertex -8.07933 -37.9462 -3 - vertex -8.66873 -38.0883 -3 - endloop - endfacet - facet normal -0.02015 0.999797 0 - outer loop - vertex -8.66873 -38.0883 -3 - vertex -12.0013 -38.1555 0 - vertex -8.66873 -38.0883 0 - endloop - endfacet - facet normal -0.02015 0.999797 0 - outer loop - vertex -12.0013 -38.1555 0 - vertex -8.66873 -38.0883 -3 - vertex -12.0013 -38.1555 -3 - endloop - endfacet - facet normal 0.0188466 0.999822 -0 - outer loop - vertex -12.0013 -38.1555 -3 - vertex -15.3277 -38.0928 0 - vertex -12.0013 -38.1555 0 - endloop - endfacet - facet normal 0.0188466 0.999822 0 - outer loop - vertex -15.3277 -38.0928 0 - vertex -12.0013 -38.1555 -3 - vertex -15.3277 -38.0928 -3 - endloop - endfacet - facet normal 0.289952 0.957041 -0 - outer loop - vertex -15.3277 -38.0928 -3 - vertex -15.7983 -37.9502 0 - vertex -15.3277 -38.0928 0 - endloop - endfacet - facet normal 0.289952 0.957041 0 - outer loop - vertex -15.7983 -37.9502 0 - vertex -15.3277 -38.0928 -3 - vertex -15.7983 -37.9502 -3 - endloop - endfacet - facet normal 0.88368 0.468092 0 - outer loop - vertex -15.7983 -37.9502 0 - vertex -15.9433 -37.6764 -3 - vertex -15.9433 -37.6764 0 - endloop - endfacet - facet normal 0.88368 0.468092 0 - outer loop - vertex -15.9433 -37.6764 -3 - vertex -15.7983 -37.9502 0 - vertex -15.7983 -37.9502 -3 - endloop - endfacet - facet normal 0.999065 -0.0432335 0 - outer loop - vertex -15.9433 -37.6764 0 - vertex -15.9213 -37.1689 -3 - vertex -15.9213 -37.1689 0 - endloop - endfacet - facet normal 0.999065 -0.0432335 0 - outer loop - vertex -15.9213 -37.1689 -3 - vertex -15.9433 -37.6764 0 - vertex -15.9433 -37.6764 -3 - endloop - endfacet - facet normal 0.790901 -0.611944 0 - outer loop - vertex -15.9213 -37.1689 0 - vertex -15.4682 -36.5832 -3 - vertex -15.4682 -36.5832 0 - endloop - endfacet - facet normal 0.790901 -0.611944 0 - outer loop - vertex -15.4682 -36.5832 -3 - vertex -15.9213 -37.1689 0 - vertex -15.9213 -37.1689 -3 - endloop - endfacet - facet normal 0.603331 -0.797491 0 - outer loop - vertex -15.4682 -36.5832 -3 - vertex -14.8949 -36.1495 0 - vertex -15.4682 -36.5832 0 - endloop - endfacet - facet normal 0.603331 -0.797491 0 - outer loop - vertex -14.8949 -36.1495 0 - vertex -15.4682 -36.5832 -3 - vertex -14.8949 -36.1495 -3 - endloop - endfacet - facet normal 0.32682 -0.945087 0 - outer loop - vertex -14.8949 -36.1495 -3 - vertex -14.3732 -35.9691 0 - vertex -14.8949 -36.1495 0 - endloop - endfacet - facet normal 0.32682 -0.945087 0 - outer loop - vertex -14.3732 -35.9691 0 - vertex -14.8949 -36.1495 -3 - vertex -14.3732 -35.9691 -3 - endloop - endfacet - facet normal 0.336732 -0.941601 0 - outer loop - vertex -14.3732 -35.9691 -3 - vertex -13.7203 -35.7356 0 - vertex -14.3732 -35.9691 0 - endloop - endfacet - facet normal 0.336732 -0.941601 0 - outer loop - vertex -13.7203 -35.7356 0 - vertex -14.3732 -35.9691 -3 - vertex -13.7203 -35.7356 -3 - endloop - endfacet - facet normal 0.723518 -0.690305 0 - outer loop - vertex -13.7203 -35.7356 0 - vertex -13.0448 -35.0276 -3 - vertex -13.0448 -35.0276 0 - endloop - endfacet - facet normal 0.723518 -0.690305 0 - outer loop - vertex -13.0448 -35.0276 -3 - vertex -13.7203 -35.7356 0 - vertex -13.7203 -35.7356 -3 - endloop - endfacet - facet normal 0.860653 -0.509193 0 - outer loop - vertex -13.0448 -35.0276 0 - vertex -12.3385 -33.8339 -3 - vertex -12.3385 -33.8339 0 - endloop - endfacet - facet normal 0.860653 -0.509193 0 - outer loop - vertex -12.3385 -33.8339 -3 - vertex -13.0448 -35.0276 0 - vertex -13.0448 -35.0276 -3 - endloop - endfacet - facet normal 0.915054 -0.403331 0 - outer loop - vertex -12.3385 -33.8339 0 - vertex -11.5932 -32.143 -3 - vertex -11.5932 -32.143 0 - endloop - endfacet - facet normal 0.915054 -0.403331 0 - outer loop - vertex -11.5932 -32.143 -3 - vertex -12.3385 -33.8339 0 - vertex -12.3385 -33.8339 -3 - endloop - endfacet - facet normal 0.927789 -0.373105 0 - outer loop - vertex -11.5932 -32.143 0 - vertex -9.55184 -27.0667 -3 - vertex -9.55184 -27.0667 0 - endloop - endfacet - facet normal 0.927789 -0.373105 0 - outer loop - vertex -9.55184 -27.0667 -3 - vertex -11.5932 -32.143 0 - vertex -11.5932 -32.143 -3 - endloop - endfacet - facet normal 0.938245 -0.345971 0 - outer loop - vertex -9.55184 -27.0667 0 - vertex -8.72405 -24.8218 -3 - vertex -8.72405 -24.8218 0 - endloop - endfacet - facet normal 0.938245 -0.345971 0 - outer loop - vertex -8.72405 -24.8218 -3 - vertex -9.55184 -27.0667 0 - vertex -9.55184 -27.0667 -3 - endloop - endfacet - facet normal 0.983596 -0.180388 0 - outer loop - vertex -8.72405 -24.8218 0 - vertex -8.46819 -23.4267 -3 - vertex -8.46819 -23.4267 0 - endloop - endfacet - facet normal 0.983596 -0.180388 0 - outer loop - vertex -8.46819 -23.4267 -3 - vertex -8.72405 -24.8218 0 - vertex -8.72405 -24.8218 -3 - endloop - endfacet - facet normal 0.979467 0.201603 0 - outer loop - vertex -8.46819 -23.4267 0 - vertex -8.55624 -22.9989 -3 - vertex -8.55624 -22.9989 0 - endloop - endfacet - facet normal 0.979467 0.201603 0 - outer loop - vertex -8.55624 -22.9989 -3 - vertex -8.46819 -23.4267 0 - vertex -8.46819 -23.4267 -3 - endloop - endfacet - facet normal 0.762012 0.647563 0 - outer loop - vertex -8.55624 -22.9989 0 - vertex -8.78909 -22.7249 -3 - vertex -8.78909 -22.7249 0 - endloop - endfacet - facet normal 0.762012 0.647563 0 - outer loop - vertex -8.78909 -22.7249 -3 - vertex -8.55624 -22.9989 0 - vertex -8.55624 -22.9989 -3 - endloop - endfacet - facet normal 0.179668 0.983727 -0 - outer loop - vertex -8.78909 -22.7249 -3 - vertex -9.69161 -22.56 0 - vertex -8.78909 -22.7249 0 - endloop - endfacet - facet normal 0.179668 0.983727 0 - outer loop - vertex -9.69161 -22.56 0 - vertex -8.78909 -22.7249 -3 - vertex -9.69161 -22.56 -3 - endloop - endfacet - facet normal -0.191908 0.981413 0 - outer loop - vertex -9.69161 -22.56 -3 - vertex -10.5461 -22.7271 0 - vertex -9.69161 -22.56 0 - endloop - endfacet - facet normal -0.191908 0.981413 0 - outer loop - vertex -10.5461 -22.7271 0 - vertex -9.69161 -22.56 -3 - vertex -10.5461 -22.7271 -3 - endloop - endfacet - facet normal -0.380356 0.92484 0 - outer loop - vertex -10.5461 -22.7271 -3 - vertex -11.3967 -23.0769 0 - vertex -10.5461 -22.7271 0 - endloop - endfacet - facet normal -0.380356 0.92484 0 - outer loop - vertex -11.3967 -23.0769 0 - vertex -10.5461 -22.7271 -3 - vertex -11.3967 -23.0769 -3 - endloop - endfacet - facet normal -0.535069 0.844808 0 - outer loop - vertex -11.3967 -23.0769 -3 - vertex -12.4124 -23.7203 0 - vertex -11.3967 -23.0769 0 - endloop - endfacet - facet normal -0.535069 0.844808 0 - outer loop - vertex -12.4124 -23.7203 0 - vertex -11.3967 -23.0769 -3 - vertex -12.4124 -23.7203 -3 - endloop - endfacet - facet normal -0.673005 0.739638 0 - outer loop - vertex -12.4124 -23.7203 -3 - vertex -13.1427 -24.3848 0 - vertex -12.4124 -23.7203 0 - endloop - endfacet - facet normal -0.673005 0.739638 0 - outer loop - vertex -13.1427 -24.3848 0 - vertex -12.4124 -23.7203 -3 - vertex -13.1427 -24.3848 -3 - endloop - endfacet - facet normal -0.824808 0.565412 0 - outer loop - vertex -13.7062 -25.2068 -3 - vertex -13.1427 -24.3848 0 - vertex -13.1427 -24.3848 -3 - endloop - endfacet - facet normal -0.824808 0.565412 0 - outer loop - vertex -13.1427 -24.3848 0 - vertex -13.7062 -25.2068 -3 - vertex -13.7062 -25.2068 0 - endloop - endfacet - facet normal -0.907849 0.419297 0 - outer loop - vertex -14.2216 -26.3227 -3 - vertex -13.7062 -25.2068 0 - vertex -13.7062 -25.2068 -3 - endloop - endfacet - facet normal -0.907849 0.419297 0 - outer loop - vertex -13.7062 -25.2068 0 - vertex -14.2216 -26.3227 -3 - vertex -14.2216 -26.3227 0 - endloop - endfacet - facet normal -0.926196 0.377043 0 - outer loop - vertex -15.3894 -29.1914 -3 - vertex -14.2216 -26.3227 0 - vertex -14.2216 -26.3227 -3 - endloop - endfacet - facet normal -0.926196 0.377043 0 - outer loop - vertex -14.2216 -26.3227 0 - vertex -15.3894 -29.1914 -3 - vertex -15.3894 -29.1914 0 - endloop - endfacet - facet normal -0.925675 0.37832 0 - outer loop - vertex -16.8281 -32.7116 -3 - vertex -15.3894 -29.1914 0 - vertex -15.3894 -29.1914 -3 - endloop - endfacet - facet normal -0.925675 0.37832 0 - outer loop - vertex -15.3894 -29.1914 0 - vertex -16.8281 -32.7116 -3 - vertex -16.8281 -32.7116 0 - endloop - endfacet - facet normal -0.944728 0.327855 0 - outer loop - vertex -17.7285 -35.3062 -3 - vertex -16.8281 -32.7116 0 - vertex -16.8281 -32.7116 -3 - endloop - endfacet - facet normal -0.944728 0.327855 0 - outer loop - vertex -16.8281 -32.7116 0 - vertex -17.7285 -35.3062 -3 - vertex -17.7285 -35.3062 0 - endloop - endfacet - facet normal -0.998333 -0.0577213 0 - outer loop - vertex -17.6987 -35.8223 -3 - vertex -17.7285 -35.3062 0 - vertex -17.7285 -35.3062 -3 - endloop - endfacet - facet normal -0.998333 -0.0577213 0 - outer loop - vertex -17.7285 -35.3062 0 - vertex -17.6987 -35.8223 -3 - vertex -17.6987 -35.8223 0 - endloop - endfacet - facet normal -0.412173 -0.911106 0 - outer loop - vertex -17.6987 -35.8223 -3 - vertex -17.3742 -35.9691 0 - vertex -17.6987 -35.8223 0 - endloop - endfacet - facet normal -0.412173 -0.911106 -0 - outer loop - vertex -17.3742 -35.9691 0 - vertex -17.6987 -35.8223 -3 - vertex -17.3742 -35.9691 -3 - endloop - endfacet - facet normal -0.297585 -0.954695 0 - outer loop - vertex -17.3742 -35.9691 -3 - vertex -16.5846 -36.2152 0 - vertex -17.3742 -35.9691 0 - endloop - endfacet - facet normal -0.297585 -0.954695 -0 - outer loop - vertex -16.5846 -36.2152 0 - vertex -17.3742 -35.9691 -3 - vertex -16.5846 -36.2152 -3 - endloop - endfacet - facet normal -0.829044 -0.559183 0 - outer loop - vertex -16.2226 -36.752 -3 - vertex -16.5846 -36.2152 0 - vertex -16.5846 -36.2152 -3 - endloop - endfacet - facet normal -0.829044 -0.559183 0 - outer loop - vertex -16.5846 -36.2152 0 - vertex -16.2226 -36.752 -3 - vertex -16.2226 -36.752 0 - endloop - endfacet - facet normal -0.876406 0.481572 0 - outer loop - vertex -16.6989 -37.6188 -3 - vertex -16.2226 -36.752 0 - vertex -16.2226 -36.752 -3 - endloop - endfacet - facet normal -0.876406 0.481572 0 - outer loop - vertex -16.2226 -36.752 0 - vertex -16.6989 -37.6188 -3 - vertex -16.6989 -37.6188 0 - endloop - endfacet - facet normal -0.678562 0.734543 0 - outer loop - vertex -16.6989 -37.6188 -3 - vertex -17.033 -37.9274 0 - vertex -16.6989 -37.6188 0 - endloop - endfacet - facet normal -0.678562 0.734543 0 - outer loop - vertex -17.033 -37.9274 0 - vertex -16.6989 -37.6188 -3 - vertex -17.033 -37.9274 -3 - endloop - endfacet - facet normal -0.276188 0.961104 0 - outer loop - vertex -17.033 -37.9274 -3 - vertex -17.5781 -38.0841 0 - vertex -17.033 -37.9274 0 - endloop - endfacet - facet normal -0.276188 0.961104 0 - outer loop - vertex -17.5781 -38.0841 0 - vertex -17.033 -37.9274 -3 - vertex -17.5781 -38.0841 -3 - endloop - endfacet - facet normal -0.0141874 0.999899 0 - outer loop - vertex -17.5781 -38.0841 -3 - vertex -20.8226 -38.1301 0 - vertex -17.5781 -38.0841 0 - endloop - endfacet - facet normal -0.0141874 0.999899 0 - outer loop - vertex -20.8226 -38.1301 0 - vertex -17.5781 -38.0841 -3 - vertex -20.8226 -38.1301 -3 - endloop - endfacet - facet normal 0.0314237 0.999506 -0 - outer loop - vertex -20.8226 -38.1301 -3 - vertex -24.8096 -38.0047 0 - vertex -20.8226 -38.1301 0 - endloop - endfacet - facet normal 0.0314237 0.999506 0 - outer loop - vertex -24.8096 -38.0047 0 - vertex -20.8226 -38.1301 -3 - vertex -24.8096 -38.0047 -3 - endloop - endfacet - facet normal 0.544713 0.838623 -0 - outer loop - vertex -24.8096 -38.0047 -3 - vertex -25.0608 -37.8416 0 - vertex -24.8096 -38.0047 0 - endloop - endfacet - facet normal 0.544713 0.838623 0 - outer loop - vertex -25.0608 -37.8416 0 - vertex -24.8096 -38.0047 -3 - vertex -25.0608 -37.8416 -3 - endloop - endfacet - facet normal 0.940452 0.339927 0 - outer loop - vertex -25.0608 -37.8416 0 - vertex -25.157 -37.5754 -3 - vertex -25.157 -37.5754 0 - endloop - endfacet - facet normal 0.940452 0.339927 0 - outer loop - vertex -25.157 -37.5754 -3 - vertex -25.0608 -37.8416 0 - vertex -25.0608 -37.8416 -3 - endloop - endfacet - facet normal 0.964896 -0.262631 0 - outer loop - vertex -25.157 -37.5754 0 - vertex -24.9699 -36.888 -3 - vertex -24.9699 -36.888 0 - endloop - endfacet - facet normal 0.964896 -0.262631 0 - outer loop - vertex -24.9699 -36.888 -3 - vertex -25.157 -37.5754 0 - vertex -25.157 -37.5754 -3 - endloop - endfacet - facet normal 0.757107 -0.653291 0 - outer loop - vertex -24.9699 -36.888 0 - vertex -24.4194 -36.2501 -3 - vertex -24.4194 -36.2501 0 - endloop - endfacet - facet normal 0.757107 -0.653291 0 - outer loop - vertex -24.4194 -36.2501 -3 - vertex -24.9699 -36.888 0 - vertex -24.9699 -36.888 -3 - endloop - endfacet - facet normal 0.353851 -0.935302 0 - outer loop - vertex -24.4194 -36.2501 -3 - vertex -23.6767 -35.9691 0 - vertex -24.4194 -36.2501 0 - endloop - endfacet - facet normal 0.353851 -0.935302 0 - outer loop - vertex -23.6767 -35.9691 0 - vertex -24.4194 -36.2501 -3 - vertex -23.6767 -35.9691 -3 - endloop - endfacet - facet normal 0.158077 -0.987427 0 - outer loop - vertex -23.6767 -35.9691 -3 - vertex -23.007 -35.8619 0 - vertex -23.6767 -35.9691 0 - endloop - endfacet - facet normal 0.158077 -0.987427 0 - outer loop - vertex -23.007 -35.8619 0 - vertex -23.6767 -35.9691 -3 - vertex -23.007 -35.8619 -3 - endloop - endfacet - facet normal 0.593681 -0.8047 0 - outer loop - vertex -23.007 -35.8619 -3 - vertex -22.458 -35.4568 0 - vertex -23.007 -35.8619 0 - endloop - endfacet - facet normal 0.593681 -0.8047 0 - outer loop - vertex -22.458 -35.4568 0 - vertex -23.007 -35.8619 -3 - vertex -22.458 -35.4568 -3 - endloop - endfacet - facet normal 0.83817 -0.545409 0 - outer loop - vertex -22.458 -35.4568 0 - vertex -21.9191 -34.6287 -3 - vertex -21.9191 -34.6287 0 - endloop - endfacet - facet normal 0.83817 -0.545409 0 - outer loop - vertex -21.9191 -34.6287 -3 - vertex -22.458 -35.4568 0 - vertex -22.458 -35.4568 -3 - endloop - endfacet - facet normal 0.906982 -0.42117 0 - outer loop - vertex -21.9191 -34.6287 0 - vertex -21.28 -33.2523 -3 - vertex -21.28 -33.2523 0 - endloop - endfacet - facet normal 0.906982 -0.42117 0 - outer loop - vertex -21.28 -33.2523 -3 - vertex -21.9191 -34.6287 0 - vertex -21.9191 -34.6287 -3 - endloop - endfacet - facet normal 0.922958 -0.384901 0 - outer loop - vertex -21.28 -33.2523 0 - vertex -18.5428 -26.6889 -3 - vertex -18.5428 -26.6889 0 - endloop - endfacet - facet normal 0.922958 -0.384901 0 - outer loop - vertex -18.5428 -26.6889 -3 - vertex -21.28 -33.2523 0 - vertex -21.28 -33.2523 -3 - endloop - endfacet - facet normal 0.9376 -0.347716 0 - outer loop - vertex -18.5428 -26.6889 0 - vertex -17.299 -23.335 -3 - vertex -17.299 -23.335 0 - endloop - endfacet - facet normal 0.9376 -0.347716 0 - outer loop - vertex -17.299 -23.335 -3 - vertex -18.5428 -26.6889 0 - vertex -18.5428 -26.6889 -3 - endloop - endfacet - facet normal 0.99882 -0.0485627 0 - outer loop - vertex -17.299 -23.335 0 - vertex -17.2695 -22.7276 -3 - vertex -17.2695 -22.7276 0 - endloop - endfacet - facet normal 0.99882 -0.0485627 0 - outer loop - vertex -17.2695 -22.7276 -3 - vertex -17.299 -23.335 0 - vertex -17.299 -23.335 -3 - endloop - endfacet - facet normal 0.171081 0.985257 -0 - outer loop - vertex -17.2695 -22.7276 -3 - vertex -17.8179 -22.6324 0 - vertex -17.2695 -22.7276 0 - endloop - endfacet - facet normal 0.171081 0.985257 0 - outer loop - vertex -17.8179 -22.6324 0 - vertex -17.2695 -22.7276 -3 - vertex -17.8179 -22.6324 -3 - endloop - endfacet - facet normal 0.112446 0.993658 -0 - outer loop - vertex -17.8179 -22.6324 -3 - vertex -18.3659 -22.5704 0 - vertex -17.8179 -22.6324 0 - endloop - endfacet - facet normal 0.112446 0.993658 0 - outer loop - vertex -18.3659 -22.5704 0 - vertex -17.8179 -22.6324 -3 - vertex -18.3659 -22.5704 -3 - endloop - endfacet - facet normal 0.520189 0.854051 -0 - outer loop - vertex -18.3659 -22.5704 -3 - vertex -18.6886 -22.3738 0 - vertex -18.3659 -22.5704 0 - endloop - endfacet - facet normal 0.520189 0.854051 0 - outer loop - vertex -18.6886 -22.3738 0 - vertex -18.3659 -22.5704 -3 - vertex -18.6886 -22.3738 -3 - endloop - endfacet - facet normal 0.953226 0.302258 0 - outer loop - vertex -18.6886 -22.3738 0 - vertex -18.7986 -22.0269 -3 - vertex -18.7986 -22.0269 0 - endloop - endfacet - facet normal 0.953226 0.302258 0 - outer loop - vertex -18.7986 -22.0269 -3 - vertex -18.6886 -22.3738 0 - vertex -18.6886 -22.3738 -3 - endloop - endfacet - facet normal 0.984904 -0.1731 0 - outer loop - vertex -18.7986 -22.0269 0 - vertex -18.7084 -21.5139 -3 - vertex -18.7084 -21.5139 0 - endloop - endfacet - facet normal 0.984904 -0.1731 0 - outer loop - vertex -18.7084 -21.5139 -3 - vertex -18.7986 -22.0269 0 - vertex -18.7986 -22.0269 -3 - endloop - endfacet - facet normal 0.878265 -0.478174 0 - outer loop - vertex -18.7084 -21.5139 0 - vertex -18.4336 -21.0091 -3 - vertex -18.4336 -21.0091 0 - endloop - endfacet - facet normal 0.878265 -0.478174 0 - outer loop - vertex -18.4336 -21.0091 -3 - vertex -18.7084 -21.5139 0 - vertex -18.7084 -21.5139 -3 - endloop - endfacet - facet normal 0.488581 -0.872518 0 - outer loop - vertex -18.4336 -21.0091 -3 - vertex -17.9982 -20.7653 0 - vertex -18.4336 -21.0091 0 - endloop - endfacet - facet normal 0.488581 -0.872518 0 - outer loop - vertex -17.9982 -20.7653 0 - vertex -18.4336 -21.0091 -3 - vertex -17.9982 -20.7653 -3 - endloop - endfacet - facet normal 0.293895 -0.955838 0 - outer loop - vertex -17.9982 -20.7653 -3 - vertex -15.1553 -19.8912 0 - vertex -17.9982 -20.7653 0 - endloop - endfacet - facet normal 0.293895 -0.955838 0 - outer loop - vertex -15.1553 -19.8912 0 - vertex -17.9982 -20.7653 -3 - vertex -15.1553 -19.8912 -3 - endloop - endfacet - facet normal 0.257693 -0.966227 0 - outer loop - vertex -15.1553 -19.8912 -3 - vertex -12.3137 -19.1333 0 - vertex -15.1553 -19.8912 0 - endloop - endfacet - facet normal 0.257693 -0.966227 0 - outer loop - vertex -12.3137 -19.1333 0 - vertex -15.1553 -19.8912 -3 - vertex -12.3137 -19.1333 -3 - endloop - endfacet - facet normal -0.225556 -0.97423 0 - outer loop - vertex -12.3137 -19.1333 -3 - vertex -11.9141 -19.2259 0 - vertex -12.3137 -19.1333 0 - endloop - endfacet - facet normal -0.225556 -0.97423 -0 - outer loop - vertex -11.9141 -19.2259 0 - vertex -12.3137 -19.1333 -3 - vertex -11.9141 -19.2259 -3 - endloop - endfacet - facet normal -0.569265 -0.822154 0 - outer loop - vertex 47.2139 -19.2263 -3 - vertex 47.7267 -19.5813 0 - vertex 47.2139 -19.2263 0 - endloop - endfacet - facet normal -0.569265 -0.822154 -0 - outer loop - vertex 47.7267 -19.5813 0 - vertex 47.2139 -19.2263 -3 - vertex 47.7267 -19.5813 -3 - endloop - endfacet - facet normal -0.900824 -0.434184 0 - outer loop - vertex 47.9875 -20.1225 -3 - vertex 47.7267 -19.5813 0 - vertex 47.7267 -19.5813 -3 - endloop - endfacet - facet normal -0.900824 -0.434184 0 - outer loop - vertex 47.7267 -19.5813 0 - vertex 47.9875 -20.1225 -3 - vertex 47.9875 -20.1225 0 - endloop - endfacet - facet normal -0.988067 0.154023 0 - outer loop - vertex 47.8425 -21.0531 -3 - vertex 47.9875 -20.1225 0 - vertex 47.9875 -20.1225 -3 - endloop - endfacet - facet normal -0.988067 0.154023 0 - outer loop - vertex 47.9875 -20.1225 0 - vertex 47.8425 -21.0531 -3 - vertex 47.8425 -21.0531 0 - endloop - endfacet - facet normal -0.94959 0.313495 0 - outer loop - vertex 47.5305 -21.9981 -3 - vertex 47.8425 -21.0531 0 - vertex 47.8425 -21.0531 -3 - endloop - endfacet - facet normal -0.94959 0.313495 0 - outer loop - vertex 47.8425 -21.0531 0 - vertex 47.5305 -21.9981 -3 - vertex 47.5305 -21.9981 0 - endloop - endfacet - facet normal -0.87808 0.478513 0 - outer loop - vertex 47.0957 -22.796 -3 - vertex 47.5305 -21.9981 0 - vertex 47.5305 -21.9981 -3 - endloop - endfacet - facet normal -0.87808 0.478513 0 - outer loop - vertex 47.5305 -21.9981 0 - vertex 47.0957 -22.796 -3 - vertex 47.0957 -22.796 0 - endloop - endfacet - facet normal -0.768497 0.639853 0 - outer loop - vertex 46.5684 -23.4293 -3 - vertex 47.0957 -22.796 0 - vertex 47.0957 -22.796 -3 - endloop - endfacet - facet normal -0.768497 0.639853 0 - outer loop - vertex 47.0957 -22.796 0 - vertex 46.5684 -23.4293 -3 - vertex 46.5684 -23.4293 0 - endloop - endfacet - facet normal -0.607748 0.79413 0 - outer loop - vertex 46.5684 -23.4293 -3 - vertex 45.9792 -23.8802 0 - vertex 46.5684 -23.4293 0 - endloop - endfacet - facet normal -0.607748 0.79413 0 - outer loop - vertex 45.9792 -23.8802 0 - vertex 46.5684 -23.4293 -3 - vertex 45.9792 -23.8802 -3 - endloop - endfacet - facet normal -0.374765 0.92712 0 - outer loop - vertex 45.9792 -23.8802 -3 - vertex 45.3585 -24.1311 0 - vertex 45.9792 -23.8802 0 - endloop - endfacet - facet normal -0.374765 0.92712 0 - outer loop - vertex 45.3585 -24.1311 0 - vertex 45.9792 -23.8802 -3 - vertex 45.3585 -24.1311 -3 - endloop - endfacet - facet normal -0.0533306 0.998577 0 - outer loop - vertex 45.3585 -24.1311 -3 - vertex 44.7368 -24.1643 0 - vertex 45.3585 -24.1311 0 - endloop - endfacet - facet normal -0.0533306 0.998577 0 - outer loop - vertex 44.7368 -24.1643 0 - vertex 45.3585 -24.1311 -3 - vertex 44.7368 -24.1643 -3 - endloop - endfacet - facet normal 0.323025 0.94639 -0 - outer loop - vertex 44.7368 -24.1643 -3 - vertex 44.1445 -23.9621 0 - vertex 44.7368 -24.1643 0 - endloop - endfacet - facet normal 0.323025 0.94639 0 - outer loop - vertex 44.1445 -23.9621 0 - vertex 44.7368 -24.1643 -3 - vertex 44.1445 -23.9621 -3 - endloop - endfacet - facet normal 0.649875 0.760041 -0 - outer loop - vertex 44.1445 -23.9621 -3 - vertex 43.6122 -23.5069 0 - vertex 44.1445 -23.9621 0 - endloop - endfacet - facet normal 0.649875 0.760041 0 - outer loop - vertex 43.6122 -23.5069 0 - vertex 44.1445 -23.9621 -3 - vertex 43.6122 -23.5069 -3 - endloop - endfacet - facet normal 0.613628 0.789596 -0 - outer loop - vertex 43.6122 -23.5069 -3 - vertex 42.7682 -22.851 0 - vertex 43.6122 -23.5069 0 - endloop - endfacet - facet normal 0.613628 0.789596 0 - outer loop - vertex 42.7682 -22.851 0 - vertex 43.6122 -23.5069 -3 - vertex 42.7682 -22.851 -3 - endloop - endfacet - facet normal -0.589043 0.808102 0 - outer loop - vertex 42.7682 -22.851 -3 - vertex 41.2986 -23.9223 0 - vertex 42.7682 -22.851 0 - endloop - endfacet - facet normal -0.589043 0.808102 0 - outer loop - vertex 41.2986 -23.9223 0 - vertex 42.7682 -22.851 -3 - vertex 41.2986 -23.9223 -3 - endloop - endfacet - facet normal -0.701303 0.712864 0 - outer loop - vertex 41.2986 -23.9223 -3 - vertex 40.5923 -24.6171 0 - vertex 41.2986 -23.9223 0 - endloop - endfacet - facet normal -0.701303 0.712864 0 - outer loop - vertex 40.5923 -24.6171 0 - vertex 41.2986 -23.9223 -3 - vertex 40.5923 -24.6171 -3 - endloop - endfacet - facet normal -0.831353 0.555744 0 - outer loop - vertex 40.0289 -25.46 -3 - vertex 40.5923 -24.6171 0 - vertex 40.5923 -24.6171 -3 - endloop - endfacet - facet normal -0.831353 0.555744 0 - outer loop - vertex 40.5923 -24.6171 0 - vertex 40.0289 -25.46 -3 - vertex 40.0289 -25.46 0 - endloop - endfacet - facet normal -0.918395 0.395664 0 - outer loop - vertex 38.2188 -29.6614 -3 - vertex 40.0289 -25.46 0 - vertex 40.0289 -25.46 -3 - endloop - endfacet - facet normal -0.918395 0.395664 0 - outer loop - vertex 40.0289 -25.46 0 - vertex 38.2188 -29.6614 -3 - vertex 38.2188 -29.6614 0 - endloop - endfacet - facet normal -0.932877 0.360196 0 - outer loop - vertex 36.8272 -33.2656 -3 - vertex 38.2188 -29.6614 0 - vertex 38.2188 -29.6614 -3 - endloop - endfacet - facet normal -0.932877 0.360196 0 - outer loop - vertex 38.2188 -29.6614 0 - vertex 36.8272 -33.2656 -3 - vertex 36.8272 -33.2656 0 - endloop - endfacet - facet normal -0.959728 0.28093 0 - outer loop - vertex 36.2918 -35.0946 -3 - vertex 36.8272 -33.2656 0 - vertex 36.8272 -33.2656 -3 - endloop - endfacet - facet normal -0.959728 0.28093 0 - outer loop - vertex 36.8272 -33.2656 0 - vertex 36.2918 -35.0946 -3 - vertex 36.2918 -35.0946 0 - endloop - endfacet - facet normal -0.988492 -0.151276 0 - outer loop - vertex 36.3972 -35.7834 -3 - vertex 36.2918 -35.0946 0 - vertex 36.2918 -35.0946 -3 - endloop - endfacet - facet normal -0.988492 -0.151276 0 - outer loop - vertex 36.2918 -35.0946 0 - vertex 36.3972 -35.7834 -3 - vertex 36.3972 -35.7834 0 - endloop - endfacet - facet normal -0.329373 -0.9442 0 - outer loop - vertex 36.3972 -35.7834 -3 - vertex 37.1913 -36.0604 0 - vertex 36.3972 -35.7834 0 - endloop - endfacet - facet normal -0.329373 -0.9442 -0 - outer loop - vertex 37.1913 -36.0604 0 - vertex 36.3972 -35.7834 -3 - vertex 37.1913 -36.0604 -3 - endloop - endfacet - facet normal -0.323821 -0.946118 0 - outer loop - vertex 37.1913 -36.0604 -3 - vertex 37.9618 -36.3241 0 - vertex 37.1913 -36.0604 0 - endloop - endfacet - facet normal -0.323821 -0.946118 -0 - outer loop - vertex 37.9618 -36.3241 0 - vertex 37.1913 -36.0604 -3 - vertex 37.9618 -36.3241 -3 - endloop - endfacet - facet normal -0.960551 -0.278105 0 - outer loop - vertex 38.113 -36.8464 -3 - vertex 37.9618 -36.3241 0 - vertex 37.9618 -36.3241 -3 - endloop - endfacet - facet normal -0.960551 -0.278105 0 - outer loop - vertex 37.9618 -36.3241 0 - vertex 38.113 -36.8464 -3 - vertex 38.113 -36.8464 0 - endloop - endfacet - facet normal -0.986742 0.162295 0 - outer loop - vertex 37.9939 -37.5705 -3 - vertex 38.113 -36.8464 0 - vertex 38.113 -36.8464 -3 - endloop - endfacet - facet normal -0.986742 0.162295 0 - outer loop - vertex 38.113 -36.8464 0 - vertex 37.9939 -37.5705 -3 - vertex 37.9939 -37.5705 0 - endloop - endfacet - facet normal -0.539022 0.842292 0 - outer loop - vertex 37.9939 -37.5705 -3 - vertex 37.381 -37.9628 0 - vertex 37.9939 -37.5705 0 - endloop - endfacet - facet normal -0.539022 0.842292 0 - outer loop - vertex 37.381 -37.9628 0 - vertex 37.9939 -37.5705 -3 - vertex 37.381 -37.9628 -3 - endloop - endfacet - facet normal -0.10763 0.994191 0 - outer loop - vertex 37.381 -37.9628 -3 - vertex 35.8907 -38.1241 0 - vertex 37.381 -37.9628 0 - endloop - endfacet - facet normal -0.10763 0.994191 0 - outer loop - vertex 35.8907 -38.1241 0 - vertex 37.381 -37.9628 -3 - vertex 35.8907 -38.1241 -3 - endloop - endfacet - facet normal -0.0113945 0.999935 0 - outer loop - vertex 35.8907 -38.1241 -3 - vertex 33.1396 -38.1555 0 - vertex 35.8907 -38.1241 0 - endloop - endfacet - facet normal -0.0113945 0.999935 0 - outer loop - vertex 33.1396 -38.1555 0 - vertex 35.8907 -38.1241 -3 - vertex 33.1396 -38.1555 -3 - endloop - endfacet - facet normal 0.0181925 0.999835 -0 - outer loop - vertex 33.1396 -38.1555 -3 - vertex 29.8074 -38.0948 0 - vertex 33.1396 -38.1555 0 - endloop - endfacet - facet normal 0.0181925 0.999835 0 - outer loop - vertex 29.8074 -38.0948 0 - vertex 33.1396 -38.1555 -3 - vertex 29.8074 -38.0948 -3 - endloop - endfacet - facet normal 0.170719 0.98532 -0 - outer loop - vertex 29.8074 -38.0948 -3 - vertex 28.6431 -37.8931 0 - vertex 29.8074 -38.0948 0 - endloop - endfacet - facet normal 0.170719 0.98532 0 - outer loop - vertex 28.6431 -37.8931 0 - vertex 29.8074 -38.0948 -3 - vertex 28.6431 -37.8931 -3 - endloop - endfacet - facet normal 0.913427 0.407002 0 - outer loop - vertex 28.6431 -37.8931 0 - vertex 28.4102 -37.3704 -3 - vertex 28.4102 -37.3704 0 - endloop - endfacet - facet normal 0.913427 0.407002 0 - outer loop - vertex 28.4102 -37.3704 -3 - vertex 28.6431 -37.8931 0 - vertex 28.6431 -37.8931 -3 - endloop - endfacet - facet normal 0.965523 -0.260316 0 - outer loop - vertex 28.4102 -37.3704 0 - vertex 28.553 -36.8405 -3 - vertex 28.553 -36.8405 0 - endloop - endfacet - facet normal 0.965523 -0.260316 0 - outer loop - vertex 28.553 -36.8405 -3 - vertex 28.4102 -37.3704 0 - vertex 28.4102 -37.3704 -3 - endloop - endfacet - facet normal 0.697974 -0.716123 0 - outer loop - vertex 28.553 -36.8405 -3 - vertex 29.0223 -36.3831 0 - vertex 28.553 -36.8405 0 - endloop - endfacet - facet normal 0.697974 -0.716123 0 - outer loop - vertex 29.0223 -36.3831 0 - vertex 28.553 -36.8405 -3 - vertex 29.0223 -36.3831 -3 - endloop - endfacet - facet normal 0.378617 -0.925554 0 - outer loop - vertex 29.0223 -36.3831 -3 - vertex 29.7686 -36.0779 0 - vertex 29.0223 -36.3831 0 - endloop - endfacet - facet normal 0.378617 -0.925554 0 - outer loop - vertex 29.7686 -36.0779 0 - vertex 29.0223 -36.3831 -3 - vertex 29.7686 -36.0779 -3 - endloop - endfacet - facet normal 0.28314 -0.959079 0 - outer loop - vertex 29.7686 -36.0779 -3 - vertex 30.8837 -35.7486 0 - vertex 29.7686 -36.0779 0 - endloop - endfacet - facet normal 0.28314 -0.959079 0 - outer loop - vertex 30.8837 -35.7486 0 - vertex 29.7686 -36.0779 -3 - vertex 30.8837 -35.7486 -3 - endloop - endfacet - facet normal 0.670445 -0.741959 0 - outer loop - vertex 30.8837 -35.7486 -3 - vertex 31.6707 -35.0376 0 - vertex 30.8837 -35.7486 0 - endloop - endfacet - facet normal 0.670445 -0.741959 0 - outer loop - vertex 31.6707 -35.0376 0 - vertex 30.8837 -35.7486 -3 - vertex 31.6707 -35.0376 -3 - endloop - endfacet - facet normal 0.889774 -0.456402 0 - outer loop - vertex 31.6707 -35.0376 0 - vertex 32.5255 -33.371 -3 - vertex 32.5255 -33.371 0 - endloop - endfacet - facet normal 0.889774 -0.456402 0 - outer loop - vertex 32.5255 -33.371 -3 - vertex 31.6707 -35.0376 0 - vertex 31.6707 -35.0376 -3 - endloop - endfacet - facet normal 0.924374 -0.381489 0 - outer loop - vertex 32.5255 -33.371 0 - vertex 33.8444 -30.1753 -3 - vertex 33.8444 -30.1753 0 - endloop - endfacet - facet normal 0.924374 -0.381489 0 - outer loop - vertex 33.8444 -30.1753 -3 - vertex 32.5255 -33.371 0 - vertex 32.5255 -33.371 -3 - endloop - endfacet - facet normal 0.926524 -0.376236 0 - outer loop - vertex 33.8444 -30.1753 0 - vertex 35.3305 -26.5156 -3 - vertex 35.3305 -26.5156 0 - endloop - endfacet - facet normal 0.926524 -0.376236 0 - outer loop - vertex 35.3305 -26.5156 -3 - vertex 33.8444 -30.1753 0 - vertex 33.8444 -30.1753 -3 - endloop - endfacet - facet normal 0.946541 -0.322585 0 - outer loop - vertex 35.3305 -26.5156 0 - vertex 36.2859 -23.7121 -3 - vertex 36.2859 -23.7121 0 - endloop - endfacet - facet normal 0.946541 -0.322585 0 - outer loop - vertex 36.2859 -23.7121 -3 - vertex 35.3305 -26.5156 0 - vertex 35.3305 -26.5156 -3 - endloop - endfacet - facet normal 0.99651 -0.0834774 0 - outer loop - vertex 36.2859 -23.7121 0 - vertex 36.3422 -23.0402 -3 - vertex 36.3422 -23.0402 0 - endloop - endfacet - facet normal 0.99651 -0.0834774 0 - outer loop - vertex 36.3422 -23.0402 -3 - vertex 36.2859 -23.7121 0 - vertex 36.2859 -23.7121 -3 - endloop - endfacet - facet normal 0.457043 0.889445 -0 - outer loop - vertex 36.3422 -23.0402 -3 - vertex 36.104 -22.9178 0 - vertex 36.3422 -23.0402 0 - endloop - endfacet - facet normal 0.457043 0.889445 0 - outer loop - vertex 36.104 -22.9178 0 - vertex 36.3422 -23.0402 -3 - vertex 36.104 -22.9178 -3 - endloop - endfacet - facet normal -0.010303 0.999947 0 - outer loop - vertex 36.104 -22.9178 -3 - vertex 35.2001 -22.9271 0 - vertex 36.104 -22.9178 0 - endloop - endfacet - facet normal -0.010303 0.999947 0 - outer loop - vertex 35.2001 -22.9271 0 - vertex 36.104 -22.9178 -3 - vertex 35.2001 -22.9271 -3 - endloop - endfacet - facet normal 0.419058 0.907959 -0 - outer loop - vertex 35.2001 -22.9271 -3 - vertex 34.7441 -22.7166 0 - vertex 35.2001 -22.9271 0 - endloop - endfacet - facet normal 0.419058 0.907959 0 - outer loop - vertex 34.7441 -22.7166 0 - vertex 35.2001 -22.9271 -3 - vertex 34.7441 -22.7166 -3 - endloop - endfacet - facet normal 0.959742 0.280882 0 - outer loop - vertex 34.7441 -22.7166 0 - vertex 34.62 -22.2927 -3 - vertex 34.62 -22.2927 0 - endloop - endfacet - facet normal 0.959742 0.280882 0 - outer loop - vertex 34.62 -22.2927 -3 - vertex 34.7441 -22.7166 0 - vertex 34.7441 -22.7166 -3 - endloop - endfacet - facet normal 0.94057 -0.3396 0 - outer loop - vertex 34.62 -22.2927 0 - vertex 34.9156 -21.474 -3 - vertex 34.9156 -21.474 0 - endloop - endfacet - facet normal 0.94057 -0.3396 0 - outer loop - vertex 34.9156 -21.474 -3 - vertex 34.62 -22.2927 0 - vertex 34.62 -22.2927 -3 - endloop - endfacet - facet normal 0.664894 -0.746938 0 - outer loop - vertex 34.9156 -21.474 -3 - vertex 35.2187 -21.2043 0 - vertex 34.9156 -21.474 0 - endloop - endfacet - facet normal 0.664894 -0.746938 0 - outer loop - vertex 35.2187 -21.2043 0 - vertex 34.9156 -21.474 -3 - vertex 35.2187 -21.2043 -3 - endloop - endfacet - facet normal 0.282474 -0.959275 0 - outer loop - vertex 35.2187 -21.2043 -3 - vertex 35.5661 -21.102 0 - vertex 35.2187 -21.2043 0 - endloop - endfacet - facet normal 0.282474 -0.959275 0 - outer loop - vertex 35.5661 -21.102 0 - vertex 35.2187 -21.2043 -3 - vertex 35.5661 -21.102 -3 - endloop - endfacet - facet normal 0.319916 -0.947446 0 - outer loop - vertex 35.5661 -21.102 -3 - vertex 38.4798 -20.1181 0 - vertex 35.5661 -21.102 0 - endloop - endfacet - facet normal 0.319916 -0.947446 0 - outer loop - vertex 38.4798 -20.1181 0 - vertex 35.5661 -21.102 -3 - vertex 38.4798 -20.1181 -3 - endloop - endfacet - facet normal 0.306814 -0.951769 0 - outer loop - vertex 38.4798 -20.1181 -3 - vertex 41.5319 -19.1343 0 - vertex 38.4798 -20.1181 0 - endloop - endfacet - facet normal 0.306814 -0.951769 0 - outer loop - vertex 41.5319 -19.1343 0 - vertex 38.4798 -20.1181 -3 - vertex 41.5319 -19.1343 -3 - endloop - endfacet - facet normal -0.240332 -0.970691 0 - outer loop - vertex 41.5319 -19.1343 -3 - vertex 41.8934 -19.2238 0 - vertex 41.5319 -19.1343 0 - endloop - endfacet - facet normal -0.240332 -0.970691 -0 - outer loop - vertex 41.8934 -19.2238 0 - vertex 41.5319 -19.1343 -3 - vertex 41.8934 -19.2238 -3 - endloop - endfacet - facet normal -0.766739 -0.641959 0 - outer loop - vertex 42.1032 -19.4743 -3 - vertex 41.8934 -19.2238 0 - vertex 41.8934 -19.2238 -3 - endloop - endfacet - facet normal -0.766739 -0.641959 0 - outer loop - vertex 41.8934 -19.2238 0 - vertex 42.1032 -19.4743 -3 - vertex 42.1032 -19.4743 0 - endloop - endfacet - facet normal -0.995926 0.090175 0 - outer loop - vertex 42.0238 -20.3507 -3 - vertex 42.1032 -19.4743 0 - vertex 42.1032 -19.4743 -3 - endloop - endfacet - facet normal -0.995926 0.090175 0 - outer loop - vertex 42.1032 -19.4743 0 - vertex 42.0238 -20.3507 -3 - vertex 42.0238 -20.3507 0 - endloop - endfacet - facet normal -0.949137 0.314864 0 - outer loop - vertex 41.8981 -20.7296 -3 - vertex 42.0238 -20.3507 0 - vertex 42.0238 -20.3507 -3 - endloop - endfacet - facet normal -0.949137 0.314864 0 - outer loop - vertex 42.0238 -20.3507 0 - vertex 41.8981 -20.7296 -3 - vertex 41.8981 -20.7296 0 - endloop - endfacet - facet normal -0.846258 -0.532773 0 - outer loop - vertex 41.971 -20.8453 -3 - vertex 41.8981 -20.7296 0 - vertex 41.8981 -20.7296 -3 - endloop - endfacet - facet normal -0.846258 -0.532773 0 - outer loop - vertex 41.8981 -20.7296 0 - vertex 41.971 -20.8453 -3 - vertex 41.971 -20.8453 0 - endloop - endfacet - facet normal 0.512131 -0.858907 0 - outer loop - vertex 41.971 -20.8453 -3 - vertex 42.943 -20.2657 0 - vertex 41.971 -20.8453 0 - endloop - endfacet - facet normal 0.512131 -0.858907 0 - outer loop - vertex 42.943 -20.2657 0 - vertex 41.971 -20.8453 -3 - vertex 42.943 -20.2657 -3 - endloop - endfacet - facet normal 0.474768 -0.880111 0 - outer loop - vertex 42.943 -20.2657 -3 - vertex 44.5909 -19.3768 0 - vertex 42.943 -20.2657 0 - endloop - endfacet - facet normal 0.474768 -0.880111 0 - outer loop - vertex 44.5909 -19.3768 0 - vertex 42.943 -20.2657 -3 - vertex 44.5909 -19.3768 -3 - endloop - endfacet - facet normal 0.143592 -0.989637 0 - outer loop - vertex 44.5909 -19.3768 -3 - vertex 46.2623 -19.1343 0 - vertex 44.5909 -19.3768 0 - endloop - endfacet - facet normal 0.143592 -0.989637 0 - outer loop - vertex 46.2623 -19.1343 0 - vertex 44.5909 -19.3768 -3 - vertex 46.2623 -19.1343 -3 - endloop - endfacet - facet normal -0.096262 -0.995356 0 - outer loop - vertex 46.2623 -19.1343 -3 - vertex 47.2139 -19.2263 0 - vertex 46.2623 -19.1343 0 - endloop - endfacet - facet normal -0.096262 -0.995356 -0 - outer loop - vertex 47.2139 -19.2263 0 - vertex 46.2623 -19.1343 -3 - vertex 47.2139 -19.2263 -3 - endloop - endfacet - facet normal -0.989139 0.146981 0 - outer loop - vertex 5.19939 38.083 -3 - vertex 5.25321 38.4452 0 - vertex 5.25321 38.4452 -3 - endloop - endfacet - facet normal -0.989139 0.146981 0 - outer loop - vertex 5.25321 38.4452 0 - vertex 5.19939 38.083 -3 - vertex 5.19939 38.083 0 - endloop - endfacet - facet normal -0.909259 0.41623 0 - outer loop - vertex 4.72188 37.0399 -3 - vertex 5.19939 38.083 0 - vertex 5.19939 38.083 -3 - endloop - endfacet - facet normal -0.909259 0.41623 0 - outer loop - vertex 5.19939 38.083 0 - vertex 4.72188 37.0399 -3 - vertex 4.72188 37.0399 0 - endloop - endfacet - facet normal -0.923768 0.382952 0 - outer loop - vertex 4.30515 36.0346 -3 - vertex 4.72188 37.0399 0 - vertex 4.72188 37.0399 -3 - endloop - endfacet - facet normal -0.923768 0.382952 0 - outer loop - vertex 4.72188 37.0399 0 - vertex 4.30515 36.0346 -3 - vertex 4.30515 36.0346 0 - endloop - endfacet - facet normal -0.970112 0.242658 0 - outer loop - vertex 3.93589 34.5584 -3 - vertex 4.30515 36.0346 0 - vertex 4.30515 36.0346 -3 - endloop - endfacet - facet normal -0.970112 0.242658 0 - outer loop - vertex 4.30515 36.0346 0 - vertex 3.93589 34.5584 -3 - vertex 3.93589 34.5584 0 - endloop - endfacet - facet normal -0.993642 0.112587 0 - outer loop - vertex 3.57109 31.3388 -3 - vertex 3.93589 34.5584 0 - vertex 3.93589 34.5584 -3 - endloop - endfacet - facet normal -0.993642 0.112587 0 - outer loop - vertex 3.93589 34.5584 0 - vertex 3.57109 31.3388 -3 - vertex 3.57109 31.3388 0 - endloop - endfacet - facet normal -0.99786 -0.0653884 0 - outer loop - vertex 3.67763 29.7129 -3 - vertex 3.57109 31.3388 0 - vertex 3.57109 31.3388 -3 - endloop - endfacet - facet normal -0.99786 -0.0653884 0 - outer loop - vertex 3.57109 31.3388 0 - vertex 3.67763 29.7129 -3 - vertex 3.67763 29.7129 0 - endloop - endfacet - facet normal -0.893644 -0.448776 0 - outer loop - vertex 4.3138 28.4461 -3 - vertex 3.67763 29.7129 0 - vertex 3.67763 29.7129 -3 - endloop - endfacet - facet normal -0.893644 -0.448776 0 - outer loop - vertex 3.67763 29.7129 0 - vertex 4.3138 28.4461 -3 - vertex 4.3138 28.4461 0 - endloop - endfacet - facet normal -0.787428 -0.616407 0 - outer loop - vertex 5.72413 26.6445 -3 - vertex 4.3138 28.4461 0 - vertex 4.3138 28.4461 -3 - endloop - endfacet - facet normal -0.787428 -0.616407 0 - outer loop - vertex 4.3138 28.4461 0 - vertex 5.72413 26.6445 -3 - vertex 5.72413 26.6445 0 - endloop - endfacet - facet normal -0.565537 -0.824723 0 - outer loop - vertex 5.72413 26.6445 -3 - vertex 6.4022 26.1795 0 - vertex 5.72413 26.6445 0 - endloop - endfacet - facet normal -0.565537 -0.824723 -0 - outer loop - vertex 6.4022 26.1795 0 - vertex 5.72413 26.6445 -3 - vertex 6.4022 26.1795 -3 - endloop - endfacet - facet normal -0.296038 -0.955176 0 - outer loop - vertex 6.4022 26.1795 -3 - vertex 7.11433 25.9588 0 - vertex 6.4022 26.1795 0 - endloop - endfacet - facet normal -0.296038 -0.955176 -0 - outer loop - vertex 7.11433 25.9588 0 - vertex 6.4022 26.1795 -3 - vertex 7.11433 25.9588 -3 - endloop - endfacet - facet normal -0.249452 -0.968387 0 - outer loop - vertex 7.11433 25.9588 -3 - vertex 7.91411 25.7528 0 - vertex 7.11433 25.9588 0 - endloop - endfacet - facet normal -0.249452 -0.968387 -0 - outer loop - vertex 7.91411 25.7528 0 - vertex 7.11433 25.9588 -3 - vertex 7.91411 25.7528 -3 - endloop - endfacet - facet normal -0.590139 -0.807301 0 - outer loop - vertex 7.91411 25.7528 -3 - vertex 8.51885 25.3107 0 - vertex 7.91411 25.7528 0 - endloop - endfacet - facet normal -0.590139 -0.807301 -0 - outer loop - vertex 8.51885 25.3107 0 - vertex 7.91411 25.7528 -3 - vertex 8.51885 25.3107 -3 - endloop - endfacet - facet normal -0.834337 -0.551255 0 - outer loop - vertex 9.07032 24.476 -3 - vertex 8.51885 25.3107 0 - vertex 8.51885 25.3107 -3 - endloop - endfacet - facet normal -0.834337 -0.551255 0 - outer loop - vertex 8.51885 25.3107 0 - vertex 9.07032 24.476 -3 - vertex 9.07032 24.476 0 - endloop - endfacet - facet normal -0.907633 -0.419764 0 - outer loop - vertex 9.71033 23.0922 -3 - vertex 9.07032 24.476 0 - vertex 9.07032 24.476 -3 - endloop - endfacet - facet normal -0.907633 -0.419764 0 - outer loop - vertex 9.07032 24.476 0 - vertex 9.71033 23.0922 -3 - vertex 9.71033 23.0922 0 - endloop - endfacet - facet normal -0.895482 -0.445097 0 - outer loop - vertex 10.9729 20.5521 -3 - vertex 9.71033 23.0922 0 - vertex 9.71033 23.0922 -3 - endloop - endfacet - facet normal -0.895482 -0.445097 0 - outer loop - vertex 9.71033 23.0922 0 - vertex 10.9729 20.5521 -3 - vertex 10.9729 20.5521 0 - endloop - endfacet - facet normal -0.741992 -0.670408 0 - outer loop - vertex 12.6982 18.6425 -3 - vertex 10.9729 20.5521 0 - vertex 10.9729 20.5521 -3 - endloop - endfacet - facet normal -0.741992 -0.670408 0 - outer loop - vertex 10.9729 20.5521 0 - vertex 12.6982 18.6425 -3 - vertex 12.6982 18.6425 0 - endloop - endfacet - facet normal -0.66692 -0.745129 0 - outer loop - vertex 12.6982 18.6425 -3 - vertex 13.99 17.4864 0 - vertex 12.6982 18.6425 0 - endloop - endfacet - facet normal -0.66692 -0.745129 -0 - outer loop - vertex 13.99 17.4864 0 - vertex 12.6982 18.6425 -3 - vertex 13.99 17.4864 -3 - endloop - endfacet - facet normal -0.579406 -0.815039 0 - outer loop - vertex 13.99 17.4864 -3 - vertex 15.2045 16.623 0 - vertex 13.99 17.4864 0 - endloop - endfacet - facet normal -0.579406 -0.815039 -0 - outer loop - vertex 15.2045 16.623 0 - vertex 13.99 17.4864 -3 - vertex 15.2045 16.623 -3 - endloop - endfacet - facet normal -0.462357 -0.886694 0 - outer loop - vertex 15.2045 16.623 -3 - vertex 16.5954 15.8977 0 - vertex 15.2045 16.623 0 - endloop - endfacet - facet normal -0.462357 -0.886694 -0 - outer loop - vertex 16.5954 15.8977 0 - vertex 15.2045 16.623 -3 - vertex 16.5954 15.8977 -3 - endloop - endfacet - facet normal -0.377272 -0.926103 0 - outer loop - vertex 16.5954 15.8977 -3 - vertex 18.4164 15.1559 0 - vertex 16.5954 15.8977 0 - endloop - endfacet - facet normal -0.377272 -0.926103 -0 - outer loop - vertex 18.4164 15.1559 0 - vertex 16.5954 15.8977 -3 - vertex 18.4164 15.1559 -3 - endloop - endfacet - facet normal -0.305414 -0.95222 0 - outer loop - vertex 18.4164 15.1559 -3 - vertex 20.0668 14.6265 0 - vertex 18.4164 15.1559 0 - endloop - endfacet - facet normal -0.305414 -0.95222 -0 - outer loop - vertex 20.0668 14.6265 0 - vertex 18.4164 15.1559 -3 - vertex 20.0668 14.6265 -3 - endloop - endfacet - facet normal 0.198377 -0.980126 0 - outer loop - vertex 20.0668 14.6265 -3 - vertex 21.1653 14.8489 0 - vertex 20.0668 14.6265 0 - endloop - endfacet - facet normal 0.198377 -0.980126 0 - outer loop - vertex 21.1653 14.8489 0 - vertex 20.0668 14.6265 -3 - vertex 21.1653 14.8489 -3 - endloop - endfacet - facet normal 0.403705 -0.914889 0 - outer loop - vertex 21.1653 14.8489 -3 - vertex 23.3802 15.8262 0 - vertex 21.1653 14.8489 0 - endloop - endfacet - facet normal 0.403705 -0.914889 0 - outer loop - vertex 23.3802 15.8262 0 - vertex 21.1653 14.8489 -3 - vertex 23.3802 15.8262 -3 - endloop - endfacet - facet normal 0.513821 -0.857898 0 - outer loop - vertex 23.3802 15.8262 -3 - vertex 24.7931 16.6725 0 - vertex 23.3802 15.8262 0 - endloop - endfacet - facet normal 0.513821 -0.857898 0 - outer loop - vertex 24.7931 16.6725 0 - vertex 23.3802 15.8262 -3 - vertex 24.7931 16.6725 -3 - endloop - endfacet - facet normal 0.988574 0.150735 0 - outer loop - vertex 24.7931 16.6725 0 - vertex 24.7174 17.1695 -3 - vertex 24.7174 17.1695 0 - endloop - endfacet - facet normal 0.988574 0.150735 0 - outer loop - vertex 24.7174 17.1695 -3 - vertex 24.7931 16.6725 0 - vertex 24.7931 16.6725 -3 - endloop - endfacet - facet normal 0.409608 0.912261 -0 - outer loop - vertex 24.7174 17.1695 -3 - vertex 24.1542 17.4223 0 - vertex 24.7174 17.1695 0 - endloop - endfacet - facet normal 0.409608 0.912261 0 - outer loop - vertex 24.1542 17.4223 0 - vertex 24.7174 17.1695 -3 - vertex 24.1542 17.4223 -3 - endloop - endfacet - facet normal 0.049214 0.998788 -0 - outer loop - vertex 24.1542 17.4223 -3 - vertex 22.547 17.5015 0 - vertex 24.1542 17.4223 0 - endloop - endfacet - facet normal 0.049214 0.998788 0 - outer loop - vertex 22.547 17.5015 0 - vertex 24.1542 17.4223 -3 - vertex 22.547 17.5015 -3 - endloop - endfacet - facet normal 0.0234404 0.999725 -0 - outer loop - vertex 22.547 17.5015 -3 - vertex 20.2159 17.5562 0 - vertex 22.547 17.5015 0 - endloop - endfacet - facet normal 0.0234404 0.999725 0 - outer loop - vertex 20.2159 17.5562 0 - vertex 22.547 17.5015 -3 - vertex 20.2159 17.5562 -3 - endloop - endfacet - facet normal 0.471751 0.881732 -0 - outer loop - vertex 20.2159 17.5562 -3 - vertex 19.8437 17.7553 0 - vertex 20.2159 17.5562 0 - endloop - endfacet - facet normal 0.471751 0.881732 0 - outer loop - vertex 19.8437 17.7553 0 - vertex 20.2159 17.5562 -3 - vertex 19.8437 17.7553 -3 - endloop - endfacet - facet normal 0.853692 0.520778 0 - outer loop - vertex 19.8437 17.7553 0 - vertex 19.5351 18.2611 -3 - vertex 19.5351 18.2611 0 - endloop - endfacet - facet normal 0.853692 0.520778 0 - outer loop - vertex 19.5351 18.2611 -3 - vertex 19.8437 17.7553 0 - vertex 19.8437 17.7553 -3 - endloop - endfacet - facet normal 0.975799 0.21867 0 - outer loop - vertex 19.5351 18.2611 0 - vertex 19.0948 20.2262 -3 - vertex 19.0948 20.2262 0 - endloop - endfacet - facet normal 0.975799 0.21867 0 - outer loop - vertex 19.0948 20.2262 -3 - vertex 19.5351 18.2611 0 - vertex 19.5351 18.2611 -3 - endloop - endfacet - facet normal 0.973279 0.229626 0 - outer loop - vertex 19.0948 20.2262 0 - vertex 18.6529 22.0992 -3 - vertex 18.6529 22.0992 0 - endloop - endfacet - facet normal 0.973279 0.229626 0 - outer loop - vertex 18.6529 22.0992 -3 - vertex 19.0948 20.2262 0 - vertex 19.0948 20.2262 -3 - endloop - endfacet - facet normal 0.439505 0.89824 -0 - outer loop - vertex 18.6529 22.0992 -3 - vertex 17.155 22.8321 0 - vertex 18.6529 22.0992 0 - endloop - endfacet - facet normal 0.439505 0.89824 0 - outer loop - vertex 17.155 22.8321 0 - vertex 18.6529 22.0992 -3 - vertex 17.155 22.8321 -3 - endloop - endfacet - facet normal 0.375086 0.92699 -0 - outer loop - vertex 17.155 22.8321 -3 - vertex 15.5055 23.4995 0 - vertex 17.155 22.8321 0 - endloop - endfacet - facet normal 0.375086 0.92699 0 - outer loop - vertex 15.5055 23.4995 0 - vertex 17.155 22.8321 -3 - vertex 15.5055 23.4995 -3 - endloop - endfacet - facet normal 0.401684 0.915778 -0 - outer loop - vertex 15.5055 23.4995 -3 - vertex 14.0164 24.1527 0 - vertex 15.5055 23.4995 0 - endloop - endfacet - facet normal 0.401684 0.915778 0 - outer loop - vertex 14.0164 24.1527 0 - vertex 15.5055 23.4995 -3 - vertex 14.0164 24.1527 -3 - endloop - endfacet - facet normal 0.516309 0.856402 -0 - outer loop - vertex 14.0164 24.1527 -3 - vertex 13.0733 24.7212 0 - vertex 14.0164 24.1527 0 - endloop - endfacet - facet normal 0.516309 0.856402 0 - outer loop - vertex 13.0733 24.7212 0 - vertex 14.0164 24.1527 -3 - vertex 13.0733 24.7212 -3 - endloop - endfacet - facet normal 0.678054 0.735012 -0 - outer loop - vertex 13.0733 24.7212 -3 - vertex 12.1975 25.5292 0 - vertex 13.0733 24.7212 0 - endloop - endfacet - facet normal 0.678054 0.735012 0 - outer loop - vertex 12.1975 25.5292 0 - vertex 13.0733 24.7212 -3 - vertex 12.1975 25.5292 -3 - endloop - endfacet - facet normal 0.798708 0.601719 0 - outer loop - vertex 12.1975 25.5292 0 - vertex 11.5037 26.4501 -3 - vertex 11.5037 26.4501 0 - endloop - endfacet - facet normal 0.798708 0.601719 0 - outer loop - vertex 11.5037 26.4501 -3 - vertex 12.1975 25.5292 0 - vertex 12.1975 25.5292 -3 - endloop - endfacet - facet normal 0.916155 0.400824 0 - outer loop - vertex 11.5037 26.4501 0 - vertex 11.1066 27.3577 -3 - vertex 11.1066 27.3577 0 - endloop - endfacet - facet normal 0.916155 0.400824 0 - outer loop - vertex 11.1066 27.3577 -3 - vertex 11.5037 26.4501 0 - vertex 11.5037 26.4501 -3 - endloop - endfacet - facet normal 0.997988 0.0634007 0 - outer loop - vertex 11.1066 27.3577 0 - vertex 11.0411 28.3898 -3 - vertex 11.0411 28.3898 0 - endloop - endfacet - facet normal 0.997988 0.0634007 0 - outer loop - vertex 11.0411 28.3898 -3 - vertex 11.1066 27.3577 0 - vertex 11.1066 27.3577 -3 - endloop - endfacet - facet normal 0.985212 -0.171342 0 - outer loop - vertex 11.0411 28.3898 0 - vertex 11.2319 29.4873 -3 - vertex 11.2319 29.4873 0 - endloop - endfacet - facet normal 0.985212 -0.171342 0 - outer loop - vertex 11.2319 29.4873 -3 - vertex 11.0411 28.3898 0 - vertex 11.0411 28.3898 -3 - endloop - endfacet - facet normal 0.92237 -0.386308 0 - outer loop - vertex 11.2319 29.4873 0 - vertex 11.5971 30.3591 -3 - vertex 11.5971 30.3591 0 - endloop - endfacet - facet normal 0.92237 -0.386308 0 - outer loop - vertex 11.5971 30.3591 -3 - vertex 11.2319 29.4873 0 - vertex 11.2319 29.4873 -3 - endloop - endfacet - facet normal 0.613523 -0.789677 0 - outer loop - vertex 11.5971 30.3591 -3 - vertex 12.0544 30.7144 0 - vertex 11.5971 30.3591 0 - endloop - endfacet - facet normal 0.613523 -0.789677 0 - outer loop - vertex 12.0544 30.7144 0 - vertex 11.5971 30.3591 -3 - vertex 12.0544 30.7144 -3 - endloop - endfacet - facet normal -0.632498 -0.774562 0 - outer loop - vertex 12.0544 30.7144 -3 - vertex 12.2907 30.5214 0 - vertex 12.0544 30.7144 0 - endloop - endfacet - facet normal -0.632498 -0.774562 -0 - outer loop - vertex 12.2907 30.5214 0 - vertex 12.0544 30.7144 -3 - vertex 12.2907 30.5214 -3 - endloop - endfacet - facet normal -0.906769 0.421628 0 - outer loop - vertex 12.0187 29.9363 -3 - vertex 12.2907 30.5214 0 - vertex 12.2907 30.5214 -3 - endloop - endfacet - facet normal -0.906769 0.421628 0 - outer loop - vertex 12.2907 30.5214 0 - vertex 12.0187 29.9363 -3 - vertex 12.0187 29.9363 0 - endloop - endfacet - facet normal -0.946212 0.323547 0 - outer loop - vertex 11.8088 29.3224 -3 - vertex 12.0187 29.9363 0 - vertex 12.0187 29.9363 -3 - endloop - endfacet - facet normal -0.946212 0.323547 0 - outer loop - vertex 12.0187 29.9363 0 - vertex 11.8088 29.3224 -3 - vertex 11.8088 29.3224 0 - endloop - endfacet - facet normal -0.996661 0.0816499 0 - outer loop - vertex 11.7374 28.4518 -3 - vertex 11.8088 29.3224 0 - vertex 11.8088 29.3224 -3 - endloop - endfacet - facet normal -0.996661 0.0816499 0 - outer loop - vertex 11.8088 29.3224 0 - vertex 11.7374 28.4518 -3 - vertex 11.7374 28.4518 0 - endloop - endfacet - facet normal -0.997288 -0.0735994 0 - outer loop - vertex 11.8052 27.5343 -3 - vertex 11.7374 28.4518 0 - vertex 11.7374 28.4518 -3 - endloop - endfacet - facet normal -0.997288 -0.0735994 0 - outer loop - vertex 11.7374 28.4518 0 - vertex 11.8052 27.5343 -3 - vertex 11.8052 27.5343 0 - endloop - endfacet - facet normal -0.964338 -0.264675 0 - outer loop - vertex 12.0123 26.7794 -3 - vertex 11.8052 27.5343 0 - vertex 11.8052 27.5343 -3 - endloop - endfacet - facet normal -0.964338 -0.264675 0 - outer loop - vertex 11.8052 27.5343 0 - vertex 12.0123 26.7794 -3 - vertex 12.0123 26.7794 0 - endloop - endfacet - facet normal -0.835126 -0.550059 0 - outer loop - vertex 12.5486 25.9653 -3 - vertex 12.0123 26.7794 0 - vertex 12.0123 26.7794 -3 - endloop - endfacet - facet normal -0.835126 -0.550059 0 - outer loop - vertex 12.0123 26.7794 0 - vertex 12.5486 25.9653 -3 - vertex 12.5486 25.9653 0 - endloop - endfacet - facet normal -0.606684 -0.794943 0 - outer loop - vertex 12.5486 25.9653 -3 - vertex 13.4969 25.2416 0 - vertex 12.5486 25.9653 0 - endloop - endfacet - facet normal -0.606684 -0.794943 -0 - outer loop - vertex 13.4969 25.2416 0 - vertex 12.5486 25.9653 -3 - vertex 13.4969 25.2416 -3 - endloop - endfacet - facet normal -0.436683 -0.899615 0 - outer loop - vertex 13.4969 25.2416 -3 - vertex 15.1211 24.4531 0 - vertex 13.4969 25.2416 0 - endloop - endfacet - facet normal -0.436683 -0.899615 -0 - outer loop - vertex 15.1211 24.4531 0 - vertex 13.4969 25.2416 -3 - vertex 15.1211 24.4531 -3 - endloop - endfacet - facet normal -0.365946 -0.930636 0 - outer loop - vertex 15.1211 24.4531 -3 - vertex 17.6852 23.4449 0 - vertex 15.1211 24.4531 0 - endloop - endfacet - facet normal -0.365946 -0.930636 -0 - outer loop - vertex 17.6852 23.4449 0 - vertex 15.1211 24.4531 -3 - vertex 17.6852 23.4449 -3 - endloop - endfacet - facet normal -0.54663 -0.837374 0 - outer loop - vertex 17.6852 23.4449 -3 - vertex 18.9185 22.6398 0 - vertex 17.6852 23.4449 0 - endloop - endfacet - facet normal -0.54663 -0.837374 -0 - outer loop - vertex 18.9185 22.6398 0 - vertex 17.6852 23.4449 -3 - vertex 18.9185 22.6398 -3 - endloop - endfacet - facet normal -0.808126 -0.58901 0 - outer loop - vertex 19.4421 21.9215 -3 - vertex 18.9185 22.6398 0 - vertex 18.9185 22.6398 -3 - endloop - endfacet - facet normal -0.808126 -0.58901 0 - outer loop - vertex 18.9185 22.6398 0 - vertex 19.4421 21.9215 -3 - vertex 19.4421 21.9215 0 - endloop - endfacet - facet normal -0.985617 -0.168992 0 - outer loop - vertex 19.6596 20.6529 -3 - vertex 19.4421 21.9215 0 - vertex 19.4421 21.9215 -3 - endloop - endfacet - facet normal -0.985617 -0.168992 0 - outer loop - vertex 19.4421 21.9215 0 - vertex 19.6596 20.6529 -3 - vertex 19.6596 20.6529 0 - endloop - endfacet - facet normal -0.991076 -0.133297 0 - outer loop - vertex 19.8405 19.3078 -3 - vertex 19.6596 20.6529 0 - vertex 19.6596 20.6529 -3 - endloop - endfacet - facet normal -0.991076 -0.133297 0 - outer loop - vertex 19.6596 20.6529 0 - vertex 19.8405 19.3078 -3 - vertex 19.8405 19.3078 0 - endloop - endfacet - facet normal -0.89371 -0.448645 0 - outer loop - vertex 20.2006 18.5903 -3 - vertex 19.8405 19.3078 0 - vertex 19.8405 19.3078 -3 - endloop - endfacet - facet normal -0.89371 -0.448645 0 - outer loop - vertex 19.8405 19.3078 0 - vertex 20.2006 18.5903 -3 - vertex 20.2006 18.5903 0 - endloop - endfacet - facet normal -0.353154 -0.935565 0 - outer loop - vertex 20.2006 18.5903 -3 - vertex 20.9591 18.304 0 - vertex 20.2006 18.5903 0 - endloop - endfacet - facet normal -0.353154 -0.935565 -0 - outer loop - vertex 20.9591 18.304 0 - vertex 20.2006 18.5903 -3 - vertex 20.9591 18.304 -3 - endloop - endfacet - facet normal -0.0375868 -0.999293 0 - outer loop - vertex 20.9591 18.304 -3 - vertex 22.335 18.2522 0 - vertex 20.9591 18.304 0 - endloop - endfacet - facet normal -0.0375868 -0.999293 -0 - outer loop - vertex 22.335 18.2522 0 - vertex 20.9591 18.304 -3 - vertex 22.335 18.2522 -3 - endloop - endfacet - facet normal -0.0902677 -0.995918 0 - outer loop - vertex 22.335 18.2522 -3 - vertex 24.5942 18.0475 0 - vertex 22.335 18.2522 0 - endloop - endfacet - facet normal -0.0902677 -0.995918 -0 - outer loop - vertex 24.5942 18.0475 0 - vertex 22.335 18.2522 -3 - vertex 24.5942 18.0475 -3 - endloop - endfacet - facet normal -0.485131 -0.874442 0 - outer loop - vertex 24.5942 18.0475 -3 - vertex 25.1513 17.7384 0 - vertex 24.5942 18.0475 0 - endloop - endfacet - facet normal -0.485131 -0.874442 -0 - outer loop - vertex 25.1513 17.7384 0 - vertex 24.5942 18.0475 -3 - vertex 25.1513 17.7384 -3 - endloop - endfacet - facet normal -0.837387 -0.54661 0 - outer loop - vertex 25.4738 17.2443 -3 - vertex 25.1513 17.7384 0 - vertex 25.1513 17.7384 -3 - endloop - endfacet - facet normal -0.837387 -0.54661 0 - outer loop - vertex 25.1513 17.7384 0 - vertex 25.4738 17.2443 -3 - vertex 25.4738 17.2443 0 - endloop - endfacet - facet normal -0.875441 -0.483325 0 - outer loop - vertex 25.704 16.8274 -3 - vertex 25.4738 17.2443 0 - vertex 25.4738 17.2443 -3 - endloop - endfacet - facet normal -0.875441 -0.483325 0 - outer loop - vertex 25.4738 17.2443 0 - vertex 25.704 16.8274 -3 - vertex 25.704 16.8274 0 - endloop - endfacet - facet normal -0.34429 -0.938863 0 - outer loop - vertex 25.704 16.8274 -3 - vertex 25.8979 16.7563 0 - vertex 25.704 16.8274 0 - endloop - endfacet - facet normal -0.34429 -0.938863 -0 - outer loop - vertex 25.8979 16.7563 0 - vertex 25.704 16.8274 -3 - vertex 25.8979 16.7563 -3 - endloop - endfacet - facet normal 0.976922 -0.213594 0 - outer loop - vertex 25.8979 16.7563 0 - vertex 26.0816 17.5963 -3 - vertex 26.0816 17.5963 0 - endloop - endfacet - facet normal 0.976922 -0.213594 0 - outer loop - vertex 26.0816 17.5963 -3 - vertex 25.8979 16.7563 0 - vertex 25.8979 16.7563 -3 - endloop - endfacet - facet normal 0.991357 0.131195 0 - outer loop - vertex 26.0816 17.5963 0 - vertex 25.9892 18.2943 -3 - vertex 25.9892 18.2943 0 - endloop - endfacet - facet normal 0.991357 0.131195 0 - outer loop - vertex 25.9892 18.2943 -3 - vertex 26.0816 17.5963 0 - vertex 26.0816 17.5963 -3 - endloop - endfacet - facet normal 0.907716 0.419585 0 - outer loop - vertex 25.9892 18.2943 0 - vertex 25.7331 18.8483 -3 - vertex 25.7331 18.8483 0 - endloop - endfacet - facet normal 0.907716 0.419585 0 - outer loop - vertex 25.7331 18.8483 -3 - vertex 25.9892 18.2943 0 - vertex 25.9892 18.2943 -3 - endloop - endfacet - facet normal 0.685144 0.728407 -0 - outer loop - vertex 25.7331 18.8483 -3 - vertex 25.3447 19.2137 0 - vertex 25.7331 18.8483 0 - endloop - endfacet - facet normal 0.685144 0.728407 0 - outer loop - vertex 25.3447 19.2137 0 - vertex 25.7331 18.8483 -3 - vertex 25.3447 19.2137 -3 - endloop - endfacet - facet normal 0.260028 0.965601 -0 - outer loop - vertex 25.3447 19.2137 -3 - vertex 24.8554 19.3454 0 - vertex 25.3447 19.2137 0 - endloop - endfacet - facet normal 0.260028 0.965601 0 - outer loop - vertex 24.8554 19.3454 0 - vertex 25.3447 19.2137 -3 - vertex 24.8554 19.3454 -3 - endloop - endfacet - facet normal 0.225805 0.974172 -0 - outer loop - vertex 24.8554 19.3454 -3 - vertex 23.3909 19.6849 0 - vertex 24.8554 19.3454 0 - endloop - endfacet - facet normal 0.225805 0.974172 0 - outer loop - vertex 23.3909 19.6849 0 - vertex 24.8554 19.3454 -3 - vertex 23.3909 19.6849 -3 - endloop - endfacet - facet normal 0.432873 0.901455 -0 - outer loop - vertex 23.3909 19.6849 -3 - vertex 22.6368 20.047 0 - vertex 23.3909 19.6849 0 - endloop - endfacet - facet normal 0.432873 0.901455 0 - outer loop - vertex 22.6368 20.047 0 - vertex 23.3909 19.6849 -3 - vertex 22.6368 20.047 -3 - endloop - endfacet - facet normal 0.698531 0.71558 -0 - outer loop - vertex 22.6368 20.047 -3 - vertex 22.0911 20.5797 0 - vertex 22.6368 20.047 0 - endloop - endfacet - facet normal 0.698531 0.71558 0 - outer loop - vertex 22.0911 20.5797 0 - vertex 22.6368 20.047 -3 - vertex 22.0911 20.5797 -3 - endloop - endfacet - facet normal 0.897086 0.441856 0 - outer loop - vertex 22.0911 20.5797 0 - vertex 21.7245 21.3239 -3 - vertex 21.7245 21.3239 0 - endloop - endfacet - facet normal 0.897086 0.441856 0 - outer loop - vertex 21.7245 21.3239 -3 - vertex 22.0911 20.5797 0 - vertex 22.0911 20.5797 -3 - endloop - endfacet - facet normal 0.977198 0.212332 0 - outer loop - vertex 21.7245 21.3239 0 - vertex 21.508 22.3204 -3 - vertex 21.508 22.3204 0 - endloop - endfacet - facet normal 0.977198 0.212332 0 - outer loop - vertex 21.508 22.3204 -3 - vertex 21.7245 21.3239 0 - vertex 21.7245 21.3239 -3 - endloop - endfacet - facet normal 0.966755 0.255705 0 - outer loop - vertex 21.508 22.3204 0 - vertex 21.2518 23.2891 -3 - vertex 21.2518 23.2891 0 - endloop - endfacet - facet normal 0.966755 0.255705 0 - outer loop - vertex 21.2518 23.2891 -3 - vertex 21.508 22.3204 0 - vertex 21.508 22.3204 -3 - endloop - endfacet - facet normal 0.849732 0.527214 0 - outer loop - vertex 21.2518 23.2891 0 - vertex 20.762 24.0784 -3 - vertex 20.762 24.0784 0 - endloop - endfacet - facet normal 0.849732 0.527214 0 - outer loop - vertex 20.762 24.0784 -3 - vertex 21.2518 23.2891 0 - vertex 21.2518 23.2891 -3 - endloop - endfacet - facet normal 0.645661 0.763624 -0 - outer loop - vertex 20.762 24.0784 -3 - vertex 20.0338 24.6942 0 - vertex 20.762 24.0784 0 - endloop - endfacet - facet normal 0.645661 0.763624 0 - outer loop - vertex 20.0338 24.6942 0 - vertex 20.762 24.0784 -3 - vertex 20.0338 24.6942 -3 - endloop - endfacet - facet normal 0.418642 0.908151 -0 - outer loop - vertex 20.0338 24.6942 -3 - vertex 19.062 25.1422 0 - vertex 20.0338 24.6942 0 - endloop - endfacet - facet normal 0.418642 0.908151 0 - outer loop - vertex 19.062 25.1422 0 - vertex 20.0338 24.6942 -3 - vertex 19.062 25.1422 -3 - endloop - endfacet - facet normal 0.419948 0.907548 -0 - outer loop - vertex 19.062 25.1422 -3 - vertex 17.2513 25.98 0 - vertex 19.062 25.1422 0 - endloop - endfacet - facet normal 0.419948 0.907548 0 - outer loop - vertex 17.2513 25.98 0 - vertex 19.062 25.1422 -3 - vertex 17.2513 25.98 -3 - endloop - endfacet - facet normal 0.649834 0.760076 -0 - outer loop - vertex 17.2513 25.98 -3 - vertex 15.7223 27.2873 0 - vertex 17.2513 25.98 0 - endloop - endfacet - facet normal 0.649834 0.760076 0 - outer loop - vertex 15.7223 27.2873 0 - vertex 17.2513 25.98 -3 - vertex 15.7223 27.2873 -3 - endloop - endfacet - facet normal 0.802285 0.596942 0 - outer loop - vertex 15.7223 27.2873 0 - vertex 15.122 28.0941 -3 - vertex 15.122 28.0941 0 - endloop - endfacet - facet normal 0.802285 0.596942 0 - outer loop - vertex 15.122 28.0941 -3 - vertex 15.7223 27.2873 0 - vertex 15.7223 27.2873 -3 - endloop - endfacet - facet normal 0.997794 0.066389 0 - outer loop - vertex 15.122 28.0941 0 - vertex 15.0577 29.0611 -3 - vertex 15.0577 29.0611 0 - endloop - endfacet - facet normal 0.997794 0.066389 0 - outer loop - vertex 15.0577 29.0611 -3 - vertex 15.122 28.0941 0 - vertex 15.122 28.0941 -3 - endloop - endfacet - facet normal 0.991125 -0.132935 0 - outer loop - vertex 15.0577 29.0611 0 - vertex 15.1584 29.8123 -3 - vertex 15.1584 29.8123 0 - endloop - endfacet - facet normal 0.991125 -0.132935 0 - outer loop - vertex 15.1584 29.8123 -3 - vertex 15.0577 29.0611 0 - vertex 15.0577 29.0611 -3 - endloop - endfacet - facet normal 0.868998 -0.494816 0 - outer loop - vertex 15.1584 29.8123 0 - vertex 15.3134 30.0845 -3 - vertex 15.3134 30.0845 0 - endloop - endfacet - facet normal 0.868998 -0.494816 0 - outer loop - vertex 15.3134 30.0845 -3 - vertex 15.1584 29.8123 0 - vertex 15.1584 29.8123 -3 - endloop - endfacet - facet normal -0.793235 -0.608916 0 - outer loop - vertex 15.4783 29.8698 -3 - vertex 15.3134 30.0845 0 - vertex 15.3134 30.0845 -3 - endloop - endfacet - facet normal -0.793235 -0.608916 0 - outer loop - vertex 15.3134 30.0845 0 - vertex 15.4783 29.8698 -3 - vertex 15.4783 29.8698 0 - endloop - endfacet - facet normal -0.983592 -0.18041 0 - outer loop - vertex 15.6084 29.1601 -3 - vertex 15.4783 29.8698 0 - vertex 15.4783 29.8698 -3 - endloop - endfacet - facet normal -0.983592 -0.18041 0 - outer loop - vertex 15.4783 29.8698 0 - vertex 15.6084 29.1601 -3 - vertex 15.6084 29.1601 0 - endloop - endfacet - facet normal -0.973498 -0.228694 0 - outer loop - vertex 15.808 28.3106 -3 - vertex 15.6084 29.1601 0 - vertex 15.6084 29.1601 -3 - endloop - endfacet - facet normal -0.973498 -0.228694 0 - outer loop - vertex 15.6084 29.1601 0 - vertex 15.808 28.3106 -3 - vertex 15.808 28.3106 0 - endloop - endfacet - facet normal -0.833811 -0.55205 0 - outer loop - vertex 16.2688 27.6146 -3 - vertex 15.808 28.3106 0 - vertex 15.808 28.3106 -3 - endloop - endfacet - facet normal -0.833811 -0.55205 0 - outer loop - vertex 15.808 28.3106 0 - vertex 16.2688 27.6146 -3 - vertex 16.2688 27.6146 0 - endloop - endfacet - facet normal -0.616484 -0.787368 0 - outer loop - vertex 16.2688 27.6146 -3 - vertex 17.0772 26.9817 0 - vertex 16.2688 27.6146 0 - endloop - endfacet - facet normal -0.616484 -0.787368 -0 - outer loop - vertex 17.0772 26.9817 0 - vertex 16.2688 27.6146 -3 - vertex 17.0772 26.9817 -3 - endloop - endfacet - facet normal -0.469274 -0.883053 0 - outer loop - vertex 17.0772 26.9817 -3 - vertex 18.3193 26.3216 0 - vertex 17.0772 26.9817 0 - endloop - endfacet - facet normal -0.469274 -0.883053 -0 - outer loop - vertex 18.3193 26.3216 0 - vertex 17.0772 26.9817 -3 - vertex 18.3193 26.3216 -3 - endloop - endfacet - facet normal -0.453671 -0.891169 0 - outer loop - vertex 18.3193 26.3216 -3 - vertex 20.1819 25.3734 0 - vertex 18.3193 26.3216 0 - endloop - endfacet - facet normal -0.453671 -0.891169 -0 - outer loop - vertex 20.1819 25.3734 0 - vertex 18.3193 26.3216 -3 - vertex 20.1819 25.3734 -3 - endloop - endfacet - facet normal -0.592966 -0.805227 0 - outer loop - vertex 20.1819 25.3734 -3 - vertex 21.2755 24.568 0 - vertex 20.1819 25.3734 0 - endloop - endfacet - facet normal -0.592966 -0.805227 -0 - outer loop - vertex 21.2755 24.568 0 - vertex 20.1819 25.3734 -3 - vertex 21.2755 24.568 -3 - endloop - endfacet - facet normal -0.85116 -0.524906 0 - outer loop - vertex 21.8319 23.6658 -3 - vertex 21.2755 24.568 0 - vertex 21.2755 24.568 -3 - endloop - endfacet - facet normal -0.85116 -0.524906 0 - outer loop - vertex 21.2755 24.568 0 - vertex 21.8319 23.6658 -3 - vertex 21.8319 23.6658 0 - endloop - endfacet - facet normal -0.980126 -0.198375 0 - outer loop - vertex 22.0827 22.427 -3 - vertex 21.8319 23.6658 0 - vertex 21.8319 23.6658 -3 - endloop - endfacet - facet normal -0.980126 -0.198375 0 - outer loop - vertex 21.8319 23.6658 0 - vertex 22.0827 22.427 -3 - vertex 22.0827 22.427 0 - endloop - endfacet - facet normal -0.975671 -0.219241 0 - outer loop - vertex 22.2698 21.5943 -3 - vertex 22.0827 22.427 0 - vertex 22.0827 22.427 -3 - endloop - endfacet - facet normal -0.975671 -0.219241 0 - outer loop - vertex 22.0827 22.427 0 - vertex 22.2698 21.5943 -3 - vertex 22.2698 21.5943 0 - endloop - endfacet - facet normal -0.867972 -0.496613 0 - outer loop - vertex 22.6169 20.9877 -3 - vertex 22.2698 21.5943 0 - vertex 22.2698 21.5943 -3 - endloop - endfacet - facet normal -0.867972 -0.496613 0 - outer loop - vertex 22.2698 21.5943 0 - vertex 22.6169 20.9877 -3 - vertex 22.6169 20.9877 0 - endloop - endfacet - facet normal -0.60611 -0.795381 0 - outer loop - vertex 22.6169 20.9877 -3 - vertex 23.1387 20.59 0 - vertex 22.6169 20.9877 0 - endloop - endfacet - facet normal -0.60611 -0.795381 -0 - outer loop - vertex 23.1387 20.59 0 - vertex 22.6169 20.9877 -3 - vertex 23.1387 20.59 -3 - endloop - endfacet - facet normal -0.277742 -0.960656 0 - outer loop - vertex 23.1387 20.59 -3 - vertex 23.8499 20.3844 0 - vertex 23.1387 20.59 0 - endloop - endfacet - facet normal -0.277742 -0.960656 -0 - outer loop - vertex 23.8499 20.3844 0 - vertex 23.1387 20.59 -3 - vertex 23.8499 20.3844 -3 - endloop - endfacet - facet normal -0.253903 -0.96723 0 - outer loop - vertex 23.8499 20.3844 -3 - vertex 25.0752 20.0627 0 - vertex 23.8499 20.3844 0 - endloop - endfacet - facet normal -0.253903 -0.96723 -0 - outer loop - vertex 25.0752 20.0627 0 - vertex 23.8499 20.3844 -3 - vertex 25.0752 20.0627 -3 - endloop - endfacet - facet normal -0.555295 -0.831654 0 - outer loop - vertex 25.0752 20.0627 -3 - vertex 25.9424 19.4837 0 - vertex 25.0752 20.0627 0 - endloop - endfacet - facet normal -0.555295 -0.831654 -0 - outer loop - vertex 25.9424 19.4837 0 - vertex 25.0752 20.0627 -3 - vertex 25.9424 19.4837 -3 - endloop - endfacet - facet normal -0.850459 -0.526041 0 - outer loop - vertex 26.4742 18.624 -3 - vertex 25.9424 19.4837 0 - vertex 25.9424 19.4837 -3 - endloop - endfacet - facet normal -0.850459 -0.526041 0 - outer loop - vertex 25.9424 19.4837 0 - vertex 26.4742 18.624 -3 - vertex 26.4742 18.624 0 - endloop - endfacet - facet normal -0.982731 -0.185042 0 - outer loop - vertex 26.6933 17.4601 -3 - vertex 26.4742 18.624 0 - vertex 26.4742 18.624 -3 - endloop - endfacet - facet normal -0.982731 -0.185042 0 - outer loop - vertex 26.4742 18.624 0 - vertex 26.6933 17.4601 -3 - vertex 26.6933 17.4601 0 - endloop - endfacet - facet normal -0.95811 -0.286401 0 - outer loop - vertex 27.1755 15.8473 -3 - vertex 26.6933 17.4601 0 - vertex 26.6933 17.4601 -3 - endloop - endfacet - facet normal -0.95811 -0.286401 0 - outer loop - vertex 26.6933 17.4601 0 - vertex 27.1755 15.8473 -3 - vertex 27.1755 15.8473 0 - endloop - endfacet - facet normal -0.948381 -0.317134 0 - outer loop - vertex 27.5422 14.7505 -3 - vertex 27.1755 15.8473 0 - vertex 27.1755 15.8473 -3 - endloop - endfacet - facet normal -0.948381 -0.317134 0 - outer loop - vertex 27.1755 15.8473 0 - vertex 27.5422 14.7505 -3 - vertex 27.5422 14.7505 0 - endloop - endfacet - facet normal -0.999642 -0.0267694 0 - outer loop - vertex 27.6094 12.2412 -3 - vertex 27.5422 14.7505 0 - vertex 27.5422 14.7505 -3 - endloop - endfacet - facet normal -0.999642 -0.0267694 0 - outer loop - vertex 27.5422 14.7505 0 - vertex 27.6094 12.2412 -3 - vertex 27.6094 12.2412 0 - endloop - endfacet - facet normal -0.999486 0.0320667 0 - outer loop - vertex 27.528 9.70386 -3 - vertex 27.6094 12.2412 0 - vertex 27.6094 12.2412 -3 - endloop - endfacet - facet normal -0.999486 0.0320667 0 - outer loop - vertex 27.6094 12.2412 0 - vertex 27.528 9.70386 -3 - vertex 27.528 9.70386 0 - endloop - endfacet - facet normal -0.981091 0.193547 0 - outer loop - vertex 27.209 8.08714 -3 - vertex 27.528 9.70386 0 - vertex 27.528 9.70386 -3 - endloop - endfacet - facet normal -0.981091 0.193547 0 - outer loop - vertex 27.528 9.70386 0 - vertex 27.209 8.08714 -3 - vertex 27.209 8.08714 0 - endloop - endfacet - facet normal -0.980935 0.194337 0 - outer loop - vertex 26.8985 6.51977 -3 - vertex 27.209 8.08714 0 - vertex 27.209 8.08714 -3 - endloop - endfacet - facet normal -0.980935 0.194337 0 - outer loop - vertex 27.209 8.08714 0 - vertex 26.8985 6.51977 -3 - vertex 26.8985 6.51977 0 - endloop - endfacet - facet normal -0.999971 -0.00756314 0 - outer loop - vertex 26.9177 3.98634 -3 - vertex 26.8985 6.51977 0 - vertex 26.8985 6.51977 -3 - endloop - endfacet - facet normal -0.999971 -0.00756314 0 - outer loop - vertex 26.8985 6.51977 0 - vertex 26.9177 3.98634 -3 - vertex 26.9177 3.98634 0 - endloop - endfacet - facet normal -0.999812 -0.0193848 0 - outer loop - vertex 26.953 2.16551 -3 - vertex 26.9177 3.98634 0 - vertex 26.9177 3.98634 -3 - endloop - endfacet - facet normal -0.999812 -0.0193848 0 - outer loop - vertex 26.9177 3.98634 0 - vertex 26.953 2.16551 -3 - vertex 26.953 2.16551 0 - endloop - endfacet - facet normal -0.99253 0.121998 0 - outer loop - vertex 26.8464 1.29842 -3 - vertex 26.953 2.16551 0 - vertex 26.953 2.16551 -3 - endloop - endfacet - facet normal -0.99253 0.121998 0 - outer loop - vertex 26.953 2.16551 0 - vertex 26.8464 1.29842 -3 - vertex 26.8464 1.29842 0 - endloop - endfacet - facet normal -0.673406 0.739273 0 - outer loop - vertex 26.8464 1.29842 -3 - vertex 26.7235 1.18648 0 - vertex 26.8464 1.29842 0 - endloop - endfacet - facet normal -0.673406 0.739273 0 - outer loop - vertex 26.7235 1.18648 0 - vertex 26.8464 1.29842 -3 - vertex 26.7235 1.18648 -3 - endloop - endfacet - facet normal 0.423462 0.905914 -0 - outer loop - vertex 26.7235 1.18648 -3 - vertex 26.5455 1.2697 0 - vertex 26.7235 1.18648 0 - endloop - endfacet - facet normal 0.423462 0.905914 0 - outer loop - vertex 26.5455 1.2697 0 - vertex 26.7235 1.18648 -3 - vertex 26.5455 1.2697 -3 - endloop - endfacet - facet normal 0.785068 0.61941 0 - outer loop - vertex 26.5455 1.2697 0 - vertex 25.9977 1.96397 -3 - vertex 25.9977 1.96397 0 - endloop - endfacet - facet normal 0.785068 0.61941 0 - outer loop - vertex 25.9977 1.96397 -3 - vertex 26.5455 1.2697 0 - vertex 26.5455 1.2697 -3 - endloop - endfacet - facet normal 0.724168 0.689624 0 - outer loop - vertex 25.9977 1.96397 0 - vertex 25.3153 2.68052 -3 - vertex 25.3153 2.68052 0 - endloop - endfacet - facet normal 0.724168 0.689624 0 - outer loop - vertex 25.3153 2.68052 -3 - vertex 25.9977 1.96397 0 - vertex 25.9977 1.96397 -3 - endloop - endfacet - facet normal -0.00319409 0.999995 0 - outer loop - vertex 25.3153 2.68052 -3 - vertex 25.0347 2.67962 0 - vertex 25.3153 2.68052 0 - endloop - endfacet - facet normal -0.00319409 0.999995 0 - outer loop - vertex 25.0347 2.67962 0 - vertex 25.3153 2.68052 -3 - vertex 25.0347 2.67962 -3 - endloop - endfacet - facet normal -0.620982 0.783825 0 - outer loop - vertex 25.0347 2.67962 -3 - vertex 24.7523 2.4559 0 - vertex 25.0347 2.67962 0 - endloop - endfacet - facet normal -0.620982 0.783825 0 - outer loop - vertex 24.7523 2.4559 0 - vertex 25.0347 2.67962 -3 - vertex 24.7523 2.4559 -3 - endloop - endfacet - facet normal -0.356176 0.934419 0 - outer loop - vertex 24.7523 2.4559 -3 - vertex 23.9858 2.16372 0 - vertex 24.7523 2.4559 0 - endloop - endfacet - facet normal -0.356176 0.934419 0 - outer loop - vertex 23.9858 2.16372 0 - vertex 24.7523 2.4559 -3 - vertex 23.9858 2.16372 -3 - endloop - endfacet - facet normal -0.21204 0.977261 0 - outer loop - vertex 23.9858 2.16372 -3 - vertex 23.1222 1.97635 0 - vertex 23.9858 2.16372 0 - endloop - endfacet - facet normal -0.21204 0.977261 0 - outer loop - vertex 23.1222 1.97635 0 - vertex 23.9858 2.16372 -3 - vertex 23.1222 1.97635 -3 - endloop - endfacet - facet normal 0.0237086 0.999719 -0 - outer loop - vertex 23.1222 1.97635 -3 - vertex 22.8505 1.9828 0 - vertex 23.1222 1.97635 0 - endloop - endfacet - facet normal 0.0237086 0.999719 0 - outer loop - vertex 22.8505 1.9828 0 - vertex 23.1222 1.97635 -3 - vertex 22.8505 1.9828 -3 - endloop - endfacet - facet normal 0.97535 0.220664 0 - outer loop - vertex 22.8505 1.9828 0 - vertex 22.7784 2.30129 -3 - vertex 22.7784 2.30129 0 - endloop - endfacet - facet normal 0.97535 0.220664 0 - outer loop - vertex 22.7784 2.30129 -3 - vertex 22.8505 1.9828 0 - vertex 22.8505 1.9828 -3 - endloop - endfacet - facet normal 0.936019 -0.35195 0 - outer loop - vertex 22.7784 2.30129 0 - vertex 23.2082 3.44442 -3 - vertex 23.2082 3.44442 0 - endloop - endfacet - facet normal 0.936019 -0.35195 0 - outer loop - vertex 23.2082 3.44442 -3 - vertex 22.7784 2.30129 0 - vertex 22.7784 2.30129 -3 - endloop - endfacet - facet normal 0.913236 -0.40743 0 - outer loop - vertex 23.2082 3.44442 0 - vertex 23.5377 4.18291 -3 - vertex 23.5377 4.18291 0 - endloop - endfacet - facet normal 0.913236 -0.40743 0 - outer loop - vertex 23.5377 4.18291 -3 - vertex 23.2082 3.44442 0 - vertex 23.2082 3.44442 -3 - endloop - endfacet - facet normal 0.997125 -0.0757773 0 - outer loop - vertex 23.5377 4.18291 0 - vertex 23.5966 4.95794 -3 - vertex 23.5966 4.95794 0 - endloop - endfacet - facet normal 0.997125 -0.0757773 0 - outer loop - vertex 23.5966 4.95794 -3 - vertex 23.5377 4.18291 0 - vertex 23.5377 4.18291 -3 - endloop - endfacet - facet normal 0.969407 0.245457 0 - outer loop - vertex 23.5966 4.95794 0 - vertex 23.3811 5.8089 -3 - vertex 23.3811 5.8089 0 - endloop - endfacet - facet normal 0.969407 0.245457 0 - outer loop - vertex 23.3811 5.8089 -3 - vertex 23.5966 4.95794 0 - vertex 23.5966 4.95794 -3 - endloop - endfacet - facet normal 0.890531 0.454923 0 - outer loop - vertex 23.3811 5.8089 0 - vertex 22.8875 6.77518 -3 - vertex 22.8875 6.77518 0 - endloop - endfacet - facet normal 0.890531 0.454923 0 - outer loop - vertex 22.8875 6.77518 -3 - vertex 23.3811 5.8089 0 - vertex 23.3811 5.8089 -3 - endloop - endfacet - facet normal 0.77704 0.629451 0 - outer loop - vertex 22.8875 6.77518 0 - vertex 21.7142 8.22365 -3 - vertex 21.7142 8.22365 0 - endloop - endfacet - facet normal 0.77704 0.629451 0 - outer loop - vertex 21.7142 8.22365 -3 - vertex 22.8875 6.77518 0 - vertex 22.8875 6.77518 -3 - endloop - endfacet - facet normal 0.585146 0.810928 -0 - outer loop - vertex 21.7142 8.22365 -3 - vertex 19.7157 9.66569 0 - vertex 21.7142 8.22365 0 - endloop - endfacet - facet normal 0.585146 0.810928 0 - outer loop - vertex 19.7157 9.66569 0 - vertex 21.7142 8.22365 -3 - vertex 19.7157 9.66569 -3 - endloop - endfacet - facet normal 0.415721 0.909492 -0 - outer loop - vertex 19.7157 9.66569 -3 - vertex 18.6847 10.137 0 - vertex 19.7157 9.66569 0 - endloop - endfacet - facet normal 0.415721 0.909492 0 - outer loop - vertex 18.6847 10.137 0 - vertex 19.7157 9.66569 -3 - vertex 18.6847 10.137 -3 - endloop - endfacet - facet normal 0.146348 0.989233 -0 - outer loop - vertex 18.6847 10.137 -3 - vertex 17.337 10.3363 0 - vertex 18.6847 10.137 0 - endloop - endfacet - facet normal 0.146348 0.989233 0 - outer loop - vertex 17.337 10.3363 0 - vertex 18.6847 10.137 -3 - vertex 17.337 10.3363 -3 - endloop - endfacet - facet normal -0.00363232 0.999993 0 - outer loop - vertex 17.337 10.3363 -3 - vertex 15.9933 10.3315 0 - vertex 17.337 10.3363 0 - endloop - endfacet - facet normal -0.00363232 0.999993 0 - outer loop - vertex 15.9933 10.3315 0 - vertex 17.337 10.3363 -3 - vertex 15.9933 10.3315 -3 - endloop - endfacet - facet normal -0.520358 0.853948 0 - outer loop - vertex 15.9933 10.3315 -3 - vertex 15.6762 10.1383 0 - vertex 15.9933 10.3315 0 - endloop - endfacet - facet normal -0.520358 0.853948 0 - outer loop - vertex 15.6762 10.1383 0 - vertex 15.9933 10.3315 -3 - vertex 15.6762 10.1383 -3 - endloop - endfacet - facet normal -0.775154 0.631772 0 - outer loop - vertex 15.3572 9.74689 -3 - vertex 15.6762 10.1383 0 - vertex 15.6762 10.1383 -3 - endloop - endfacet - facet normal -0.775154 0.631772 0 - outer loop - vertex 15.6762 10.1383 0 - vertex 15.3572 9.74689 -3 - vertex 15.3572 9.74689 0 - endloop - endfacet - facet normal -0.885944 0.463791 0 - outer loop - vertex 14.9426 8.95486 -3 - vertex 15.3572 9.74689 0 - vertex 15.3572 9.74689 -3 - endloop - endfacet - facet normal -0.885944 0.463791 0 - outer loop - vertex 15.3572 9.74689 0 - vertex 14.9426 8.95486 -3 - vertex 14.9426 8.95486 0 - endloop - endfacet - facet normal -0.999951 -0.00991933 0 - outer loop - vertex 14.9551 7.69881 -3 - vertex 14.9426 8.95486 0 - vertex 14.9426 8.95486 -3 - endloop - endfacet - facet normal -0.999951 -0.00991933 0 - outer loop - vertex 14.9426 8.95486 0 - vertex 14.9551 7.69881 -3 - vertex 14.9551 7.69881 0 - endloop - endfacet - facet normal -0.987205 -0.159458 0 - outer loop - vertex 15.3368 5.33522 -3 - vertex 14.9551 7.69881 0 - vertex 14.9551 7.69881 -3 - endloop - endfacet - facet normal -0.987205 -0.159458 0 - outer loop - vertex 14.9551 7.69881 0 - vertex 15.3368 5.33522 -3 - vertex 15.3368 5.33522 0 - endloop - endfacet - facet normal -0.962213 -0.272299 0 - outer loop - vertex 16.0239 2.90744 -3 - vertex 15.3368 5.33522 0 - vertex 15.3368 5.33522 -3 - endloop - endfacet - facet normal -0.962213 -0.272299 0 - outer loop - vertex 15.3368 5.33522 0 - vertex 16.0239 2.90744 -3 - vertex 16.0239 2.90744 0 - endloop - endfacet - facet normal -0.924811 -0.380427 0 - outer loop - vertex 16.8564 0.883682 -3 - vertex 16.0239 2.90744 0 - vertex 16.0239 2.90744 -3 - endloop - endfacet - facet normal -0.924811 -0.380427 0 - outer loop - vertex 16.0239 2.90744 0 - vertex 16.8564 0.883682 -3 - vertex 16.8564 0.883682 0 - endloop - endfacet - facet normal -0.815204 -0.579174 0 - outer loop - vertex 17.6745 -0.267811 -3 - vertex 16.8564 0.883682 0 - vertex 16.8564 0.883682 -3 - endloop - endfacet - facet normal -0.815204 -0.579174 0 - outer loop - vertex 16.8564 0.883682 0 - vertex 17.6745 -0.267811 -3 - vertex 17.6745 -0.267811 0 - endloop - endfacet - facet normal -0.318326 -0.947981 0 - outer loop - vertex 17.6745 -0.267811 -3 - vertex 18.2674 -0.466912 0 - vertex 17.6745 -0.267811 0 - endloop - endfacet - facet normal -0.318326 -0.947981 -0 - outer loop - vertex 18.2674 -0.466912 0 - vertex 17.6745 -0.267811 -3 - vertex 18.2674 -0.466912 -3 - endloop - endfacet - facet normal 0.268508 -0.963277 0 - outer loop - vertex 18.2674 -0.466912 -3 - vertex 19.4865 -0.127098 0 - vertex 18.2674 -0.466912 0 - endloop - endfacet - facet normal 0.268508 -0.963277 0 - outer loop - vertex 19.4865 -0.127098 0 - vertex 18.2674 -0.466912 -3 - vertex 19.4865 -0.127098 -3 - endloop - endfacet - facet normal 0.219889 -0.975525 0 - outer loop - vertex 19.4865 -0.127098 -3 - vertex 21.0282 0.220415 0 - vertex 19.4865 -0.127098 0 - endloop - endfacet - facet normal 0.219889 -0.975525 0 - outer loop - vertex 21.0282 0.220415 0 - vertex 19.4865 -0.127098 -3 - vertex 21.0282 0.220415 -3 - endloop - endfacet - facet normal -0.998758 -0.0498338 0 - outer loop - vertex 21.0968 -1.15452 -3 - vertex 21.0282 0.220415 0 - vertex 21.0282 0.220415 -3 - endloop - endfacet - facet normal -0.998758 -0.0498338 0 - outer loop - vertex 21.0282 0.220415 0 - vertex 21.0968 -1.15452 -3 - vertex 21.0968 -1.15452 0 - endloop - endfacet - facet normal -0.983918 0.178619 0 - outer loop - vertex 20.9081 -2.19366 -3 - vertex 21.0968 -1.15452 0 - vertex 21.0968 -1.15452 -3 - endloop - endfacet - facet normal -0.983918 0.178619 0 - outer loop - vertex 21.0968 -1.15452 0 - vertex 20.9081 -2.19366 -3 - vertex 20.9081 -2.19366 0 - endloop - endfacet - facet normal -0.856849 0.515568 0 - outer loop - vertex 20.4179 -3.0084 -3 - vertex 20.9081 -2.19366 0 - vertex 20.9081 -2.19366 -3 - endloop - endfacet - facet normal -0.856849 0.515568 0 - outer loop - vertex 20.9081 -2.19366 0 - vertex 20.4179 -3.0084 -3 - vertex 20.4179 -3.0084 0 - endloop - endfacet - facet normal -0.631353 0.775495 0 - outer loop - vertex 20.4179 -3.0084 -3 - vertex 19.4334 -3.80993 0 - vertex 20.4179 -3.0084 0 - endloop - endfacet - facet normal -0.631353 0.775495 0 - outer loop - vertex 19.4334 -3.80993 0 - vertex 20.4179 -3.0084 -3 - vertex 19.4334 -3.80993 -3 - endloop - endfacet - facet normal -0.513213 0.858261 0 - outer loop - vertex 19.4334 -3.80993 -3 - vertex 17.7619 -4.80944 0 - vertex 19.4334 -3.80993 0 - endloop - endfacet - facet normal -0.513213 0.858261 0 - outer loop - vertex 17.7619 -4.80944 0 - vertex 19.4334 -3.80993 -3 - vertex 17.7619 -4.80944 -3 - endloop - endfacet - facet normal -0.460069 0.887883 0 - outer loop - vertex 17.7619 -4.80944 -3 - vertex 15.0012 -6.23992 0 - vertex 17.7619 -4.80944 0 - endloop - endfacet - facet normal -0.460069 0.887883 0 - outer loop - vertex 15.0012 -6.23992 0 - vertex 17.7619 -4.80944 -3 - vertex 15.0012 -6.23992 -3 - endloop - endfacet - facet normal -0.358805 0.933413 0 - outer loop - vertex 15.0012 -6.23992 -3 - vertex 12.6103 -7.15898 0 - vertex 15.0012 -6.23992 0 - endloop - endfacet - facet normal -0.358805 0.933413 0 - outer loop - vertex 12.6103 -7.15898 0 - vertex 15.0012 -6.23992 -3 - vertex 12.6103 -7.15898 -3 - endloop - endfacet - facet normal -0.211321 0.977417 0 - outer loop - vertex 12.6103 -7.15898 -3 - vertex 10.2421 -7.67101 0 - vertex 12.6103 -7.15898 0 - endloop - endfacet - facet normal -0.211321 0.977417 0 - outer loop - vertex 10.2421 -7.67101 0 - vertex 12.6103 -7.15898 -3 - vertex 10.2421 -7.67101 -3 - endloop - endfacet - facet normal -0.0775281 0.99699 0 - outer loop - vertex 10.2421 -7.67101 -3 - vertex 7.54923 -7.88041 0 - vertex 10.2421 -7.67101 0 - endloop - endfacet - facet normal -0.0775281 0.99699 0 - outer loop - vertex 7.54923 -7.88041 0 - vertex 10.2421 -7.67101 -3 - vertex 7.54923 -7.88041 -3 - endloop - endfacet - facet normal -0.00181695 0.999998 0 - outer loop - vertex 7.54923 -7.88041 -3 - vertex 5.03167 -7.88498 0 - vertex 7.54923 -7.88041 0 - endloop - endfacet - facet normal -0.00181695 0.999998 0 - outer loop - vertex 5.03167 -7.88498 0 - vertex 7.54923 -7.88041 -3 - vertex 5.03167 -7.88498 -3 - endloop - endfacet - facet normal 0.239055 0.971006 -0 - outer loop - vertex 5.03167 -7.88498 -3 - vertex 3.854 -7.59505 0 - vertex 5.03167 -7.88498 0 - endloop - endfacet - facet normal 0.239055 0.971006 0 - outer loop - vertex 3.854 -7.59505 0 - vertex 5.03167 -7.88498 -3 - vertex 3.854 -7.59505 -3 - endloop - endfacet - facet normal 0.512147 0.858898 -0 - outer loop - vertex 3.854 -7.59505 -3 - vertex 1.04019 -5.91722 0 - vertex 3.854 -7.59505 0 - endloop - endfacet - facet normal 0.512147 0.858898 0 - outer loop - vertex 1.04019 -5.91722 0 - vertex 3.854 -7.59505 -3 - vertex 1.04019 -5.91722 -3 - endloop - endfacet - facet normal 0.520307 0.85398 -0 - outer loop - vertex 1.04019 -5.91722 -3 - vertex -2.05653 -4.03047 0 - vertex 1.04019 -5.91722 0 - endloop - endfacet - facet normal 0.520307 0.85398 0 - outer loop - vertex -2.05653 -4.03047 0 - vertex 1.04019 -5.91722 -3 - vertex -2.05653 -4.03047 -3 - endloop - endfacet - facet normal 0.582306 0.812969 -0 - outer loop - vertex -2.05653 -4.03047 -3 - vertex -3.45272 -3.03042 0 - vertex -2.05653 -4.03047 0 - endloop - endfacet - facet normal 0.582306 0.812969 0 - outer loop - vertex -3.45272 -3.03042 0 - vertex -2.05653 -4.03047 -3 - vertex -3.45272 -3.03042 -3 - endloop - endfacet - facet normal 0.814407 0.580294 0 - outer loop - vertex -3.45272 -3.03042 0 - vertex -3.71458 -2.66291 -3 - vertex -3.71458 -2.66291 0 - endloop - endfacet - facet normal 0.814407 0.580294 0 - outer loop - vertex -3.71458 -2.66291 -3 - vertex -3.45272 -3.03042 0 - vertex -3.45272 -3.03042 -3 - endloop - endfacet - facet normal 0.667074 -0.744991 0 - outer loop - vertex -3.71458 -2.66291 -3 - vertex -3.55278 -2.51803 0 - vertex -3.71458 -2.66291 0 - endloop - endfacet - facet normal 0.667074 -0.744991 0 - outer loop - vertex -3.55278 -2.51803 0 - vertex -3.71458 -2.66291 -3 - vertex -3.55278 -2.51803 -3 - endloop - endfacet - facet normal -0.396625 -0.917981 0 - outer loop - vertex -3.55278 -2.51803 -3 - vertex -1.72768 -3.30659 0 - vertex -3.55278 -2.51803 0 - endloop - endfacet - facet normal -0.396625 -0.917981 -0 - outer loop - vertex -1.72768 -3.30659 0 - vertex -3.55278 -2.51803 -3 - vertex -1.72768 -3.30659 -3 - endloop - endfacet - facet normal -0.417951 -0.90847 0 - outer loop - vertex -1.72768 -3.30659 -3 - vertex 1.09298 -4.60426 0 - vertex -1.72768 -3.30659 0 - endloop - endfacet - facet normal -0.417951 -0.90847 -0 - outer loop - vertex 1.09298 -4.60426 0 - vertex -1.72768 -3.30659 -3 - vertex 1.09298 -4.60426 -3 - endloop - endfacet - facet normal -0.324179 -0.945996 0 - outer loop - vertex 1.09298 -4.60426 -3 - vertex 3.9592 -5.58648 0 - vertex 1.09298 -4.60426 0 - endloop - endfacet - facet normal -0.324179 -0.945996 -0 - outer loop - vertex 3.9592 -5.58648 0 - vertex 1.09298 -4.60426 -3 - vertex 3.9592 -5.58648 -3 - endloop - endfacet - facet normal -0.208038 -0.978121 0 - outer loop - vertex 3.9592 -5.58648 -3 - vertex 5.81183 -5.98051 0 - vertex 3.9592 -5.58648 0 - endloop - endfacet - facet normal -0.208038 -0.978121 -0 - outer loop - vertex 5.81183 -5.98051 0 - vertex 3.9592 -5.58648 -3 - vertex 5.81183 -5.98051 -3 - endloop - endfacet - facet normal 0.0684734 -0.997653 0 - outer loop - vertex 5.81183 -5.98051 -3 - vertex 7.21237 -5.88439 0 - vertex 5.81183 -5.98051 0 - endloop - endfacet - facet normal 0.0684734 -0.997653 0 - outer loop - vertex 7.21237 -5.88439 0 - vertex 5.81183 -5.98051 -3 - vertex 7.21237 -5.88439 -3 - endloop - endfacet - facet normal 0.219818 -0.975541 0 - outer loop - vertex 7.21237 -5.88439 -3 - vertex 7.79727 -5.75259 0 - vertex 7.21237 -5.88439 0 - endloop - endfacet - facet normal 0.219818 -0.975541 0 - outer loop - vertex 7.79727 -5.75259 0 - vertex 7.21237 -5.88439 -3 - vertex 7.79727 -5.75259 -3 - endloop - endfacet - facet normal 0.71334 0.700818 0 - outer loop - vertex 7.79727 -5.75259 0 - vertex 7.03104 -4.97268 -3 - vertex 7.03104 -4.97268 0 - endloop - endfacet - facet normal 0.71334 0.700818 0 - outer loop - vertex 7.03104 -4.97268 -3 - vertex 7.79727 -5.75259 0 - vertex 7.79727 -5.75259 -3 - endloop - endfacet - facet normal 0.78473 0.619838 0 - outer loop - vertex 7.03104 -4.97268 0 - vertex 5.97791 -3.63939 -3 - vertex 5.97791 -3.63939 0 - endloop - endfacet - facet normal 0.78473 0.619838 0 - outer loop - vertex 5.97791 -3.63939 -3 - vertex 7.03104 -4.97268 0 - vertex 7.03104 -4.97268 -3 - endloop - endfacet - facet normal 0.861751 0.507331 0 - outer loop - vertex 5.97791 -3.63939 0 - vertex 5.02006 -2.01238 -3 - vertex 5.02006 -2.01238 0 - endloop - endfacet - facet normal 0.861751 0.507331 0 - outer loop - vertex 5.02006 -2.01238 -3 - vertex 5.97791 -3.63939 0 - vertex 5.97791 -3.63939 -3 - endloop - endfacet - facet normal 0.918179 0.396167 0 - outer loop - vertex 5.02006 -2.01238 0 - vertex 4.37015 -0.506109 -3 - vertex 4.37015 -0.506109 0 - endloop - endfacet - facet normal 0.918179 0.396167 0 - outer loop - vertex 4.37015 -0.506109 -3 - vertex 5.02006 -2.01238 0 - vertex 5.02006 -2.01238 -3 - endloop - endfacet - facet normal 0.99125 0.131995 0 - outer loop - vertex 4.37015 -0.506109 0 - vertex 4.24084 0.464987 -3 - vertex 4.24084 0.464987 0 - endloop - endfacet - facet normal 0.99125 0.131995 0 - outer loop - vertex 4.24084 0.464987 -3 - vertex 4.37015 -0.506109 0 - vertex 4.37015 -0.506109 -3 - endloop - endfacet - facet normal 0.880686 -0.473701 0 - outer loop - vertex 4.24084 0.464987 0 - vertex 4.39665 0.754678 -3 - vertex 4.39665 0.754678 0 - endloop - endfacet - facet normal 0.880686 -0.473701 0 - outer loop - vertex 4.39665 0.754678 -3 - vertex 4.24084 0.464987 0 - vertex 4.24084 0.464987 -3 - endloop - endfacet - facet normal -0.827333 -0.561712 0 - outer loop - vertex 4.6091 0.441775 -3 - vertex 4.39665 0.754678 0 - vertex 4.39665 0.754678 -3 - endloop - endfacet - facet normal -0.827333 -0.561712 0 - outer loop - vertex 4.39665 0.754678 0 - vertex 4.6091 0.441775 -3 - vertex 4.6091 0.441775 0 - endloop - endfacet - facet normal -0.774222 -0.632914 0 - outer loop - vertex 6.41545 -1.76788 -3 - vertex 4.6091 0.441775 0 - vertex 4.6091 0.441775 -3 - endloop - endfacet - facet normal -0.774222 -0.632914 0 - outer loop - vertex 4.6091 0.441775 0 - vertex 6.41545 -1.76788 -3 - vertex 6.41545 -1.76788 0 - endloop - endfacet - facet normal -0.707099 -0.707114 0 - outer loop - vertex 6.41545 -1.76788 -3 - vertex 7.74282 -3.09522 0 - vertex 6.41545 -1.76788 0 - endloop - endfacet - facet normal -0.707099 -0.707114 -0 - outer loop - vertex 7.74282 -3.09522 0 - vertex 6.41545 -1.76788 -3 - vertex 7.74282 -3.09522 -3 - endloop - endfacet - facet normal -0.583644 -0.812009 0 - outer loop - vertex 7.74282 -3.09522 -3 - vertex 9.01294 -4.00814 0 - vertex 7.74282 -3.09522 0 - endloop - endfacet - facet normal -0.583644 -0.812009 -0 - outer loop - vertex 9.01294 -4.00814 0 - vertex 7.74282 -3.09522 -3 - vertex 9.01294 -4.00814 -3 - endloop - endfacet - facet normal -0.385065 -0.92289 0 - outer loop - vertex 9.01294 -4.00814 -3 - vertex 10.2758 -4.53506 0 - vertex 9.01294 -4.00814 0 - endloop - endfacet - facet normal -0.385065 -0.92289 -0 - outer loop - vertex 10.2758 -4.53506 0 - vertex 9.01294 -4.00814 -3 - vertex 10.2758 -4.53506 -3 - endloop - endfacet - facet normal -0.128613 -0.991695 0 - outer loop - vertex 10.2758 -4.53506 -3 - vertex 11.5814 -4.70438 0 - vertex 10.2758 -4.53506 0 - endloop - endfacet - facet normal -0.128613 -0.991695 -0 - outer loop - vertex 11.5814 -4.70438 0 - vertex 10.2758 -4.53506 -3 - vertex 11.5814 -4.70438 -3 - endloop - endfacet - facet normal 0.142467 -0.9898 0 - outer loop - vertex 11.5814 -4.70438 -3 - vertex 12.4032 -4.58609 0 - vertex 11.5814 -4.70438 0 - endloop - endfacet - facet normal 0.142467 -0.9898 0 - outer loop - vertex 12.4032 -4.58609 0 - vertex 11.5814 -4.70438 -3 - vertex 12.4032 -4.58609 -3 - endloop - endfacet - facet normal 0.390375 -0.920656 0 - outer loop - vertex 12.4032 -4.58609 -3 - vertex 13.172 -4.2601 0 - vertex 12.4032 -4.58609 0 - endloop - endfacet - facet normal 0.390375 -0.920656 0 - outer loop - vertex 13.172 -4.2601 0 - vertex 12.4032 -4.58609 -3 - vertex 13.172 -4.2601 -3 - endloop - endfacet - facet normal 0.607582 -0.794257 0 - outer loop - vertex 13.172 -4.2601 -3 - vertex 13.8131 -3.7697 0 - vertex 13.172 -4.2601 0 - endloop - endfacet - facet normal 0.607582 -0.794257 0 - outer loop - vertex 13.8131 -3.7697 0 - vertex 13.172 -4.2601 -3 - vertex 13.8131 -3.7697 -3 - endloop - endfacet - facet normal 0.812619 -0.582795 0 - outer loop - vertex 13.8131 -3.7697 0 - vertex 14.2516 -3.15818 -3 - vertex 14.2516 -3.15818 0 - endloop - endfacet - facet normal 0.812619 -0.582795 0 - outer loop - vertex 14.2516 -3.15818 -3 - vertex 13.8131 -3.7697 0 - vertex 13.8131 -3.7697 -3 - endloop - endfacet - facet normal 0.980799 -0.195021 0 - outer loop - vertex 14.2516 -3.15818 0 - vertex 14.333 -2.7489 -3 - vertex 14.333 -2.7489 0 - endloop - endfacet - facet normal 0.980799 -0.195021 0 - outer loop - vertex 14.333 -2.7489 -3 - vertex 14.2516 -3.15818 0 - vertex 14.2516 -3.15818 -3 - endloop - endfacet - facet normal 0.98573 0.168336 0 - outer loop - vertex 14.333 -2.7489 0 - vertex 14.2455 -2.23644 -3 - vertex 14.2455 -2.23644 0 - endloop - endfacet - facet normal 0.98573 0.168336 0 - outer loop - vertex 14.2455 -2.23644 -3 - vertex 14.333 -2.7489 0 - vertex 14.333 -2.7489 -3 - endloop - endfacet - facet normal 0.892341 0.451362 0 - outer loop - vertex 14.2455 -2.23644 0 - vertex 13.5923 -0.94501 -3 - vertex 13.5923 -0.94501 0 - endloop - endfacet - facet normal 0.892341 0.451362 0 - outer loop - vertex 13.5923 -0.94501 -3 - vertex 14.2455 -2.23644 0 - vertex 14.2455 -2.23644 -3 - endloop - endfacet - facet normal 0.784902 0.61962 0 - outer loop - vertex 13.5923 -0.94501 0 - vertex 12.3489 0.629998 -3 - vertex 12.3489 0.629998 0 - endloop - endfacet - facet normal 0.784902 0.61962 0 - outer loop - vertex 12.3489 0.629998 -3 - vertex 13.5923 -0.94501 0 - vertex 13.5923 -0.94501 -3 - endloop - endfacet - facet normal 0.706306 0.707906 -0 - outer loop - vertex 12.3489 0.629998 -3 - vertex 10.5724 2.40247 0 - vertex 12.3489 0.629998 0 - endloop - endfacet - facet normal 0.706306 0.707906 0 - outer loop - vertex 10.5724 2.40247 0 - vertex 12.3489 0.629998 -3 - vertex 10.5724 2.40247 -3 - endloop - endfacet - facet normal 0.641095 0.767462 -0 - outer loop - vertex 10.5724 2.40247 -3 - vertex 9.13441 3.60373 0 - vertex 10.5724 2.40247 0 - endloop - endfacet - facet normal 0.641095 0.767462 0 - outer loop - vertex 9.13441 3.60373 0 - vertex 10.5724 2.40247 -3 - vertex 9.13441 3.60373 -3 - endloop - endfacet - facet normal 0.56747 0.823394 -0 - outer loop - vertex 9.13441 3.60373 -3 - vertex 8.18559 4.25764 0 - vertex 9.13441 3.60373 0 - endloop - endfacet - facet normal 0.56747 0.823394 0 - outer loop - vertex 8.18559 4.25764 0 - vertex 9.13441 3.60373 -3 - vertex 8.18559 4.25764 -3 - endloop - endfacet - facet normal 0.457713 0.8891 -0 - outer loop - vertex 8.18559 4.25764 -3 - vertex 5.26682 5.76024 0 - vertex 8.18559 4.25764 0 - endloop - endfacet - facet normal 0.457713 0.8891 0 - outer loop - vertex 5.26682 5.76024 0 - vertex 8.18559 4.25764 -3 - vertex 5.26682 5.76024 -3 - endloop - endfacet - facet normal 0.356921 0.934135 -0 - outer loop - vertex 5.26682 5.76024 -3 - vertex 1.66409 7.13679 0 - vertex 5.26682 5.76024 0 - endloop - endfacet - facet normal 0.356921 0.934135 0 - outer loop - vertex 1.66409 7.13679 0 - vertex 5.26682 5.76024 -3 - vertex 1.66409 7.13679 -3 - endloop - endfacet - facet normal 0.389896 0.920859 -0 - outer loop - vertex 1.66409 7.13679 -3 - vertex -0.248642 7.94666 0 - vertex 1.66409 7.13679 0 - endloop - endfacet - facet normal 0.389896 0.920859 0 - outer loop - vertex -0.248642 7.94666 0 - vertex 1.66409 7.13679 -3 - vertex -0.248642 7.94666 -3 - endloop - endfacet - facet normal 0.471857 0.881675 -0 - outer loop - vertex -0.248642 7.94666 -3 - vertex -2.78119 9.30203 0 - vertex -0.248642 7.94666 0 - endloop - endfacet - facet normal 0.471857 0.881675 0 - outer loop - vertex -2.78119 9.30203 0 - vertex -0.248642 7.94666 -3 - vertex -2.78119 9.30203 -3 - endloop - endfacet - facet normal 0.524404 0.851469 -0 - outer loop - vertex -2.78119 9.30203 -3 - vertex -4.99153 10.6633 0 - vertex -2.78119 9.30203 0 - endloop - endfacet - facet normal 0.524404 0.851469 0 - outer loop - vertex -4.99153 10.6633 0 - vertex -2.78119 9.30203 -3 - vertex -4.99153 10.6633 -3 - endloop - endfacet - facet normal 0.658419 0.752652 -0 - outer loop - vertex -4.99153 10.6633 -3 - vertex -5.93765 11.491 0 - vertex -4.99153 10.6633 0 - endloop - endfacet - facet normal 0.658419 0.752652 0 - outer loop - vertex -5.93765 11.491 0 - vertex -4.99153 10.6633 -3 - vertex -5.93765 11.491 -3 - endloop - endfacet - facet normal 0.579458 -0.815002 0 - outer loop - vertex -5.93765 11.491 -3 - vertex -5.71478 11.6495 0 - vertex -5.93765 11.491 0 - endloop - endfacet - facet normal 0.579458 -0.815002 0 - outer loop - vertex -5.71478 11.6495 0 - vertex -5.93765 11.491 -3 - vertex -5.71478 11.6495 -3 - endloop - endfacet - facet normal 0.0440908 -0.999028 0 - outer loop - vertex -5.71478 11.6495 -3 - vertex -5.07797 11.6776 0 - vertex -5.71478 11.6495 0 - endloop - endfacet - facet normal 0.0440908 -0.999028 0 - outer loop - vertex -5.07797 11.6776 0 - vertex -5.71478 11.6495 -3 - vertex -5.07797 11.6776 -3 - endloop - endfacet - facet normal -0.139075 -0.990282 0 - outer loop - vertex -5.07797 11.6776 -3 - vertex -2.75335 11.3511 0 - vertex -5.07797 11.6776 0 - endloop - endfacet - facet normal -0.139075 -0.990282 -0 - outer loop - vertex -2.75335 11.3511 0 - vertex -5.07797 11.6776 -3 - vertex -2.75335 11.3511 -3 - endloop - endfacet - facet normal -0.139152 -0.990271 0 - outer loop - vertex -2.75335 11.3511 -3 - vertex -1.46211 11.1697 0 - vertex -2.75335 11.3511 0 - endloop - endfacet - facet normal -0.139152 -0.990271 -0 - outer loop - vertex -1.46211 11.1697 0 - vertex -2.75335 11.3511 -3 - vertex -1.46211 11.1697 -3 - endloop - endfacet - facet normal 0.0257838 -0.999668 0 - outer loop - vertex -1.46211 11.1697 -3 - vertex -0.394194 11.1972 0 - vertex -1.46211 11.1697 0 - endloop - endfacet - facet normal 0.0257838 -0.999668 0 - outer loop - vertex -0.394194 11.1972 0 - vertex -1.46211 11.1697 -3 - vertex -0.394194 11.1972 -3 - endloop - endfacet - facet normal 0.258065 -0.966128 0 - outer loop - vertex -0.394194 11.1972 -3 - vertex 0.535115 11.4454 0 - vertex -0.394194 11.1972 0 - endloop - endfacet - facet normal 0.258065 -0.966128 0 - outer loop - vertex 0.535115 11.4454 0 - vertex -0.394194 11.1972 -3 - vertex 0.535115 11.4454 -3 - endloop - endfacet - facet normal 0.481248 -0.876585 0 - outer loop - vertex 0.535115 11.4454 -3 - vertex 1.41055 11.926 0 - vertex 0.535115 11.4454 0 - endloop - endfacet - facet normal 0.481248 -0.876585 0 - outer loop - vertex 1.41055 11.926 0 - vertex 0.535115 11.4454 -3 - vertex 1.41055 11.926 -3 - endloop - endfacet - facet normal 0.671564 -0.740947 0 - outer loop - vertex 1.41055 11.926 -3 - vertex 1.87173 12.344 0 - vertex 1.41055 11.926 0 - endloop - endfacet - facet normal 0.671564 -0.740947 0 - outer loop - vertex 1.87173 12.344 0 - vertex 1.41055 11.926 -3 - vertex 1.87173 12.344 -3 - endloop - endfacet - facet normal 0.998006 0.0631228 0 - outer loop - vertex 1.87173 12.344 0 - vertex 1.8467 12.7398 -3 - vertex 1.8467 12.7398 0 - endloop - endfacet - facet normal 0.998006 0.0631228 0 - outer loop - vertex 1.8467 12.7398 -3 - vertex 1.87173 12.344 0 - vertex 1.87173 12.344 -3 - endloop - endfacet - facet normal 0.790564 0.612379 0 - outer loop - vertex 1.8467 12.7398 0 - vertex 1.50002 13.1874 -3 - vertex 1.50002 13.1874 0 - endloop - endfacet - facet normal 0.790564 0.612379 0 - outer loop - vertex 1.50002 13.1874 -3 - vertex 1.8467 12.7398 0 - vertex 1.8467 12.7398 -3 - endloop - endfacet - facet normal 0.55001 0.835158 -0 - outer loop - vertex 1.50002 13.1874 -3 - vertex 0.918757 13.5702 0 - vertex 1.50002 13.1874 0 - endloop - endfacet - facet normal 0.55001 0.835158 0 - outer loop - vertex 0.918757 13.5702 0 - vertex 1.50002 13.1874 -3 - vertex 0.918757 13.5702 -3 - endloop - endfacet - facet normal 0.293762 0.955879 -0 - outer loop - vertex 0.918757 13.5702 -3 - vertex -0.928844 14.138 0 - vertex 0.918757 13.5702 0 - endloop - endfacet - facet normal 0.293762 0.955879 0 - outer loop - vertex -0.928844 14.138 0 - vertex 0.918757 13.5702 -3 - vertex -0.928844 14.138 -3 - endloop - endfacet - facet normal 0.108589 0.994087 -0 - outer loop - vertex -0.928844 14.138 -3 - vertex -3.65881 14.4362 0 - vertex -0.928844 14.138 0 - endloop - endfacet - facet normal 0.108589 0.994087 0 - outer loop - vertex -3.65881 14.4362 0 - vertex -0.928844 14.138 -3 - vertex -3.65881 14.4362 -3 - endloop - endfacet - facet normal 0.00602839 0.999982 -0 - outer loop - vertex -3.65881 14.4362 -3 - vertex -7.23385 14.4578 0 - vertex -3.65881 14.4362 0 - endloop - endfacet - facet normal 0.00602839 0.999982 0 - outer loop - vertex -7.23385 14.4578 0 - vertex -3.65881 14.4362 -3 - vertex -7.23385 14.4578 -3 - endloop - endfacet - facet normal -0.0644585 0.99792 0 - outer loop - vertex -7.23385 14.4578 -3 - vertex -10.6367 14.238 0 - vertex -7.23385 14.4578 0 - endloop - endfacet - facet normal -0.0644585 0.99792 0 - outer loop - vertex -10.6367 14.238 0 - vertex -7.23385 14.4578 -3 - vertex -10.6367 14.238 -3 - endloop - endfacet - facet normal -0.276015 0.961153 0 - outer loop - vertex -10.6367 14.238 -3 - vertex -13.7227 13.3517 0 - vertex -10.6367 14.238 0 - endloop - endfacet - facet normal -0.276015 0.961153 0 - outer loop - vertex -13.7227 13.3517 0 - vertex -10.6367 14.238 -3 - vertex -13.7227 13.3517 -3 - endloop - endfacet - facet normal -0.25467 0.967028 0 - outer loop - vertex -13.7227 13.3517 -3 - vertex -17.5299 12.3491 0 - vertex -13.7227 13.3517 0 - endloop - endfacet - facet normal -0.25467 0.967028 0 - outer loop - vertex -17.5299 12.3491 0 - vertex -13.7227 13.3517 -3 - vertex -17.5299 12.3491 -3 - endloop - endfacet - facet normal -0.135841 0.990731 0 - outer loop - vertex -17.5299 12.3491 -3 - vertex -20.0298 12.0063 0 - vertex -17.5299 12.3491 0 - endloop - endfacet - facet normal -0.135841 0.990731 0 - outer loop - vertex -20.0298 12.0063 0 - vertex -17.5299 12.3491 -3 - vertex -20.0298 12.0063 -3 - endloop - endfacet - facet normal -0.101855 0.994799 0 - outer loop - vertex -20.0298 12.0063 -3 - vertex -22.4428 11.7593 0 - vertex -20.0298 12.0063 0 - endloop - endfacet - facet normal -0.101855 0.994799 0 - outer loop - vertex -22.4428 11.7593 0 - vertex -20.0298 12.0063 -3 - vertex -22.4428 11.7593 -3 - endloop - endfacet - facet normal -0.0308153 0.999525 0 - outer loop - vertex -22.4428 11.7593 -3 - vertex -25.7097 11.6586 0 - vertex -22.4428 11.7593 0 - endloop - endfacet - facet normal -0.0308153 0.999525 0 - outer loop - vertex -25.7097 11.6586 0 - vertex -22.4428 11.7593 -3 - vertex -25.7097 11.6586 -3 - endloop - endfacet - facet normal 0.0184303 0.99983 -0 - outer loop - vertex -25.7097 11.6586 -3 - vertex -28.6588 11.7129 0 - vertex -25.7097 11.6586 0 - endloop - endfacet - facet normal 0.0184303 0.99983 0 - outer loop - vertex -28.6588 11.7129 0 - vertex -25.7097 11.6586 -3 - vertex -28.6588 11.7129 -3 - endloop - endfacet - facet normal 0.147852 0.989009 -0 - outer loop - vertex -28.6588 11.7129 -3 - vertex -30.1182 11.9311 0 - vertex -28.6588 11.7129 0 - endloop - endfacet - facet normal 0.147852 0.989009 0 - outer loop - vertex -30.1182 11.9311 0 - vertex -28.6588 11.7129 -3 - vertex -30.1182 11.9311 -3 - endloop - endfacet - facet normal 0.940295 0.34036 0 - outer loop - vertex -30.1182 11.9311 0 - vertex -30.3887 12.6783 -3 - vertex -30.3887 12.6783 0 - endloop - endfacet - facet normal 0.940295 0.34036 0 - outer loop - vertex -30.3887 12.6783 -3 - vertex -30.1182 11.9311 0 - vertex -30.1182 11.9311 -3 - endloop - endfacet - facet normal 0.978074 -0.208259 0 - outer loop - vertex -30.3887 12.6783 0 - vertex -30.3118 13.0393 -3 - vertex -30.3118 13.0393 0 - endloop - endfacet - facet normal 0.978074 -0.208259 0 - outer loop - vertex -30.3118 13.0393 -3 - vertex -30.3887 12.6783 0 - vertex -30.3887 12.6783 -3 - endloop - endfacet - facet normal 0.488021 -0.872832 0 - outer loop - vertex -30.3118 13.0393 -3 - vertex -29.9412 13.2465 0 - vertex -30.3118 13.0393 0 - endloop - endfacet - facet normal 0.488021 -0.872832 0 - outer loop - vertex -29.9412 13.2465 0 - vertex -30.3118 13.0393 -3 - vertex -29.9412 13.2465 -3 - endloop - endfacet - facet normal 0.0669219 -0.997758 0 - outer loop - vertex -29.9412 13.2465 -3 - vertex -27.4778 13.4117 0 - vertex -29.9412 13.2465 0 - endloop - endfacet - facet normal 0.0669219 -0.997758 0 - outer loop - vertex -27.4778 13.4117 0 - vertex -29.9412 13.2465 -3 - vertex -27.4778 13.4117 -3 - endloop - endfacet - facet normal 0.0722192 -0.997389 0 - outer loop - vertex -27.4778 13.4117 -3 - vertex -24.873 13.6003 0 - vertex -27.4778 13.4117 0 - endloop - endfacet - facet normal 0.0722192 -0.997389 0 - outer loop - vertex -24.873 13.6003 0 - vertex -27.4778 13.4117 -3 - vertex -24.873 13.6003 -3 - endloop - endfacet - facet normal 0.168213 -0.985751 0 - outer loop - vertex -24.873 13.6003 -3 - vertex -22.3118 14.0374 0 - vertex -24.873 13.6003 0 - endloop - endfacet - facet normal 0.168213 -0.985751 0 - outer loop - vertex -22.3118 14.0374 0 - vertex -24.873 13.6003 -3 - vertex -22.3118 14.0374 -3 - endloop - endfacet - facet normal 0.261629 -0.965169 0 - outer loop - vertex -22.3118 14.0374 -3 - vertex -19.733 14.7364 0 - vertex -22.3118 14.0374 0 - endloop - endfacet - facet normal 0.261629 -0.965169 0 - outer loop - vertex -19.733 14.7364 0 - vertex -22.3118 14.0374 -3 - vertex -19.733 14.7364 -3 - endloop - endfacet - facet normal 0.344283 -0.938866 0 - outer loop - vertex -19.733 14.7364 -3 - vertex -17.0754 15.711 0 - vertex -19.733 14.7364 0 - endloop - endfacet - facet normal 0.344283 -0.938866 0 - outer loop - vertex -17.0754 15.711 0 - vertex -19.733 14.7364 -3 - vertex -17.0754 15.711 -3 - endloop - endfacet - facet normal 0.435809 -0.900039 0 - outer loop - vertex -17.0754 15.711 -3 - vertex -15.009 16.7116 0 - vertex -17.0754 15.711 0 - endloop - endfacet - facet normal 0.435809 -0.900039 0 - outer loop - vertex -15.009 16.7116 0 - vertex -17.0754 15.711 -3 - vertex -15.009 16.7116 -3 - endloop - endfacet - facet normal 0.583649 -0.812006 0 - outer loop - vertex -15.009 16.7116 -3 - vertex -12.0133 18.8648 0 - vertex -15.009 16.7116 0 - endloop - endfacet - facet normal 0.583649 -0.812006 0 - outer loop - vertex -12.0133 18.8648 0 - vertex -15.009 16.7116 -3 - vertex -12.0133 18.8648 -3 - endloop - endfacet - facet normal 0.632447 -0.774604 0 - outer loop - vertex -12.0133 18.8648 -3 - vertex -11.1208 19.5935 0 - vertex -12.0133 18.8648 0 - endloop - endfacet - facet normal 0.632447 -0.774604 0 - outer loop - vertex -11.1208 19.5935 0 - vertex -12.0133 18.8648 -3 - vertex -11.1208 19.5935 -3 - endloop - endfacet - facet normal 0.915349 -0.40266 0 - outer loop - vertex -11.1208 19.5935 0 - vertex -10.9412 20.0018 -3 - vertex -10.9412 20.0018 0 - endloop - endfacet - facet normal 0.915349 -0.40266 0 - outer loop - vertex -10.9412 20.0018 -3 - vertex -11.1208 19.5935 0 - vertex -11.1208 19.5935 -3 - endloop - endfacet - facet normal 0.285826 0.958281 -0 - outer loop - vertex -10.9412 20.0018 -3 - vertex -11.5389 20.1801 0 - vertex -10.9412 20.0018 0 - endloop - endfacet - facet normal 0.285826 0.958281 0 - outer loop - vertex -11.5389 20.1801 0 - vertex -10.9412 20.0018 -3 - vertex -11.5389 20.1801 -3 - endloop - endfacet - facet normal 0.0268157 0.99964 -0 - outer loop - vertex -11.5389 20.1801 -3 - vertex -12.9783 20.2187 0 - vertex -11.5389 20.1801 0 - endloop - endfacet - facet normal 0.0268157 0.99964 0 - outer loop - vertex -12.9783 20.2187 0 - vertex -11.5389 20.1801 -3 - vertex -12.9783 20.2187 -3 - endloop - endfacet - facet normal -0.0662732 0.997802 0 - outer loop - vertex -12.9783 20.2187 -3 - vertex -16.3196 19.9968 0 - vertex -12.9783 20.2187 0 - endloop - endfacet - facet normal -0.0662732 0.997802 0 - outer loop - vertex -16.3196 19.9968 0 - vertex -12.9783 20.2187 -3 - vertex -16.3196 19.9968 -3 - endloop - endfacet - facet normal -0.149342 0.988786 0 - outer loop - vertex -16.3196 19.9968 -3 - vertex -20.1789 19.4139 0 - vertex -16.3196 19.9968 0 - endloop - endfacet - facet normal -0.149342 0.988786 0 - outer loop - vertex -20.1789 19.4139 0 - vertex -16.3196 19.9968 -3 - vertex -20.1789 19.4139 -3 - endloop - endfacet - facet normal -0.0917718 0.99578 0 - outer loop - vertex -20.1789 19.4139 -3 - vertex -24.1572 19.0472 0 - vertex -20.1789 19.4139 0 - endloop - endfacet - facet normal -0.0917718 0.99578 0 - outer loop - vertex -24.1572 19.0472 0 - vertex -20.1789 19.4139 -3 - vertex -24.1572 19.0472 -3 - endloop - endfacet - facet normal -0.0311054 0.999516 0 - outer loop - vertex -24.1572 19.0472 -3 - vertex -27.5587 18.9414 0 - vertex -24.1572 19.0472 0 - endloop - endfacet - facet normal -0.0311054 0.999516 0 - outer loop - vertex -27.5587 18.9414 0 - vertex -24.1572 19.0472 -3 - vertex -27.5587 18.9414 -3 - endloop - endfacet - facet normal 0.0933351 0.995635 -0 - outer loop - vertex -27.5587 18.9414 -3 - vertex -29.687 19.1409 0 - vertex -27.5587 18.9414 0 - endloop - endfacet - facet normal 0.0933351 0.995635 0 - outer loop - vertex -29.687 19.1409 0 - vertex -27.5587 18.9414 -3 - vertex -29.687 19.1409 -3 - endloop - endfacet - facet normal 0.326889 0.945063 -0 - outer loop - vertex -29.687 19.1409 -3 - vertex -33.0651 20.3093 0 - vertex -29.687 19.1409 0 - endloop - endfacet - facet normal 0.326889 0.945063 0 - outer loop - vertex -33.0651 20.3093 0 - vertex -29.687 19.1409 -3 - vertex -33.0651 20.3093 -3 - endloop - endfacet - facet normal 0.441663 0.897181 -0 - outer loop - vertex -33.0651 20.3093 -3 - vertex -35.7552 21.6337 0 - vertex -33.0651 20.3093 0 - endloop - endfacet - facet normal 0.441663 0.897181 0 - outer loop - vertex -35.7552 21.6337 0 - vertex -33.0651 20.3093 -3 - vertex -35.7552 21.6337 -3 - endloop - endfacet - facet normal 0.596659 0.802495 -0 - outer loop - vertex -35.7552 21.6337 -3 - vertex -37.6991 23.0789 0 - vertex -35.7552 21.6337 0 - endloop - endfacet - facet normal 0.596659 0.802495 0 - outer loop - vertex -37.6991 23.0789 0 - vertex -35.7552 21.6337 -3 - vertex -37.6991 23.0789 -3 - endloop - endfacet - facet normal 0.746999 0.664825 0 - outer loop - vertex -37.6991 23.0789 0 - vertex -38.3729 23.836 -3 - vertex -38.3729 23.836 0 - endloop - endfacet - facet normal 0.746999 0.664825 0 - outer loop - vertex -38.3729 23.836 -3 - vertex -37.6991 23.0789 0 - vertex -37.6991 23.0789 -3 - endloop - endfacet - facet normal 0.857117 0.515122 0 - outer loop - vertex -38.3729 23.836 0 - vertex -38.8382 24.6102 -3 - vertex -38.8382 24.6102 0 - endloop - endfacet - facet normal 0.857117 0.515122 0 - outer loop - vertex -38.8382 24.6102 -3 - vertex -38.3729 23.836 0 - vertex -38.3729 23.836 -3 - endloop - endfacet - facet normal 0.945559 0.32545 0 - outer loop - vertex -38.8382 24.6102 0 - vertex -39.1303 25.4589 -3 - vertex -39.1303 25.4589 0 - endloop - endfacet - facet normal 0.945559 0.32545 0 - outer loop - vertex -39.1303 25.4589 -3 - vertex -38.8382 24.6102 0 - vertex -38.8382 24.6102 -3 - endloop - endfacet - facet normal 0.969805 -0.24388 0 - outer loop - vertex -39.1303 25.4589 0 - vertex -39.0347 25.8392 -3 - vertex -39.0347 25.8392 0 - endloop - endfacet - facet normal 0.969805 -0.24388 0 - outer loop - vertex -39.0347 25.8392 -3 - vertex -39.1303 25.4589 0 - vertex -39.1303 25.4589 -3 - endloop - endfacet - facet normal -0.217347 -0.976094 0 - outer loop - vertex -39.0347 25.8392 -3 - vertex -38.5782 25.7376 0 - vertex -39.0347 25.8392 0 - endloop - endfacet - facet normal -0.217347 -0.976094 -0 - outer loop - vertex -38.5782 25.7376 0 - vertex -39.0347 25.8392 -3 - vertex -38.5782 25.7376 -3 - endloop - endfacet - facet normal -0.602798 -0.797894 0 - outer loop - vertex -38.5782 25.7376 -3 - vertex -37.7877 25.1404 0 - vertex -38.5782 25.7376 0 - endloop - endfacet - facet normal -0.602798 -0.797894 -0 - outer loop - vertex -37.7877 25.1404 0 - vertex -38.5782 25.7376 -3 - vertex -37.7877 25.1404 -3 - endloop - endfacet - facet normal -0.582847 -0.812582 0 - outer loop - vertex -37.7877 25.1404 -3 - vertex -36.1697 23.9798 0 - vertex -37.7877 25.1404 0 - endloop - endfacet - facet normal -0.582847 -0.812582 -0 - outer loop - vertex -36.1697 23.9798 0 - vertex -37.7877 25.1404 -3 - vertex -36.1697 23.9798 -3 - endloop - endfacet - facet normal -0.438905 -0.898534 0 - outer loop - vertex -36.1697 23.9798 -3 - vertex -34.2108 23.023 0 - vertex -36.1697 23.9798 0 - endloop - endfacet - facet normal -0.438905 -0.898534 -0 - outer loop - vertex -34.2108 23.023 0 - vertex -36.1697 23.9798 -3 - vertex -34.2108 23.023 -3 - endloop - endfacet - facet normal -0.304923 -0.952377 0 - outer loop - vertex -34.2108 23.023 -3 - vertex -32.1178 22.3529 0 - vertex -34.2108 23.023 0 - endloop - endfacet - facet normal -0.304923 -0.952377 -0 - outer loop - vertex -32.1178 22.3529 0 - vertex -34.2108 23.023 -3 - vertex -32.1178 22.3529 -3 - endloop - endfacet - facet normal -0.147036 -0.989131 0 - outer loop - vertex -32.1178 22.3529 -3 - vertex -30.0976 22.0525 0 - vertex -32.1178 22.3529 0 - endloop - endfacet - facet normal -0.147036 -0.989131 -0 - outer loop - vertex -30.0976 22.0525 0 - vertex -32.1178 22.3529 -3 - vertex -30.0976 22.0525 -3 - endloop - endfacet - facet normal -0.0457632 -0.998952 0 - outer loop - vertex -30.0976 22.0525 -3 - vertex -28.3511 21.9725 0 - vertex -30.0976 22.0525 0 - endloop - endfacet - facet normal -0.0457632 -0.998952 -0 - outer loop - vertex -28.3511 21.9725 0 - vertex -30.0976 22.0525 -3 - vertex -28.3511 21.9725 -3 - endloop - endfacet - facet normal 0.491954 0.870621 -0 - outer loop - vertex -28.3511 21.9725 -3 - vertex -29.0303 22.3563 0 - vertex -28.3511 21.9725 0 - endloop - endfacet - facet normal 0.491954 0.870621 0 - outer loop - vertex -29.0303 22.3563 0 - vertex -28.3511 21.9725 -3 - vertex -29.0303 22.3563 -3 - endloop - endfacet - facet normal 0.563624 0.826031 -0 - outer loop - vertex -29.0303 22.3563 -3 - vertex -30.3878 23.2826 0 - vertex -29.0303 22.3563 0 - endloop - endfacet - facet normal 0.563624 0.826031 0 - outer loop - vertex -30.3878 23.2826 0 - vertex -29.0303 22.3563 -3 - vertex -30.3878 23.2826 -3 - endloop - endfacet - facet normal 0.796403 0.604766 0 - outer loop - vertex -30.3878 23.2826 0 - vertex -31.0943 24.213 -3 - vertex -31.0943 24.213 0 - endloop - endfacet - facet normal 0.796403 0.604766 0 - outer loop - vertex -31.0943 24.213 -3 - vertex -30.3878 23.2826 0 - vertex -30.3878 23.2826 -3 - endloop - endfacet - facet normal 0.951494 0.307667 0 - outer loop - vertex -31.0943 24.213 0 - vertex -31.2773 24.779 -3 - vertex -31.2773 24.779 0 - endloop - endfacet - facet normal 0.951494 0.307667 0 - outer loop - vertex -31.2773 24.779 -3 - vertex -31.0943 24.213 0 - vertex -31.0943 24.213 -3 - endloop - endfacet - facet normal 0.935098 -0.35439 0 - outer loop - vertex -31.2773 24.779 0 - vertex -31.1793 25.0376 -3 - vertex -31.1793 25.0376 0 - endloop - endfacet - facet normal 0.935098 -0.35439 0 - outer loop - vertex -31.1793 25.0376 -3 - vertex -31.2773 24.779 0 - vertex -31.2773 24.779 -3 - endloop - endfacet - facet normal -0.153546 -0.988142 0 - outer loop - vertex -31.1793 25.0376 -3 - vertex -30.8173 24.9813 0 - vertex -31.1793 25.0376 0 - endloop - endfacet - facet normal -0.153546 -0.988142 -0 - outer loop - vertex -30.8173 24.9813 0 - vertex -31.1793 25.0376 -3 - vertex -30.8173 24.9813 -3 - endloop - endfacet - facet normal -0.527885 -0.849316 0 - outer loop - vertex -30.8173 24.9813 -3 - vertex -30.2081 24.6027 0 - vertex -30.8173 24.9813 0 - endloop - endfacet - facet normal -0.527885 -0.849316 -0 - outer loop - vertex -30.2081 24.6027 0 - vertex -30.8173 24.9813 -3 - vertex -30.2081 24.6027 -3 - endloop - endfacet - facet normal -0.502983 -0.864296 0 - outer loop - vertex -30.2081 24.6027 -3 - vertex -29.3958 24.13 0 - vertex -30.2081 24.6027 0 - endloop - endfacet - facet normal -0.502983 -0.864296 -0 - outer loop - vertex -29.3958 24.13 0 - vertex -30.2081 24.6027 -3 - vertex -29.3958 24.13 -3 - endloop - endfacet - facet normal -0.286557 -0.958063 0 - outer loop - vertex -29.3958 24.13 -3 - vertex -28.4642 23.8513 0 - vertex -29.3958 24.13 0 - endloop - endfacet - facet normal -0.286557 -0.958063 -0 - outer loop - vertex -28.4642 23.8513 0 - vertex -29.3958 24.13 -3 - vertex -28.4642 23.8513 -3 - endloop - endfacet - facet normal -0.0843211 -0.996439 0 - outer loop - vertex -28.4642 23.8513 -3 - vertex -27.3687 23.7586 0 - vertex -28.4642 23.8513 0 - endloop - endfacet - facet normal -0.0843211 -0.996439 -0 - outer loop - vertex -27.3687 23.7586 0 - vertex -28.4642 23.8513 -3 - vertex -27.3687 23.7586 -3 - endloop - endfacet - facet normal 0.065101 -0.997879 0 - outer loop - vertex -27.3687 23.7586 -3 - vertex -26.0647 23.8437 0 - vertex -27.3687 23.7586 0 - endloop - endfacet - facet normal 0.065101 -0.997879 0 - outer loop - vertex -26.0647 23.8437 0 - vertex -27.3687 23.7586 -3 - vertex -26.0647 23.8437 -3 - endloop - endfacet - facet normal 0.119464 -0.992839 0 - outer loop - vertex -26.0647 23.8437 -3 - vertex -24.664 24.0122 0 - vertex -26.0647 23.8437 0 - endloop - endfacet - facet normal 0.119464 -0.992839 0 - outer loop - vertex -24.664 24.0122 0 - vertex -26.0647 23.8437 -3 - vertex -24.664 24.0122 -3 - endloop - endfacet - facet normal 0.193693 0.981062 -0 - outer loop - vertex -24.664 24.0122 -3 - vertex -26.0224 24.2804 0 - vertex -24.664 24.0122 0 - endloop - endfacet - facet normal 0.193693 0.981062 0 - outer loop - vertex -26.0224 24.2804 0 - vertex -24.664 24.0122 -3 - vertex -26.0224 24.2804 -3 - endloop - endfacet - facet normal 0.282043 0.959402 -0 - outer loop - vertex -26.0224 24.2804 -3 - vertex -28.1365 24.9019 0 - vertex -26.0224 24.2804 0 - endloop - endfacet - facet normal 0.282043 0.959402 0 - outer loop - vertex -28.1365 24.9019 0 - vertex -26.0224 24.2804 -3 - vertex -28.1365 24.9019 -3 - endloop - endfacet - facet normal 0.487989 0.87285 -0 - outer loop - vertex -28.1365 24.9019 -3 - vertex -29.9035 25.8898 0 - vertex -28.1365 24.9019 0 - endloop - endfacet - facet normal 0.487989 0.87285 0 - outer loop - vertex -29.9035 25.8898 0 - vertex -28.1365 24.9019 -3 - vertex -29.9035 25.8898 -3 - endloop - endfacet - facet normal 0.641558 0.767075 -0 - outer loop - vertex -29.9035 25.8898 -3 - vertex -31.116 26.9038 0 - vertex -29.9035 25.8898 0 - endloop - endfacet - facet normal 0.641558 0.767075 0 - outer loop - vertex -31.116 26.9038 0 - vertex -29.9035 25.8898 -3 - vertex -31.116 26.9038 -3 - endloop - endfacet - facet normal 0.876545 0.48132 0 - outer loop - vertex -31.116 26.9038 0 - vertex -31.2912 27.2229 -3 - vertex -31.2912 27.2229 0 - endloop - endfacet - facet normal 0.876545 0.48132 0 - outer loop - vertex -31.2912 27.2229 -3 - vertex -31.116 26.9038 0 - vertex -31.116 26.9038 -3 - endloop - endfacet - facet normal 0.956151 -0.292876 0 - outer loop - vertex -31.2912 27.2229 0 - vertex -31.2177 27.4629 -3 - vertex -31.2177 27.4629 0 - endloop - endfacet - facet normal 0.956151 -0.292876 0 - outer loop - vertex -31.2177 27.4629 -3 - vertex -31.2912 27.2229 0 - vertex -31.2912 27.2229 -3 - endloop - endfacet - facet normal 0.0512406 -0.998686 0 - outer loop - vertex -31.2177 27.4629 -3 - vertex -30.666 27.4912 0 - vertex -31.2177 27.4629 0 - endloop - endfacet - facet normal 0.0512406 -0.998686 0 - outer loop - vertex -30.666 27.4912 0 - vertex -31.2177 27.4629 -3 - vertex -30.666 27.4912 -3 - endloop - endfacet - facet normal -0.343857 -0.939022 0 - outer loop - vertex -30.666 27.4912 -3 - vertex -29.2879 26.9865 0 - vertex -30.666 27.4912 0 - endloop - endfacet - facet normal -0.343857 -0.939022 -0 - outer loop - vertex -29.2879 26.9865 0 - vertex -30.666 27.4912 -3 - vertex -29.2879 26.9865 -3 - endloop - endfacet - facet normal -0.315787 -0.94883 0 - outer loop - vertex -29.2879 26.9865 -3 - vertex -27.4214 26.3653 0 - vertex -29.2879 26.9865 0 - endloop - endfacet - facet normal -0.315787 -0.94883 -0 - outer loop - vertex -27.4214 26.3653 0 - vertex -29.2879 26.9865 -3 - vertex -27.4214 26.3653 -3 - endloop - endfacet - facet normal -0.0620611 -0.998072 0 - outer loop - vertex -27.4214 26.3653 -3 - vertex -24.8433 26.205 0 - vertex -27.4214 26.3653 0 - endloop - endfacet - facet normal -0.0620611 -0.998072 -0 - outer loop - vertex -24.8433 26.205 0 - vertex -27.4214 26.3653 -3 - vertex -24.8433 26.205 -3 - endloop - endfacet - facet normal 0.0113967 -0.999935 0 - outer loop - vertex -24.8433 26.205 -3 - vertex -22.0473 26.2369 0 - vertex -24.8433 26.205 0 - endloop - endfacet - facet normal 0.0113967 -0.999935 0 - outer loop - vertex -22.0473 26.2369 0 - vertex -24.8433 26.205 -3 - vertex -22.0473 26.2369 -3 - endloop - endfacet - facet normal 0.196528 -0.980498 0 - outer loop - vertex -22.0473 26.2369 -3 - vertex -21.4485 26.3569 0 - vertex -22.0473 26.2369 0 - endloop - endfacet - facet normal 0.196528 -0.980498 0 - outer loop - vertex -21.4485 26.3569 0 - vertex -22.0473 26.2369 -3 - vertex -21.4485 26.3569 -3 - endloop - endfacet - facet normal 0.743557 -0.668673 0 - outer loop - vertex -21.4485 26.3569 0 - vertex -21.2681 26.5576 -3 - vertex -21.2681 26.5576 0 - endloop - endfacet - facet normal 0.743557 -0.668673 0 - outer loop - vertex -21.2681 26.5576 -3 - vertex -21.4485 26.3569 0 - vertex -21.4485 26.3569 -3 - endloop - endfacet - facet normal 0.261077 0.965318 -0 - outer loop - vertex -21.2681 26.5576 -3 - vertex -22.4212 26.8695 0 - vertex -21.2681 26.5576 0 - endloop - endfacet - facet normal 0.261077 0.965318 0 - outer loop - vertex -22.4212 26.8695 0 - vertex -21.2681 26.5576 -3 - vertex -22.4212 26.8695 -3 - endloop - endfacet - facet normal 0.309949 0.950753 -0 - outer loop - vertex -22.4212 26.8695 -3 - vertex -23.8902 27.3484 0 - vertex -22.4212 26.8695 0 - endloop - endfacet - facet normal 0.309949 0.950753 0 - outer loop - vertex -23.8902 27.3484 0 - vertex -22.4212 26.8695 -3 - vertex -23.8902 27.3484 -3 - endloop - endfacet - facet normal 0.603717 0.797199 -0 - outer loop - vertex -23.8902 27.3484 -3 - vertex -24.3225 27.6757 0 - vertex -23.8902 27.3484 0 - endloop - endfacet - facet normal 0.603717 0.797199 0 - outer loop - vertex -24.3225 27.6757 0 - vertex -23.8902 27.3484 -3 - vertex -24.3225 27.6757 -3 - endloop - endfacet - facet normal 0.98955 0.144189 0 - outer loop - vertex -24.3225 27.6757 0 - vertex -24.3632 27.9554 -3 - vertex -24.3632 27.9554 0 - endloop - endfacet - facet normal 0.98955 0.144189 0 - outer loop - vertex -24.3632 27.9554 -3 - vertex -24.3225 27.6757 0 - vertex -24.3225 27.6757 -3 - endloop - endfacet - facet normal -0.0279773 -0.999609 0 - outer loop - vertex -24.3632 27.9554 -3 - vertex -22.4093 27.9007 0 - vertex -24.3632 27.9554 0 - endloop - endfacet - facet normal -0.0279773 -0.999609 -0 - outer loop - vertex -22.4093 27.9007 0 - vertex -24.3632 27.9554 -3 - vertex -22.4093 27.9007 -3 - endloop - endfacet - facet normal -0.150133 -0.988666 0 - outer loop - vertex -22.4093 27.9007 -3 - vertex -20.8096 27.6578 0 - vertex -22.4093 27.9007 0 - endloop - endfacet - facet normal -0.150133 -0.988666 -0 - outer loop - vertex -20.8096 27.6578 0 - vertex -22.4093 27.9007 -3 - vertex -20.8096 27.6578 -3 - endloop - endfacet - facet normal -0.458094 -0.888904 0 - outer loop - vertex -20.8096 27.6578 -3 - vertex -19.9485 27.2141 0 - vertex -20.8096 27.6578 0 - endloop - endfacet - facet normal -0.458094 -0.888904 -0 - outer loop - vertex -19.9485 27.2141 0 - vertex -20.8096 27.6578 -3 - vertex -19.9485 27.2141 -3 - endloop - endfacet - facet normal -0.64002 -0.768358 0 - outer loop - vertex -19.9485 27.2141 -3 - vertex -19.335 26.703 0 - vertex -19.9485 27.2141 0 - endloop - endfacet - facet normal -0.64002 -0.768358 -0 - outer loop - vertex -19.335 26.703 0 - vertex -19.9485 27.2141 -3 - vertex -19.335 26.703 -3 - endloop - endfacet - facet normal 0.254037 -0.967194 0 - outer loop - vertex -19.335 26.703 -3 - vertex -16.9875 27.3196 0 - vertex -19.335 26.703 0 - endloop - endfacet - facet normal 0.254037 -0.967194 0 - outer loop - vertex -16.9875 27.3196 0 - vertex -19.335 26.703 -3 - vertex -16.9875 27.3196 -3 - endloop - endfacet - facet normal 0.212489 -0.977163 0 - outer loop - vertex -16.9875 27.3196 -3 - vertex -15.2376 27.7001 0 - vertex -16.9875 27.3196 0 - endloop - endfacet - facet normal 0.212489 -0.977163 0 - outer loop - vertex -15.2376 27.7001 0 - vertex -16.9875 27.3196 -3 - vertex -15.2376 27.7001 -3 - endloop - endfacet - facet normal 0.0813778 -0.996683 0 - outer loop - vertex -15.2376 27.7001 -3 - vertex -13.5562 27.8374 0 - vertex -15.2376 27.7001 0 - endloop - endfacet - facet normal 0.0813778 -0.996683 0 - outer loop - vertex -13.5562 27.8374 0 - vertex -15.2376 27.7001 -3 - vertex -13.5562 27.8374 -3 - endloop - endfacet - facet normal -0.0507625 -0.998711 0 - outer loop - vertex -13.5562 27.8374 -3 - vertex -11.546 27.7352 0 - vertex -13.5562 27.8374 0 - endloop - endfacet - facet normal -0.0507625 -0.998711 -0 - outer loop - vertex -11.546 27.7352 0 - vertex -13.5562 27.8374 -3 - vertex -11.546 27.7352 -3 - endloop - endfacet - facet normal -0.122536 -0.992464 0 - outer loop - vertex -11.546 27.7352 -3 - vertex -8.80952 27.3973 0 - vertex -11.546 27.7352 0 - endloop - endfacet - facet normal -0.122536 -0.992464 -0 - outer loop - vertex -8.80952 27.3973 0 - vertex -11.546 27.7352 -3 - vertex -8.80952 27.3973 -3 - endloop - endfacet - facet normal -0.0983783 -0.995149 0 - outer loop - vertex -8.80952 27.3973 -3 - vertex -7.25507 27.2437 0 - vertex -8.80952 27.3973 0 - endloop - endfacet - facet normal -0.0983783 -0.995149 -0 - outer loop - vertex -7.25507 27.2437 0 - vertex -8.80952 27.3973 -3 - vertex -7.25507 27.2437 -3 - endloop - endfacet - facet normal 0.163792 -0.986495 0 - outer loop - vertex -7.25507 27.2437 -3 - vertex -6.55612 27.3597 0 - vertex -7.25507 27.2437 0 - endloop - endfacet - facet normal 0.163792 -0.986495 0 - outer loop - vertex -6.55612 27.3597 0 - vertex -7.25507 27.2437 -3 - vertex -6.55612 27.3597 -3 - endloop - endfacet - facet normal 0.830428 -0.557126 0 - outer loop - vertex -6.55612 27.3597 0 - vertex -6.38329 27.6173 -3 - vertex -6.38329 27.6173 0 - endloop - endfacet - facet normal 0.830428 -0.557126 0 - outer loop - vertex -6.38329 27.6173 -3 - vertex -6.55612 27.3597 0 - vertex -6.55612 27.3597 -3 - endloop - endfacet - facet normal 0.987965 -0.154679 0 - outer loop - vertex -6.38329 27.6173 0 - vertex -6.28322 28.2565 -3 - vertex -6.28322 28.2565 0 - endloop - endfacet - facet normal 0.987965 -0.154679 0 - outer loop - vertex -6.28322 28.2565 -3 - vertex -6.38329 27.6173 0 - vertex -6.38329 27.6173 -3 - endloop - endfacet - facet normal 0.99984 -0.0178603 0 - outer loop - vertex -6.28322 28.2565 0 - vertex -6.22131 31.7226 -3 - vertex -6.22131 31.7226 0 - endloop - endfacet - facet normal 0.99984 -0.0178603 0 - outer loop - vertex -6.22131 31.7226 -3 - vertex -6.28322 28.2565 0 - vertex -6.28322 28.2565 -3 - endloop - endfacet - facet normal 0.999322 -0.0368307 0 - outer loop - vertex -6.22131 31.7226 0 - vertex -6.055 36.2349 -3 - vertex -6.055 36.2349 0 - endloop - endfacet - facet normal 0.999322 -0.0368307 0 - outer loop - vertex -6.055 36.2349 -3 - vertex -6.22131 31.7226 0 - vertex -6.22131 31.7226 -3 - endloop - endfacet - facet normal 0.823305 -0.5676 0 - outer loop - vertex -6.055 36.2349 0 - vertex -5.8163 36.5812 -3 - vertex -5.8163 36.5812 0 - endloop - endfacet - facet normal 0.823305 -0.5676 0 - outer loop - vertex -5.8163 36.5812 -3 - vertex -6.055 36.2349 0 - vertex -6.055 36.2349 -3 - endloop - endfacet - facet normal -0.301391 -0.953501 0 - outer loop - vertex -5.8163 36.5812 -3 - vertex -5.55994 36.5001 0 - vertex -5.8163 36.5812 0 - endloop - endfacet - facet normal -0.301391 -0.953501 -0 - outer loop - vertex -5.55994 36.5001 0 - vertex -5.8163 36.5812 -3 - vertex -5.55994 36.5001 -3 - endloop - endfacet - facet normal -0.928472 -0.371402 0 - outer loop - vertex -4.97284 35.0324 -3 - vertex -5.55994 36.5001 0 - vertex -5.55994 36.5001 -3 - endloop - endfacet - facet normal -0.928472 -0.371402 0 - outer loop - vertex -5.55994 36.5001 0 - vertex -4.97284 35.0324 -3 - vertex -4.97284 35.0324 0 - endloop - endfacet - facet normal -0.946087 -0.323913 0 - outer loop - vertex -3.97987 32.1322 -3 - vertex -4.97284 35.0324 0 - vertex -4.97284 35.0324 -3 - endloop - endfacet - facet normal -0.946087 -0.323913 0 - outer loop - vertex -4.97284 35.0324 0 - vertex -3.97987 32.1322 -3 - vertex -3.97987 32.1322 0 - endloop - endfacet - facet normal -0.891782 -0.452466 0 - outer loop - vertex -2.77953 29.7664 -3 - vertex -3.97987 32.1322 0 - vertex -3.97987 32.1322 -3 - endloop - endfacet - facet normal -0.891782 -0.452466 0 - outer loop - vertex -3.97987 32.1322 0 - vertex -2.77953 29.7664 -3 - vertex -2.77953 29.7664 0 - endloop - endfacet - facet normal -0.788004 -0.61567 0 - outer loop - vertex -1.46161 28.0795 -3 - vertex -2.77953 29.7664 0 - vertex -2.77953 29.7664 -3 - endloop - endfacet - facet normal -0.788004 -0.61567 0 - outer loop - vertex -2.77953 29.7664 0 - vertex -1.46161 28.0795 -3 - vertex -1.46161 28.0795 0 - endloop - endfacet - facet normal -0.627252 -0.778816 0 - outer loop - vertex -1.46161 28.0795 -3 - vertex -0.786632 27.5359 0 - vertex -1.46161 28.0795 0 - endloop - endfacet - facet normal -0.627252 -0.778816 -0 - outer loop - vertex -0.786632 27.5359 0 - vertex -1.46161 28.0795 -3 - vertex -0.786632 27.5359 -3 - endloop - endfacet - facet normal -0.430266 -0.902702 0 - outer loop - vertex -0.786632 27.5359 -3 - vertex -0.115935 27.2162 0 - vertex -0.786632 27.5359 0 - endloop - endfacet - facet normal -0.430266 -0.902702 -0 - outer loop - vertex -0.115935 27.2162 0 - vertex -0.786632 27.5359 -3 - vertex -0.115935 27.2162 -3 - endloop - endfacet - facet normal -0.108301 -0.994118 0 - outer loop - vertex -0.115935 27.2162 -3 - vertex 0.858783 27.1101 0 - vertex -0.115935 27.2162 0 - endloop - endfacet - facet normal -0.108301 -0.994118 -0 - outer loop - vertex 0.858783 27.1101 0 - vertex -0.115935 27.2162 -3 - vertex 0.858783 27.1101 -3 - endloop - endfacet - facet normal 0.992113 -0.125344 0 - outer loop - vertex 0.858783 27.1101 0 - vertex 1.04836 28.6106 -3 - vertex 1.04836 28.6106 0 - endloop - endfacet - facet normal 0.992113 -0.125344 0 - outer loop - vertex 1.04836 28.6106 -3 - vertex 0.858783 27.1101 0 - vertex 0.858783 27.1101 -3 - endloop - endfacet - facet normal 0.998104 -0.0615481 0 - outer loop - vertex 1.04836 28.6106 0 - vertex 1.1273 29.8907 -3 - vertex 1.1273 29.8907 0 - endloop - endfacet - facet normal 0.998104 -0.0615481 0 - outer loop - vertex 1.1273 29.8907 -3 - vertex 1.04836 28.6106 0 - vertex 1.04836 28.6106 -3 - endloop - endfacet - facet normal 0.981864 -0.189585 0 - outer loop - vertex 1.1273 29.8907 0 - vertex 1.37489 31.173 -3 - vertex 1.37489 31.173 0 - endloop - endfacet - facet normal 0.981864 -0.189585 0 - outer loop - vertex 1.37489 31.173 -3 - vertex 1.1273 29.8907 0 - vertex 1.1273 29.8907 -3 - endloop - endfacet - facet normal 0.935462 -0.353427 0 - outer loop - vertex 1.37489 31.173 0 - vertex 2.44067 33.9939 -3 - vertex 2.44067 33.9939 0 - endloop - endfacet - facet normal 0.935462 -0.353427 0 - outer loop - vertex 2.44067 33.9939 -3 - vertex 1.37489 31.173 0 - vertex 1.37489 31.173 -3 - endloop - endfacet - facet normal 0.883303 -0.468802 0 - outer loop - vertex 2.44067 33.9939 0 - vertex 4.08079 37.0842 -3 - vertex 4.08079 37.0842 0 - endloop - endfacet - facet normal 0.883303 -0.468802 0 - outer loop - vertex 4.08079 37.0842 -3 - vertex 2.44067 33.9939 0 - vertex 2.44067 33.9939 -3 - endloop - endfacet - facet normal 0.814108 -0.580714 0 - outer loop - vertex 4.08079 37.0842 0 - vertex 5.15152 38.5852 -3 - vertex 5.15152 38.5852 0 - endloop - endfacet - facet normal 0.814108 -0.580714 0 - outer loop - vertex 5.15152 38.5852 -3 - vertex 4.08079 37.0842 0 - vertex 4.08079 37.0842 -3 - endloop - endfacet - facet normal -0.809167 -0.587578 0 - outer loop - vertex 5.25321 38.4452 -3 - vertex 5.15152 38.5852 0 - vertex 5.15152 38.5852 -3 - endloop - endfacet - facet normal -0.809167 -0.587578 0 - outer loop - vertex 5.15152 38.5852 0 - vertex 5.25321 38.4452 -3 - vertex 5.25321 38.4452 0 - endloop - endfacet - facet normal -0.887211 -0.461365 0 - outer loop - vertex 8.028 17.0592 -3 - vertex 7.15178 18.7442 0 - vertex 7.15178 18.7442 -3 - endloop - endfacet - facet normal -0.887211 -0.461365 0 - outer loop - vertex 7.15178 18.7442 0 - vertex 8.028 17.0592 -3 - vertex 8.028 17.0592 0 - endloop - endfacet - facet normal -0.822305 -0.569047 0 - outer loop - vertex 8.86535 15.8492 -3 - vertex 8.028 17.0592 0 - vertex 8.028 17.0592 -3 - endloop - endfacet - facet normal -0.822305 -0.569047 0 - outer loop - vertex 8.028 17.0592 0 - vertex 8.86535 15.8492 -3 - vertex 8.86535 15.8492 0 - endloop - endfacet - facet normal 0.359337 -0.933208 0 - outer loop - vertex 8.86535 15.8492 -3 - vertex 9.72145 16.1788 0 - vertex 8.86535 15.8492 0 - endloop - endfacet - facet normal 0.359337 -0.933208 0 - outer loop - vertex 9.72145 16.1788 0 - vertex 8.86535 15.8492 -3 - vertex 9.72145 16.1788 -3 - endloop - endfacet - facet normal 0.425917 -0.904762 0 - outer loop - vertex 9.72145 16.1788 -3 - vertex 10.4258 16.5104 0 - vertex 9.72145 16.1788 0 - endloop - endfacet - facet normal 0.425917 -0.904762 0 - outer loop - vertex 10.4258 16.5104 0 - vertex 9.72145 16.1788 -3 - vertex 10.4258 16.5104 -3 - endloop - endfacet - facet normal 0.716732 0.697349 0 - outer loop - vertex 10.4258 16.5104 0 - vertex 9.76373 17.1908 -3 - vertex 9.76373 17.1908 0 - endloop - endfacet - facet normal 0.716732 0.697349 0 - outer loop - vertex 9.76373 17.1908 -3 - vertex 10.4258 16.5104 0 - vertex 10.4258 16.5104 -3 - endloop - endfacet - facet normal 0.65174 0.758443 -0 - outer loop - vertex 9.76373 17.1908 -3 - vertex 8.30319 18.4459 0 - vertex 9.76373 17.1908 0 - endloop - endfacet - facet normal 0.65174 0.758443 0 - outer loop - vertex 8.30319 18.4459 0 - vertex 9.76373 17.1908 -3 - vertex 8.30319 18.4459 -3 - endloop - endfacet - facet normal 0.52501 0.851096 -0 - outer loop - vertex 8.30319 18.4459 -3 - vertex 7.1994 19.1268 0 - vertex 8.30319 18.4459 0 - endloop - endfacet - facet normal 0.52501 0.851096 0 - outer loop - vertex 7.1994 19.1268 0 - vertex 8.30319 18.4459 -3 - vertex 7.1994 19.1268 -3 - endloop - endfacet - facet normal -0.992345 0.123496 0 - outer loop - vertex 7.15178 18.7442 -3 - vertex 7.1994 19.1268 0 - vertex 7.1994 19.1268 -3 - endloop - endfacet - facet normal -0.992345 0.123496 0 - outer loop - vertex 7.1994 19.1268 0 - vertex 7.15178 18.7442 -3 - vertex 7.15178 18.7442 0 - endloop - endfacet - facet normal -0.148843 0.988861 0 - outer loop - vertex -16.6107 24.7853 -3 - vertex -20.4324 24.2101 0 - vertex -16.6107 24.7853 0 - endloop - endfacet - facet normal -0.148843 0.988861 0 - outer loop - vertex -20.4324 24.2101 0 - vertex -16.6107 24.7853 -3 - vertex -20.4324 24.2101 -3 - endloop - endfacet - facet normal -0.117787 0.993039 0 - outer loop - vertex -20.4324 24.2101 -3 - vertex -23.3809 23.8604 0 - vertex -20.4324 24.2101 0 - endloop - endfacet - facet normal -0.117787 0.993039 0 - outer loop - vertex -23.3809 23.8604 0 - vertex -20.4324 24.2101 -3 - vertex -23.3809 23.8604 -3 - endloop - endfacet - facet normal -0.645441 -0.76381 0 - outer loop - vertex -23.3809 23.8604 -3 - vertex -22.6641 23.2546 0 - vertex -23.3809 23.8604 0 - endloop - endfacet - facet normal -0.645441 -0.76381 -0 - outer loop - vertex -22.6641 23.2546 0 - vertex -23.3809 23.8604 -3 - vertex -22.6641 23.2546 -3 - endloop - endfacet - facet normal -0.546303 -0.837588 0 - outer loop - vertex -22.6641 23.2546 -3 - vertex -22.0432 22.8497 0 - vertex -22.6641 23.2546 0 - endloop - endfacet - facet normal -0.546303 -0.837588 -0 - outer loop - vertex -22.0432 22.8497 0 - vertex -22.6641 23.2546 -3 - vertex -22.0432 22.8497 -3 - endloop - endfacet - facet normal -0.238224 -0.97121 0 - outer loop - vertex -22.0432 22.8497 -3 - vertex -21.5591 22.7309 0 - vertex -22.0432 22.8497 0 - endloop - endfacet - facet normal -0.238224 -0.97121 -0 - outer loop - vertex -21.5591 22.7309 0 - vertex -22.0432 22.8497 -3 - vertex -21.5591 22.7309 -3 - endloop - endfacet - facet normal 0.148545 -0.988906 0 - outer loop - vertex -21.5591 22.7309 -3 - vertex -19.3275 23.0662 0 - vertex -21.5591 22.7309 0 - endloop - endfacet - facet normal 0.148545 -0.988906 0 - outer loop - vertex -19.3275 23.0662 0 - vertex -21.5591 22.7309 -3 - vertex -19.3275 23.0662 -3 - endloop - endfacet - facet normal 0.149712 -0.98873 0 - outer loop - vertex -19.3275 23.0662 -3 - vertex -14.1729 23.8467 0 - vertex -19.3275 23.0662 0 - endloop - endfacet - facet normal 0.149712 -0.98873 0 - outer loop - vertex -14.1729 23.8467 0 - vertex -19.3275 23.0662 -3 - vertex -14.1729 23.8467 -3 - endloop - endfacet - facet normal 0.152324 -0.988331 0 - outer loop - vertex -14.1729 23.8467 -3 - vertex -10.5829 24.4 0 - vertex -14.1729 23.8467 0 - endloop - endfacet - facet normal 0.152324 -0.988331 0 - outer loop - vertex -10.5829 24.4 0 - vertex -14.1729 23.8467 -3 - vertex -10.5829 24.4 -3 - endloop - endfacet - facet normal 0.753595 0.657339 0 - outer loop - vertex -10.5829 24.4 0 - vertex -10.6709 24.5009 -3 - vertex -10.6709 24.5009 0 - endloop - endfacet - facet normal 0.753595 0.657339 0 - outer loop - vertex -10.6709 24.5009 -3 - vertex -10.5829 24.4 0 - vertex -10.5829 24.4 -3 - endloop - endfacet - facet normal 0.323243 0.946316 -0 - outer loop - vertex -10.6709 24.5009 -3 - vertex -11.2742 24.7069 0 - vertex -10.6709 24.5009 0 - endloop - endfacet - facet normal 0.323243 0.946316 0 - outer loop - vertex -11.2742 24.7069 0 - vertex -10.6709 24.5009 -3 - vertex -11.2742 24.7069 -3 - endloop - endfacet - facet normal 0.105601 0.994409 -0 - outer loop - vertex -11.2742 24.7069 -3 - vertex -13.9393 24.99 0 - vertex -11.2742 24.7069 0 - endloop - endfacet - facet normal 0.105601 0.994409 0 - outer loop - vertex -13.9393 24.99 0 - vertex -11.2742 24.7069 -3 - vertex -13.9393 24.99 -3 - endloop - endfacet - facet normal -0.0763677 0.99708 0 - outer loop - vertex -13.9393 24.99 -3 - vertex -16.6107 24.7853 0 - vertex -13.9393 24.99 0 - endloop - endfacet - facet normal -0.0763677 0.99708 0 - outer loop - vertex -16.6107 24.7853 0 - vertex -13.9393 24.99 -3 - vertex -16.6107 24.7853 -3 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -117.5 -117.5 -3 - vertex -117.5 117.5 0 - vertex -117.5 117.5 -3 - endloop - endfacet - facet normal -1 -0 0 - outer loop - vertex -117.5 117.5 0 - vertex -117.5 -117.5 -3 - vertex -117.5 -117.5 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.5713 -25.7117 0 - vertex -27.9105 -26.2055 0 - vertex -28.1036 -25.8829 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -32.142 -25.4759 0 - vertex -28.1838 -28.4809 0 - vertex -28.5713 -25.7117 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -27.9105 -26.2055 0 - vertex -28.5713 -25.7117 0 - vertex -28.1838 -28.4809 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -35.9073 -13.512 0 - vertex -35.4871 -14.1281 0 - vertex -35.5739 -13.718 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -36.5262 -13.4531 0 - vertex -35.4871 -14.1281 0 - vertex -35.9073 -13.512 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -35.4871 -14.1281 0 - vertex -36.5262 -13.4531 0 - vertex -35.6081 -14.799 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -37.2393 -13.2576 0 - vertex -35.6081 -14.799 0 - vertex -36.5262 -13.4531 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -35.6081 -14.799 0 - vertex -37.2393 -13.2576 0 - vertex -37.0548 -18.7102 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -37.5366 -12.7854 0 - vertex -37.0548 -18.7102 0 - vertex -37.2393 -13.2576 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -38.8382 24.6102 0 - vertex -37.3951 -12.1929 0 - vertex -38.3729 23.836 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -39.1303 25.4589 0 - vertex -37.3951 -12.1929 0 - vertex -38.8382 24.6102 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -37.3951 -12.1929 0 - vertex -39.1303 25.4589 0 - vertex -37.5366 -12.7854 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -37.5366 -12.7854 0 - vertex -39.9072 -25.4747 0 - vertex -37.0548 -18.7102 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -47.8577 -36.863 0 - vertex -37.5366 -12.7854 0 - vertex -39.1303 25.4589 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -26.0224 24.2804 0 - vertex -26.0647 23.8437 0 - vertex -24.664 24.0122 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -26.0224 24.2804 0 - vertex -27.3687 23.7586 0 - vertex -26.0647 23.8437 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.1365 24.9019 0 - vertex -27.3687 23.7586 0 - vertex -26.0224 24.2804 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.1365 24.9019 0 - vertex -28.4642 23.8513 0 - vertex -27.3687 23.7586 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.1365 24.9019 0 - vertex -29.3958 24.13 0 - vertex -28.4642 23.8513 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -29.9035 25.8898 0 - vertex -29.3958 24.13 0 - vertex -28.1365 24.9019 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -29.9035 25.8898 0 - vertex -30.2081 24.6027 0 - vertex -29.3958 24.13 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -29.9035 25.8898 0 - vertex -30.8173 24.9813 0 - vertex -30.2081 24.6027 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -31.1793 25.0376 0 - vertex -29.9035 25.8898 0 - vertex -31.116 26.9038 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -29.9035 25.8898 0 - vertex -31.1793 25.0376 0 - vertex -30.8173 24.9813 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -31.2912 27.2229 0 - vertex -31.1793 25.0376 0 - vertex -31.116 26.9038 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -34.2108 23.023 0 - vertex -31.1793 25.0376 0 - vertex -31.2912 27.2229 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -11.5389 20.1801 0 - vertex -11.1208 19.5935 0 - vertex -10.9412 20.0018 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -11.5389 20.1801 0 - vertex -12.0133 18.8648 0 - vertex -11.1208 19.5935 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -12.9783 20.2187 0 - vertex -12.0133 18.8648 0 - vertex -11.5389 20.1801 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -12.9783 20.2187 0 - vertex -15.009 16.7116 0 - vertex -12.0133 18.8648 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -16.3196 19.9968 0 - vertex -15.009 16.7116 0 - vertex -12.9783 20.2187 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.3196 19.9968 0 - vertex -17.0754 15.711 0 - vertex -15.009 16.7116 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -20.1789 19.4139 0 - vertex -17.0754 15.711 0 - vertex -16.3196 19.9968 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -17.0754 15.711 0 - vertex -20.1789 19.4139 0 - vertex -19.733 14.7364 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -20.1789 19.4139 0 - vertex -22.3118 14.0374 0 - vertex -19.733 14.7364 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -24.1572 19.0472 0 - vertex -22.3118 14.0374 0 - vertex -20.1789 19.4139 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.1572 19.0472 0 - vertex -24.873 13.6003 0 - vertex -22.3118 14.0374 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -27.5587 18.9414 0 - vertex -24.873 13.6003 0 - vertex -24.1572 19.0472 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.873 13.6003 0 - vertex -27.5587 18.9414 0 - vertex -27.4778 13.4117 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -29.687 19.1409 0 - vertex -27.4778 13.4117 0 - vertex -27.5587 18.9414 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -29.687 19.1409 0 - vertex -29.9412 13.2465 0 - vertex -27.4778 13.4117 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -29.687 19.1409 0 - vertex -30.3118 13.0393 0 - vertex -29.9412 13.2465 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -33.0651 20.3093 0 - vertex -30.3118 13.0393 0 - vertex -29.687 19.1409 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -30.3118 13.0393 0 - vertex -33.0651 20.3093 0 - vertex -30.3887 12.6783 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 23.2082 3.44442 0 - vertex 23.5966 4.95794 0 - vertex 23.3811 5.8089 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 23.5966 4.95794 0 - vertex 23.2082 3.44442 0 - vertex 23.5377 4.18291 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.8875 6.77518 0 - vertex 23.2082 3.44442 0 - vertex 23.3811 5.8089 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 16.0239 2.90744 0 - vertex 23.2082 3.44442 0 - vertex 22.8875 6.77518 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 16.0239 2.90744 0 - vertex 22.8875 6.77518 0 - vertex 21.7142 8.22365 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 47.2139 -19.2263 0 - vertex 26.9177 3.98634 0 - vertex 26.953 2.16551 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex 26.9177 3.98634 0 - vertex 27.209 8.08714 0 - vertex 26.8985 6.51977 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 26.7235 1.18648 0 - vertex 38.4798 -20.1181 0 - vertex 26.8464 1.29842 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 26.9177 3.98634 0 - vertex 27.528 9.70386 0 - vertex 27.209 8.08714 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 38.4798 -20.1181 0 - vertex 26.7235 1.18648 0 - vertex 29.9429 -19.4981 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 29.9429 -19.4981 0 - vertex 26.7235 1.18648 0 - vertex 28.989 -19.2301 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 19.6777 -11.13 0 - vertex 28.989 -19.2301 0 - vertex 26.7235 1.18648 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 20.9081 -2.19366 0 - vertex 26.7235 1.18648 0 - vertex 26.5455 1.2697 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 28.989 -19.2301 0 - vertex 19.6777 -11.13 0 - vertex 27.8281 -19.1444 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 23.9858 2.16372 0 - vertex 26.5455 1.2697 0 - vertex 25.9977 1.96397 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 27.8281 -19.1444 0 - vertex 19.6777 -11.13 0 - vertex 26.5413 -19.2026 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 24.7523 2.4559 0 - vertex 25.9977 1.96397 0 - vertex 25.3153 2.68052 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 24.7523 2.4559 0 - vertex 25.3153 2.68052 0 - vertex 25.0347 2.67962 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 23.9858 2.16372 0 - vertex 25.9977 1.96397 0 - vertex 24.7523 2.4559 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 26.5455 1.2697 0 - vertex 23.9858 2.16372 0 - vertex 21.0968 -1.15452 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 21.0968 -1.15452 0 - vertex 23.9858 2.16372 0 - vertex 23.1222 1.97635 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 26.7235 1.18648 0 - vertex 20.9081 -2.19366 0 - vertex 20.4179 -3.0084 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 21.0282 0.220415 0 - vertex 23.1222 1.97635 0 - vertex 22.8505 1.9828 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 21.0282 0.220415 0 - vertex 22.8505 1.9828 0 - vertex 22.7784 2.30129 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 23.2082 3.44442 0 - vertex 16.0239 2.90744 0 - vertex 22.7784 2.30129 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 26.5455 1.2697 0 - vertex 21.0968 -1.15452 0 - vertex 20.9081 -2.19366 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 26.5413 -19.2026 0 - vertex 19.6777 -11.13 0 - vertex 25.4359 -19.4082 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 23.1222 1.97635 0 - vertex 21.0282 0.220415 0 - vertex 21.0968 -1.15452 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.3368 5.33522 0 - vertex 21.7142 8.22365 0 - vertex 19.7157 9.66569 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex 19.4865 -0.127098 0 - vertex 22.7784 2.30129 0 - vertex 16.0239 2.90744 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 14.9551 7.69881 0 - vertex 19.7157 9.66569 0 - vertex 18.6847 10.137 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.7784 2.30129 0 - vertex 19.4865 -0.127098 0 - vertex 21.0282 0.220415 0 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex 16.8564 0.883682 0 - vertex 19.4865 -0.127098 0 - vertex 16.0239 2.90744 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 14.9551 7.69881 0 - vertex 18.6847 10.137 0 - vertex 17.337 10.3363 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 19.4865 -0.127098 0 - vertex 16.8564 0.883682 0 - vertex 18.2674 -0.466912 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 18.2674 -0.466912 0 - vertex 16.8564 0.883682 0 - vertex 17.6745 -0.267811 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.3572 9.74689 0 - vertex 17.337 10.3363 0 - vertex 15.9933 10.3315 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.3572 9.74689 0 - vertex 15.9933 10.3315 0 - vertex 15.6762 10.1383 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 14.9426 8.95486 0 - vertex 17.337 10.3363 0 - vertex 15.3572 9.74689 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 21.7142 8.22365 0 - vertex 15.3368 5.33522 0 - vertex 16.0239 2.90744 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 19.7157 9.66569 0 - vertex 14.9551 7.69881 0 - vertex 15.3368 5.33522 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 17.337 10.3363 0 - vertex 14.9426 8.95486 0 - vertex 14.9551 7.69881 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 25.4359 -19.4082 0 - vertex 19.6777 -11.13 0 - vertex 23.0737 -20.4525 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 26.7235 1.18648 0 - vertex 20.4179 -3.0084 0 - vertex 19.6777 -11.13 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 17.1521 -17.7131 0 - vertex 23.0737 -20.4525 0 - vertex 19.6777 -11.13 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 23.0737 -20.4525 0 - vertex 17.1521 -17.7131 0 - vertex 21.6367 -21.3703 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 20.4179 -3.0084 0 - vertex 19.5452 -10.7956 0 - vertex 19.6777 -11.13 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 19.4334 -3.80993 0 - vertex 19.5452 -10.7956 0 - vertex 20.4179 -3.0084 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 17.7619 -4.80944 0 - vertex 19.5452 -10.7956 0 - vertex 19.4334 -3.80993 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 19.5452 -10.7956 0 - vertex 17.7619 -4.80944 0 - vertex 19.0845 -10.6988 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 15.0012 -6.23992 0 - vertex 19.0845 -10.6988 0 - vertex 17.7619 -4.80944 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 19.0845 -10.6988 0 - vertex 15.0012 -6.23992 0 - vertex 16.7993 -11.2316 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 12.6103 -7.15898 0 - vertex 16.7993 -11.2316 0 - vertex 15.0012 -6.23992 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 16.7993 -11.2316 0 - vertex 12.6103 -7.15898 0 - vertex 13.71 -12.1451 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 13.71 -12.1451 0 - vertex 12.6103 -7.15898 0 - vertex 13.1035 -12.4147 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 10.2421 -7.67101 0 - vertex 13.1035 -12.4147 0 - vertex 12.6103 -7.15898 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 13.1035 -12.4147 0 - vertex 10.2421 -7.67101 0 - vertex 12.6527 -12.8127 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.6527 -12.8127 0 - vertex 10.2421 -7.67101 0 - vertex 12.4073 -13.2773 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex 11.2177 -19.5302 0 - vertex 12.4073 -13.2773 0 - vertex 10.3474 -19.1774 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.058 -19.7199 0 - vertex 11.2177 -19.5302 0 - vertex 11.7785 -19.8211 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.4073 -13.2773 0 - vertex 11.2177 -19.5302 0 - vertex 12.058 -19.7199 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 7.54923 -7.88041 0 - vertex 12.4073 -13.2773 0 - vertex 10.2421 -7.67101 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.4073 -13.2773 0 - vertex 8.75581 -19.1712 0 - vertex 10.3474 -19.1774 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 7.06268 -19.3694 0 - vertex 12.4073 -13.2773 0 - vertex 7.54923 -7.88041 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.4073 -13.2773 0 - vertex 7.06268 -19.3694 0 - vertex 8.75581 -19.1712 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 5.03167 -7.88498 0 - vertex 7.06268 -19.3694 0 - vertex 7.54923 -7.88041 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 7.06268 -19.3694 0 - vertex 5.03167 -7.88498 0 - vertex 5.689 -19.9339 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 3.854 -7.59505 0 - vertex 5.689 -19.9339 0 - vertex 5.03167 -7.88498 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 3.854 -7.59505 0 - vertex 3.72385 -21.1527 0 - vertex 5.689 -19.9339 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -4.70045 -19.8327 0 - vertex 3.72385 -21.1527 0 - vertex 3.854 -7.59505 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -5.57075 -19.2012 0 - vertex 3.854 -7.59505 0 - vertex 1.04019 -5.91722 0 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex -4.06681 -20.6308 0 - vertex 3.72385 -21.1527 0 - vertex -4.70045 -19.8327 0 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex -3.85646 -21.6547 0 - vertex 1.84511 -22.661 0 - vertex -4.06681 -20.6308 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -5.57075 -19.2012 0 - vertex 1.04019 -5.91722 0 - vertex -2.05653 -4.03047 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.84511 -22.661 0 - vertex -3.85646 -21.6547 0 - vertex 0.168338 -24.355 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.168338 -24.355 0 - vertex -3.89417 -22.8317 0 - vertex -1.19093 -26.1306 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -7.1272 -19.1706 0 - vertex -2.05653 -4.03047 0 - vertex -3.45272 -3.03042 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -17.4385 -11.5861 0 - vertex -3.45272 -3.03042 0 - vertex -3.71458 -2.66291 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -4.26405 -24.3543 0 - vertex -1.19093 -26.1306 0 - vertex -3.89417 -22.8317 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 21.6367 -21.3703 0 - vertex 17.1521 -17.7131 0 - vertex 20.2954 -22.4759 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 20.2954 -22.4759 0 - vertex 17.1521 -17.7131 0 - vertex 19.0386 -23.7798 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 14.5835 -23.8342 0 - vertex 19.0386 -23.7798 0 - vertex 17.1521 -17.7131 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 19.0386 -23.7798 0 - vertex 14.5835 -23.8342 0 - vertex 17.855 -25.2923 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 17.855 -25.2923 0 - vertex 14.5835 -23.8342 0 - vertex 16.4055 -27.6373 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 16.4055 -27.6373 0 - vertex 14.5835 -23.8342 0 - vertex 15.3794 -29.9771 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.3794 -29.9771 0 - vertex 11.4887 -31.4602 0 - vertex 14.7938 -32.2631 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 11.4887 -31.4602 0 - vertex 15.3794 -29.9771 0 - vertex 14.5835 -23.8342 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 25.1513 17.7384 0 - vertex 26.0816 17.5963 0 - vertex 25.9892 18.2943 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 25.1513 17.7384 0 - vertex 25.9892 18.2943 0 - vertex 25.7331 18.8483 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex 25.704 16.8274 0 - vertex 26.0816 17.5963 0 - vertex 25.4738 17.2443 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 26.0816 17.5963 0 - vertex 25.704 16.8274 0 - vertex 25.8979 16.7563 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 24.5942 18.0475 0 - vertex 25.7331 18.8483 0 - vertex 25.3447 19.2137 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 26.0816 17.5963 0 - vertex 25.1513 17.7384 0 - vertex 25.4738 17.2443 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 24.5942 18.0475 0 - vertex 25.3447 19.2137 0 - vertex 24.8554 19.3454 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 25.7331 18.8483 0 - vertex 24.5942 18.0475 0 - vertex 25.1513 17.7384 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 23.3909 19.6849 0 - vertex 24.5942 18.0475 0 - vertex 24.8554 19.3454 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.335 18.2522 0 - vertex 23.3909 19.6849 0 - vertex 22.6368 20.047 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 23.3909 19.6849 0 - vertex 22.335 18.2522 0 - vertex 24.5942 18.0475 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 20.9591 18.304 0 - vertex 22.6368 20.047 0 - vertex 22.0911 20.5797 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 19.6596 20.6529 0 - vertex 22.0911 20.5797 0 - vertex 21.7245 21.3239 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 19.4421 21.9215 0 - vertex 21.7245 21.3239 0 - vertex 21.508 22.3204 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 19.4421 21.9215 0 - vertex 21.508 22.3204 0 - vertex 21.2518 23.2891 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.0911 20.5797 0 - vertex 19.6596 20.6529 0 - vertex 19.8405 19.3078 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 18.9185 22.6398 0 - vertex 21.2518 23.2891 0 - vertex 20.762 24.0784 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.6368 20.047 0 - vertex 20.9591 18.304 0 - vertex 22.335 18.2522 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 18.9185 22.6398 0 - vertex 20.762 24.0784 0 - vertex 20.0338 24.6942 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.0911 20.5797 0 - vertex 19.8405 19.3078 0 - vertex 20.9591 18.304 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 20.9591 18.304 0 - vertex 19.8405 19.3078 0 - vertex 20.2006 18.5903 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 21.7245 21.3239 0 - vertex 19.4421 21.9215 0 - vertex 19.6596 20.6529 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 18.9185 22.6398 0 - vertex 20.0338 24.6942 0 - vertex 19.062 25.1422 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 21.2518 23.2891 0 - vertex 18.9185 22.6398 0 - vertex 19.4421 21.9215 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 19.062 25.1422 0 - vertex 17.6852 23.4449 0 - vertex 18.9185 22.6398 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 17.2513 25.98 0 - vertex 17.6852 23.4449 0 - vertex 19.062 25.1422 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.1211 24.4531 0 - vertex 17.2513 25.98 0 - vertex 15.7223 27.2873 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 13.4969 25.2416 0 - vertex 15.7223 27.2873 0 - vertex 15.122 28.0941 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 17.2513 25.98 0 - vertex 15.1211 24.4531 0 - vertex 17.6852 23.4449 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 11.7374 28.4518 0 - vertex 15.122 28.0941 0 - vertex 15.0577 29.0611 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.7223 27.2873 0 - vertex 13.4969 25.2416 0 - vertex 15.1211 24.4531 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -29.0303 22.3563 0 - vertex -30.0976 22.0525 0 - vertex -28.3511 21.9725 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -30.3878 23.2826 0 - vertex -30.0976 22.0525 0 - vertex -29.0303 22.3563 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -32.1178 22.3529 0 - vertex -30.3878 23.2826 0 - vertex -31.0943 24.213 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -30.3878 23.2826 0 - vertex -32.1178 22.3529 0 - vertex -30.0976 22.0525 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -34.2108 23.023 0 - vertex -31.0943 24.213 0 - vertex -31.2773 24.779 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -31.1793 25.0376 0 - vertex -34.2108 23.023 0 - vertex -31.2773 24.779 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -18.5428 -26.6889 0 - vertex -23.655 -30.4649 0 - vertex -23.4462 -30.738 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -25.4741 -26.9141 0 - vertex -18.5428 -26.6889 0 - vertex -24.4076 -24.3815 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -18.5428 -26.6889 0 - vertex -25.4741 -26.9141 0 - vertex -23.655 -30.4649 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -23.655 -30.4649 0 - vertex -25.4741 -26.9141 0 - vertex -24.0819 -30.2475 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.0819 -30.2475 0 - vertex -25.4741 -26.9141 0 - vertex -24.4667 -30.1541 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -26.2338 -28.3696 0 - vertex -24.4667 -30.1541 0 - vertex -25.4741 -26.9141 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.4667 -30.1541 0 - vertex -26.2338 -28.3696 0 - vertex -24.8569 -30.2998 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -26.8752 -29.0336 0 - vertex -24.8569 -30.2998 0 - vertex -26.2338 -28.3696 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.8569 -30.2998 0 - vertex -26.8752 -29.0336 0 - vertex -26.8283 -32.1012 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -27.5872 -29.1914 0 - vertex -26.8283 -32.1012 0 - vertex -26.8752 -29.0336 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.1878 -29.097 0 - vertex -26.8283 -32.1012 0 - vertex -27.5872 -29.1914 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.1878 -29.097 0 - vertex -29.0969 -33.8499 0 - vertex -26.8283 -32.1012 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.1838 -28.4809 0 - vertex -32.142 -25.4759 0 - vertex -28.1878 -29.097 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -35.4824 -26.6225 0 - vertex -28.1878 -29.097 0 - vertex -32.142 -25.4759 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.1878 -29.097 0 - vertex -30.2578 -34.4631 0 - vertex -29.0969 -33.8499 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.1878 -29.097 0 - vertex -31.3644 -34.8586 0 - vertex -30.2578 -34.4631 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -35.4824 -26.6225 0 - vertex -32.142 -25.4759 0 - vertex -34.9626 -25.4747 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.1878 -29.097 0 - vertex -35.4824 -26.6225 0 - vertex -31.3644 -34.8586 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -31.3644 -34.8586 0 - vertex -35.4824 -26.6225 0 - vertex -35.0529 -35.0835 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -38.7331 -34.5543 0 - vertex -35.0529 -35.0835 0 - vertex -35.4824 -26.6225 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -35.0529 -35.0835 0 - vertex -38.7331 -34.5543 0 - vertex -38.4261 -34.9619 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -18.6886 -22.3738 0 - vertex -24.4076 -24.3815 0 - vertex -18.5428 -26.6889 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -23.8149 -31.5911 0 - vertex -21.28 -33.2523 0 - vertex -23.4462 -30.738 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -18.5428 -26.6889 0 - vertex -23.4462 -30.738 0 - vertex -21.28 -33.2523 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -24.7956 -33.2498 0 - vertex -21.28 -33.2523 0 - vertex -23.8149 -31.5911 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -21.28 -33.2523 0 - vertex -24.7956 -33.2498 0 - vertex -22.458 -35.4568 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -23.6767 -35.9691 0 - vertex -22.458 -35.4568 0 - vertex -24.7956 -33.2498 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -22.458 -35.4568 0 - vertex -23.6767 -35.9691 0 - vertex -23.007 -35.8619 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -23.6767 -35.9691 0 - vertex -24.7956 -33.2498 0 - vertex -24.4194 -36.2501 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -27.2791 -36.8782 0 - vertex -24.4194 -36.2501 0 - vertex -24.7956 -33.2498 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.4194 -36.2501 0 - vertex -27.2791 -36.8782 0 - vertex -24.9699 -36.888 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.9699 -36.888 0 - vertex -27.2791 -36.8782 0 - vertex -25.157 -37.5754 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -22.4212 26.8695 0 - vertex -21.4485 26.3569 0 - vertex -21.2681 26.5576 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -21.4485 26.3569 0 - vertex -22.4212 26.8695 0 - vertex -22.0473 26.2369 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.8433 26.205 0 - vertex -22.4212 26.8695 0 - vertex -23.8902 27.3484 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -22.4212 26.8695 0 - vertex -24.8433 26.205 0 - vertex -22.0473 26.2369 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.3225 27.6757 0 - vertex -24.8433 26.205 0 - vertex -23.8902 27.3484 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -27.4214 26.3653 0 - vertex -24.3225 27.6757 0 - vertex -24.3632 27.9554 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -8.78909 -22.7249 0 - vertex -8.46819 -23.4267 0 - vertex -8.55624 -22.9989 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -8.46819 -23.4267 0 - vertex -8.78909 -22.7249 0 - vertex -9.69161 -22.56 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -8.46819 -23.4267 0 - vertex -9.69161 -22.56 0 - vertex -8.72405 -24.8218 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -10.5461 -22.7271 0 - vertex -8.72405 -24.8218 0 - vertex -9.69161 -22.56 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -11.3967 -23.0769 0 - vertex -8.72405 -24.8218 0 - vertex -10.5461 -22.7271 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -12.4124 -23.7203 0 - vertex -8.72405 -24.8218 0 - vertex -11.3967 -23.0769 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -8.72405 -24.8218 0 - vertex -12.4124 -23.7203 0 - vertex -9.55184 -27.0667 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -13.1427 -24.3848 0 - vertex -9.55184 -27.0667 0 - vertex -12.4124 -23.7203 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -14.2216 -26.3227 0 - vertex -9.55184 -27.0667 0 - vertex -13.7062 -25.2068 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -9.55184 -27.0667 0 - vertex -15.3894 -29.1914 0 - vertex -11.5932 -32.143 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -9.55184 -27.0667 0 - vertex -13.1427 -24.3848 0 - vertex -13.7062 -25.2068 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -15.3894 -29.1914 0 - vertex -9.55184 -27.0667 0 - vertex -14.2216 -26.3227 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.8281 -32.7116 0 - vertex -11.5932 -32.143 0 - vertex -15.3894 -29.1914 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -11.5932 -32.143 0 - vertex -16.8281 -32.7116 0 - vertex -12.3385 -33.8339 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -12.3385 -33.8339 0 - vertex -16.8281 -32.7116 0 - vertex -13.0448 -35.0276 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -14.3732 -35.9691 0 - vertex -13.0448 -35.0276 0 - vertex -16.8281 -32.7116 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -13.0448 -35.0276 0 - vertex -14.3732 -35.9691 0 - vertex -13.7203 -35.7356 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -14.3732 -35.9691 0 - vertex -16.8281 -32.7116 0 - vertex -14.8949 -36.1495 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -16.5846 -36.2152 0 - vertex -14.8949 -36.1495 0 - vertex -16.8281 -32.7116 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.6989 -37.6188 0 - vertex -15.9213 -37.1689 0 - vertex -16.2226 -36.752 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -14.8949 -36.1495 0 - vertex -16.5846 -36.2152 0 - vertex -15.4682 -36.5832 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -15.4682 -36.5832 0 - vertex -16.2226 -36.752 0 - vertex -15.9213 -37.1689 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -15.4682 -36.5832 0 - vertex -16.5846 -36.2152 0 - vertex -16.2226 -36.752 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -17.7285 -35.3062 0 - vertex -16.5846 -36.2152 0 - vertex -16.8281 -32.7116 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.5846 -36.2152 0 - vertex -17.7285 -35.3062 0 - vertex -17.3742 -35.9691 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -17.3742 -35.9691 0 - vertex -17.7285 -35.3062 0 - vertex -17.6987 -35.8223 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -10.3766 -20.1728 0 - vertex -11.7016 -19.4898 0 - vertex -11.6824 -19.9072 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.45272 -3.03042 0 - vertex -11.9141 -19.2259 0 - vertex -11.7016 -19.4898 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.45272 -3.03042 0 - vertex -17.4385 -11.5861 0 - vertex -11.9141 -19.2259 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -17.5299 12.3491 0 - vertex -3.71458 -2.66291 0 - vertex -13.7227 13.3517 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -17.4456 -12.0833 0 - vertex -11.9141 -19.2259 0 - vertex -17.4385 -11.5861 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -11.9141 -19.2259 0 - vertex -17.4456 -12.0833 0 - vertex -12.3137 -19.1333 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -17.7993 -11.4712 0 - vertex -3.71458 -2.66291 0 - vertex -17.5299 12.3491 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.71458 -2.66291 0 - vertex -17.7993 -11.4712 0 - vertex -17.4385 -11.5861 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -20.0298 12.0063 0 - vertex -17.7993 -11.4712 0 - vertex -17.5299 12.3491 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -22.4428 11.7593 0 - vertex -17.7993 -11.4712 0 - vertex -20.0298 12.0063 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -27.1868 -11.3523 0 - vertex -22.4428 11.7593 0 - vertex -25.7097 11.6586 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -22.4428 11.7593 0 - vertex -27.1868 -11.3523 0 - vertex -17.7993 -11.4712 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.6588 11.7129 0 - vertex -27.1868 -11.3523 0 - vertex -25.7097 11.6586 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -34.87 -11.3196 0 - vertex -28.6588 11.7129 0 - vertex -30.1182 11.9311 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -36.792 -11.6364 0 - vertex -30.1182 11.9311 0 - vertex -30.3887 12.6783 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -35.7552 21.6337 0 - vertex -30.3887 12.6783 0 - vertex -33.0651 20.3093 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.6588 11.7129 0 - vertex -34.87 -11.3196 0 - vertex -27.1868 -11.3523 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -37.6991 23.0789 0 - vertex -30.3887 12.6783 0 - vertex -35.7552 21.6337 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -30.1182 11.9311 0 - vertex -36.1936 -11.4238 0 - vertex -34.87 -11.3196 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -30.1182 11.9311 0 - vertex -36.792 -11.6364 0 - vertex -36.1936 -11.4238 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -30.3887 12.6783 0 - vertex -37.6991 23.0789 0 - vertex -36.792 -11.6364 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -36.792 -11.6364 0 - vertex -37.6991 23.0789 0 - vertex -37.3951 -12.1929 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -38.3729 23.836 0 - vertex -37.3951 -12.1929 0 - vertex -37.6991 23.0789 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.80393 -35.193 0 - vertex -7.51249 -36.3769 0 - vertex -7.31439 -36.7536 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.99709 -33.5697 0 - vertex -8.33648 -34.384 0 - vertex -7.51249 -36.3769 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -7.51249 -36.3769 0 - vertex -8.33648 -34.384 0 - vertex -7.98605 -36.0592 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -8.56822 -35.3052 0 - vertex -7.98605 -36.0592 0 - vertex -8.33648 -34.384 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -7.98605 -36.0592 0 - vertex -8.56822 -35.3052 0 - vertex -8.51129 -35.7129 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.41055 11.926 0 - vertex 1.8467 12.7398 0 - vertex 1.50002 13.1874 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.8467 12.7398 0 - vertex 1.41055 11.926 0 - vertex 1.87173 12.344 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.918757 13.5702 0 - vertex 1.41055 11.926 0 - vertex 1.50002 13.1874 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.918757 13.5702 0 - vertex 0.535115 11.4454 0 - vertex 1.41055 11.926 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 0.918757 13.5702 0 - vertex -0.394194 11.1972 0 - vertex 0.535115 11.4454 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.928844 14.138 0 - vertex -0.394194 11.1972 0 - vertex 0.918757 13.5702 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.928844 14.138 0 - vertex -1.46211 11.1697 0 - vertex -0.394194 11.1972 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.928844 14.138 0 - vertex -2.75335 11.3511 0 - vertex -1.46211 11.1697 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.65881 14.4362 0 - vertex -2.75335 11.3511 0 - vertex -0.928844 14.138 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.65881 14.4362 0 - vertex -5.07797 11.6776 0 - vertex -2.75335 11.3511 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -7.23385 14.4578 0 - vertex -5.07797 11.6776 0 - vertex -3.65881 14.4362 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -5.07797 11.6776 0 - vertex -7.23385 14.4578 0 - vertex -5.71478 11.6495 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -5.71478 11.6495 0 - vertex -7.23385 14.4578 0 - vertex -5.93765 11.491 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -13.7227 13.3517 0 - vertex -5.93765 11.491 0 - vertex -10.6367 14.238 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -4.99153 10.6633 0 - vertex -13.7227 13.3517 0 - vertex -3.71458 -2.66291 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.45272 -3.03042 0 - vertex -8.78621 -19.378 0 - vertex -7.1272 -19.1706 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.45272 -3.03042 0 - vertex -11.7016 -19.4898 0 - vertex -8.78621 -19.378 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -11.7016 -19.4898 0 - vertex -10.3766 -20.1728 0 - vertex -8.78621 -19.378 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -11.8627 -20.4599 0 - vertex -10.3766 -20.1728 0 - vertex -11.6824 -19.9072 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -10.3766 -20.1728 0 - vertex -11.8627 -20.4599 0 - vertex -12.0544 -21.102 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -12.3137 -19.1333 0 - vertex -17.4456 -12.0833 0 - vertex -15.1553 -19.8912 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -19.3785 -17.1305 0 - vertex -15.1553 -19.8912 0 - vertex -17.4456 -12.0833 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -15.1553 -19.8912 0 - vertex -19.3785 -17.1305 0 - vertex -17.9982 -20.7653 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -19.683 -17.584 0 - vertex -17.9982 -20.7653 0 - vertex -19.3785 -17.1305 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -20.1126 -17.9213 0 - vertex -17.9982 -20.7653 0 - vertex -19.683 -17.584 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -17.9982 -20.7653 0 - vertex -20.1126 -17.9213 0 - vertex -18.4336 -21.0091 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -17.8179 -22.6324 0 - vertex -17.299 -23.335 0 - vertex -17.2695 -22.7276 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -18.3659 -22.5704 0 - vertex -17.299 -23.335 0 - vertex -17.8179 -22.6324 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -18.3659 -22.5704 0 - vertex -18.5428 -26.6889 0 - vertex -17.299 -23.335 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -18.6886 -22.3738 0 - vertex -18.5428 -26.6889 0 - vertex -18.3659 -22.5704 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -18.7084 -21.5139 0 - vertex -22.6991 -20.0641 0 - vertex -18.7986 -22.0269 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -20.6062 -18.108 0 - vertex -18.4336 -21.0091 0 - vertex -20.1126 -17.9213 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -18.4336 -21.0091 0 - vertex -20.6062 -18.108 0 - vertex -18.7084 -21.5139 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -22.6991 -20.0641 0 - vertex -20.6062 -18.108 0 - vertex -22.6057 -19.3555 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -20.6062 -18.108 0 - vertex -22.6991 -20.0641 0 - vertex -18.7084 -21.5139 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -22.6057 -19.3555 0 - vertex -20.6062 -18.108 0 - vertex -21.1029 -18.1093 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -23.1278 -21.2395 0 - vertex -18.7986 -22.0269 0 - vertex -22.6991 -20.0641 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -22.6057 -19.3555 0 - vertex -21.1029 -18.1093 0 - vertex -21.3898 -18.0171 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -22.8641 -19.008 0 - vertex -21.3898 -18.0171 0 - vertex -21.538 -17.8042 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -23.4908 -18.9156 0 - vertex -21.538 -17.8042 0 - vertex -21.5846 -16.4428 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -22.1413 -14.5577 0 - vertex -21.5846 -16.4428 0 - vertex -21.6401 -15.0493 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -22.1413 -14.5577 0 - vertex -21.6401 -15.0493 0 - vertex -21.8106 -14.7733 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -18.7986 -22.0269 0 - vertex -23.1278 -21.2395 0 - vertex -18.6886 -22.3738 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -21.5846 -16.4428 0 - vertex -22.1413 -14.5577 0 - vertex -23.3419 -14.2877 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.4076 -24.3815 0 - vertex -18.6886 -22.3738 0 - vertex -23.1278 -21.2395 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -21.28 -33.2523 0 - vertex -22.458 -35.4568 0 - vertex -21.9191 -34.6287 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -21.3898 -18.0171 0 - vertex -22.8641 -19.008 0 - vertex -22.6057 -19.3555 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -21.5846 -16.4428 0 - vertex -23.3419 -14.2877 0 - vertex -23.4908 -18.9156 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -21.538 -17.8042 0 - vertex -23.4908 -18.9156 0 - vertex -22.8641 -19.008 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -23.3419 -14.2877 0 - vertex -24.1111 -19.1062 0 - vertex -23.4908 -18.9156 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -26.1195 -14.1654 0 - vertex -24.1111 -19.1062 0 - vertex -23.3419 -14.2877 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.1111 -19.1062 0 - vertex -26.1195 -14.1654 0 - vertex -24.7225 -19.9745 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -30.8809 -15.6487 0 - vertex -24.7225 -19.9745 0 - vertex -26.1195 -14.1654 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.7225 -19.9745 0 - vertex -30.8809 -15.6487 0 - vertex -25.7001 -21.2849 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -32.1593 -18.5412 0 - vertex -25.7001 -21.2849 0 - vertex -30.8809 -15.6487 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -30.8809 -15.6487 0 - vertex -26.1195 -14.1654 0 - vertex -29.5608 -14.1906 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -30.3887 -14.5514 0 - vertex -29.5608 -14.1906 0 - vertex -30.2116 -14.321 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -29.5608 -14.1906 0 - vertex -30.3887 -14.5514 0 - vertex -30.8809 -15.6487 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -25.7001 -21.2849 0 - vertex -32.1593 -18.5412 0 - vertex -26.9351 -22.1109 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -26.9351 -22.1109 0 - vertex -32.1593 -18.5412 0 - vertex -28.6031 -22.5277 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.6031 -22.5277 0 - vertex -32.1593 -18.5412 0 - vertex -30.8797 -22.6102 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -33.3019 -21.4299 0 - vertex -30.8797 -22.6102 0 - vertex -32.1593 -18.5412 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -30.8797 -22.6102 0 - vertex -33.3019 -21.4299 0 - vertex -32.5249 -22.5543 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -33.3019 -21.4299 0 - vertex -33.3295 -22.4108 0 - vertex -32.5249 -22.5543 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -33.3295 -22.4108 0 - vertex -33.3019 -21.4299 0 - vertex -33.5147 -22.0719 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 14.2455 -2.23644 0 - vertex 14.2516 -3.15818 0 - vertex 14.333 -2.7489 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 14.2455 -2.23644 0 - vertex 13.8131 -3.7697 0 - vertex 14.2516 -3.15818 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 13.172 -4.2601 0 - vertex 14.2455 -2.23644 0 - vertex 13.5923 -0.94501 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 14.2455 -2.23644 0 - vertex 13.172 -4.2601 0 - vertex 13.8131 -3.7697 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 13.5923 -0.94501 0 - vertex 12.4032 -4.58609 0 - vertex 13.172 -4.2601 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 10.2758 -4.53506 0 - vertex 13.5923 -0.94501 0 - vertex 12.3489 0.629998 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 13.5923 -0.94501 0 - vertex 11.5814 -4.70438 0 - vertex 12.4032 -4.58609 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 7.74282 -3.09522 0 - vertex 12.3489 0.629998 0 - vertex 10.5724 2.40247 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 13.5923 -0.94501 0 - vertex 10.2758 -4.53506 0 - vertex 11.5814 -4.70438 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 6.41545 -1.76788 0 - vertex 10.5724 2.40247 0 - vertex 9.13441 3.60373 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.3489 0.629998 0 - vertex 9.01294 -4.00814 0 - vertex 10.2758 -4.53506 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 4.6091 0.441775 0 - vertex 9.13441 3.60373 0 - vertex 8.18559 4.25764 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.3489 0.629998 0 - vertex 7.74282 -3.09522 0 - vertex 9.01294 -4.00814 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 10.5724 2.40247 0 - vertex 6.41545 -1.76788 0 - vertex 7.74282 -3.09522 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 4.39665 0.754678 0 - vertex 8.18559 4.25764 0 - vertex 5.26682 5.76024 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 9.13441 3.60373 0 - vertex 4.6091 0.441775 0 - vertex 6.41545 -1.76788 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 8.18559 4.25764 0 - vertex 4.39665 0.754678 0 - vertex 4.6091 0.441775 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.66409 7.13679 0 - vertex 4.39665 0.754678 0 - vertex 5.26682 5.76024 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 4.39665 0.754678 0 - vertex 1.66409 7.13679 0 - vertex 4.24084 0.464987 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.55278 -2.51803 0 - vertex 4.24084 0.464987 0 - vertex 1.66409 7.13679 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 4.24084 0.464987 0 - vertex 1.09298 -4.60426 0 - vertex 3.9592 -5.58648 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.55278 -2.51803 0 - vertex 1.66409 7.13679 0 - vertex -0.248642 7.94666 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 4.24084 0.464987 0 - vertex -1.72768 -3.30659 0 - vertex 1.09298 -4.60426 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.55278 -2.51803 0 - vertex -0.248642 7.94666 0 - vertex -2.78119 9.30203 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 4.24084 0.464987 0 - vertex -3.55278 -2.51803 0 - vertex -1.72768 -3.30659 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -4.99153 10.6633 0 - vertex -3.55278 -2.51803 0 - vertex -2.78119 9.30203 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -1.19093 -26.1306 0 - vertex -4.26405 -24.3543 0 - vertex -2.25121 -28.0146 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -3.89417 -22.8317 0 - vertex 0.168338 -24.355 0 - vertex -3.85646 -21.6547 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 3.72385 -21.1527 0 - vertex -4.06681 -20.6308 0 - vertex 1.84511 -22.661 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.55278 -2.51803 0 - vertex -4.99153 10.6633 0 - vertex -3.71458 -2.66291 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -13.7227 13.3517 0 - vertex -4.99153 10.6633 0 - vertex -5.93765 11.491 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 3.854 -7.59505 0 - vertex -5.57075 -19.2012 0 - vertex -4.70045 -19.8327 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -10.6367 14.238 0 - vertex -5.93765 11.491 0 - vertex -7.23385 14.4578 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -2.05653 -4.03047 0 - vertex -7.1272 -19.1706 0 - vertex -5.57075 -19.2012 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 7.03104 -4.97268 0 - vertex 7.21237 -5.88439 0 - vertex 7.79727 -5.75259 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 5.81183 -5.98051 0 - vertex 7.03104 -4.97268 0 - vertex 5.97791 -3.63939 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 7.03104 -4.97268 0 - vertex 5.81183 -5.98051 0 - vertex 7.21237 -5.88439 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 3.9592 -5.58648 0 - vertex 5.97791 -3.63939 0 - vertex 5.02006 -2.01238 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 3.9592 -5.58648 0 - vertex 5.02006 -2.01238 0 - vertex 4.37015 -0.506109 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 5.97791 -3.63939 0 - vertex 3.9592 -5.58648 0 - vertex 5.81183 -5.98051 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 3.9592 -5.58648 0 - vertex 4.37015 -0.506109 0 - vertex 4.24084 0.464987 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 14.6656 -34.4466 0 - vertex 12.1385 -34.7994 0 - vertex 12.2351 -35.1874 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 14.7938 -32.2631 0 - vertex 11.871 -34.5351 0 - vertex 14.6656 -34.4466 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 14.6656 -34.4466 0 - vertex 11.871 -34.5351 0 - vertex 12.1385 -34.7994 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 10.915 -33.0747 0 - vertex 11.871 -34.5351 0 - vertex 11.4887 -31.4602 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 11.871 -34.5351 0 - vertex 10.915 -33.0747 0 - vertex 11.4551 -34.4353 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 10.7197 -33.9677 0 - vertex 11.4551 -34.4353 0 - vertex 10.915 -33.0747 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 11.4551 -34.4353 0 - vertex 10.7197 -33.9677 0 - vertex 10.9006 -34.3507 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.858 -14.1239 0 - vertex 13.2867 -16.8469 0 - vertex 14.1246 -14.3424 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.417 -13.7469 0 - vertex 13.2867 -16.8469 0 - vertex 12.858 -14.1239 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.417 -13.7469 0 - vertex 12.058 -19.7199 0 - vertex 13.2867 -16.8469 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.058 -19.7199 0 - vertex 12.417 -13.7469 0 - vertex 12.4073 -13.2773 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 11.8088 29.3224 0 - vertex 15.0577 29.0611 0 - vertex 12.0187 29.9363 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.122 28.0941 0 - vertex 11.7374 28.4518 0 - vertex 11.8052 27.5343 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.0577 29.0611 0 - vertex 11.8088 29.3224 0 - vertex 11.7374 28.4518 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.122 28.0941 0 - vertex 11.8052 27.5343 0 - vertex 12.0123 26.7794 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.122 28.0941 0 - vertex 12.0123 26.7794 0 - vertex 12.5486 25.9653 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 24.1542 17.4223 0 - vertex 24.7931 16.6725 0 - vertex 24.7174 17.1695 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 24.1542 17.4223 0 - vertex 23.3802 15.8262 0 - vertex 24.7931 16.6725 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.547 17.5015 0 - vertex 23.3802 15.8262 0 - vertex 24.1542 17.4223 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.547 17.5015 0 - vertex 21.1653 14.8489 0 - vertex 23.3802 15.8262 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 20.2159 17.5562 0 - vertex 21.1653 14.8489 0 - vertex 22.547 17.5015 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 20.2159 17.5562 0 - vertex 20.0668 14.6265 0 - vertex 21.1653 14.8489 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 18.4164 15.1559 0 - vertex 20.2159 17.5562 0 - vertex 19.8437 17.7553 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 16.5954 15.8977 0 - vertex 19.8437 17.7553 0 - vertex 19.5351 18.2611 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.2045 16.623 0 - vertex 19.5351 18.2611 0 - vertex 19.0948 20.2262 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 17.155 22.8321 0 - vertex 19.0948 20.2262 0 - vertex 18.6529 22.0992 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 20.2159 17.5562 0 - vertex 18.4164 15.1559 0 - vertex 20.0668 14.6265 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 13.99 17.4864 0 - vertex 19.0948 20.2262 0 - vertex 17.155 22.8321 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 19.8437 17.7553 0 - vertex 16.5954 15.8977 0 - vertex 18.4164 15.1559 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.6982 18.6425 0 - vertex 17.155 22.8321 0 - vertex 15.5055 23.4995 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 19.5351 18.2611 0 - vertex 15.2045 16.623 0 - vertex 16.5954 15.8977 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 10.9729 20.5521 0 - vertex 15.5055 23.4995 0 - vertex 14.0164 24.1527 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 19.0948 20.2262 0 - vertex 13.99 17.4864 0 - vertex 15.2045 16.623 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 10.9729 20.5521 0 - vertex 14.0164 24.1527 0 - vertex 13.0733 24.7212 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 17.155 22.8321 0 - vertex 12.6982 18.6425 0 - vertex 13.99 17.4864 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 9.71033 23.0922 0 - vertex 13.0733 24.7212 0 - vertex 12.1975 25.5292 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 9.07032 24.476 0 - vertex 12.1975 25.5292 0 - vertex 11.5037 26.4501 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 8.51885 25.3107 0 - vertex 11.5037 26.4501 0 - vertex 11.1066 27.3577 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.5055 23.4995 0 - vertex 10.9729 20.5521 0 - vertex 12.6982 18.6425 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 7.91411 25.7528 0 - vertex 11.1066 27.3577 0 - vertex 11.0411 28.3898 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 4.30515 36.0346 0 - vertex 12.0544 30.7144 0 - vertex 4.72188 37.0399 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.0544 30.7144 0 - vertex 4.30515 36.0346 0 - vertex 11.5971 30.3591 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 3.57109 31.3388 0 - vertex 11.5971 30.3591 0 - vertex 3.93589 34.5584 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 11.5971 30.3591 0 - vertex 4.30515 36.0346 0 - vertex 3.93589 34.5584 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex 4.3138 28.4461 0 - vertex 11.5971 30.3591 0 - vertex 3.57109 31.3388 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 11.5971 30.3591 0 - vertex 4.3138 28.4461 0 - vertex 5.72413 26.6445 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 4.3138 28.4461 0 - vertex 3.57109 31.3388 0 - vertex 3.67763 29.7129 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -6.41168 -29.738 0 - vertex -2.25121 -28.0146 0 - vertex -4.26405 -24.3543 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -2.25121 -28.0146 0 - vertex -6.41168 -29.738 0 - vertex -3.14673 -30.0798 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.14673 -30.0798 0 - vertex -6.41168 -29.738 0 - vertex -3.7659 -32.0301 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 33.8444 -30.1753 0 - vertex 30.1062 -30.7807 0 - vertex 30.2029 -31.1764 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 30.7817 -27.1595 0 - vertex 29.6885 -30.4984 0 - vertex 30.1062 -30.7807 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 28.9763 -27.4135 0 - vertex 29.6885 -30.4984 0 - vertex 30.7817 -27.1595 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 29.6885 -30.4984 0 - vertex 28.9763 -27.4135 0 - vertex 29.2916 -30.4642 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 28.9763 -27.4135 0 - vertex 28.199 -31.2235 0 - vertex 29.2916 -30.4642 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 25.3774 -27.4375 0 - vertex 28.199 -31.2235 0 - vertex 28.9763 -27.4135 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 28.199 -31.2235 0 - vertex 25.3774 -27.4375 0 - vertex 26.4192 -32.7448 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 25.3774 -27.4375 0 - vertex 24.9271 -33.7368 0 - vertex 26.4192 -32.7448 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 19.5138 -29.5327 0 - vertex 24.9271 -33.7368 0 - vertex 25.3774 -27.4375 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 24.9271 -33.7368 0 - vertex 19.5138 -29.5327 0 - vertex 23.5816 -34.2758 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 19.3087 -31.0557 0 - vertex 23.5816 -34.2758 0 - vertex 19.5138 -29.5327 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 22.2417 -34.4379 0 - vertex 19.3087 -31.0557 0 - vertex 21.4183 -34.349 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 19.9054 -28.0436 0 - vertex 25.3774 -27.4375 0 - vertex 20.1129 -27.4424 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 19.5138 -29.5327 0 - vertex 25.3774 -27.4375 0 - vertex 19.9054 -28.0436 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 23.5816 -34.2758 0 - vertex 19.3087 -31.0557 0 - vertex 22.2417 -34.4379 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 19.3085 -32.3556 0 - vertex 21.4183 -34.349 0 - vertex 19.3087 -31.0557 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 21.4183 -34.349 0 - vertex 19.3085 -32.3556 0 - vertex 20.6651 -34.0963 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 20.6651 -34.0963 0 - vertex 19.3085 -32.3556 0 - vertex 20.0228 -33.6987 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 20.0228 -33.6987 0 - vertex 19.3085 -32.3556 0 - vertex 19.5322 -33.1754 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 45.3585 -24.1311 0 - vertex 37.9618 -36.3241 0 - vertex 38.113 -36.8464 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 36.8272 -33.2656 0 - vertex 37.9618 -36.3241 0 - vertex 38.2188 -29.6614 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 37.9618 -36.3241 0 - vertex 36.8272 -33.2656 0 - vertex 37.1913 -36.0604 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 36.2918 -35.0946 0 - vertex 37.1913 -36.0604 0 - vertex 36.8272 -33.2656 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 37.1913 -36.0604 0 - vertex 36.2918 -35.0946 0 - vertex 36.3972 -35.7834 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 117.5 117.5 0 - vertex 47.9875 -20.1225 0 - vertex 117.5 -117.5 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 117.5 117.5 0 - vertex 47.7267 -19.5813 0 - vertex 47.9875 -20.1225 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 27.5422 14.7505 0 - vertex 47.7267 -19.5813 0 - vertex 117.5 117.5 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 47.7267 -19.5813 0 - vertex 27.5422 14.7505 0 - vertex 47.2139 -19.2263 0 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex 27.6094 12.2412 0 - vertex 47.2139 -19.2263 0 - vertex 27.5422 14.7505 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 27.528 9.70386 0 - vertex 47.2139 -19.2263 0 - vertex 27.6094 12.2412 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 26.9177 3.98634 0 - vertex 47.2139 -19.2263 0 - vertex 27.528 9.70386 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex 42.1032 -19.4743 0 - vertex 44.5909 -19.3768 0 - vertex 41.8934 -19.2238 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 44.5909 -19.3768 0 - vertex 42.1032 -19.4743 0 - vertex 42.943 -20.2657 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 46.2623 -19.1343 0 - vertex 41.5319 -19.1343 0 - vertex 44.5909 -19.3768 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 44.5909 -19.3768 0 - vertex 41.5319 -19.1343 0 - vertex 41.8934 -19.2238 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 47.2139 -19.2263 0 - vertex 26.953 2.16551 0 - vertex 46.2623 -19.1343 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 46.2623 -19.1343 0 - vertex 26.8464 1.29842 0 - vertex 41.5319 -19.1343 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 31.4974 -26.3899 0 - vertex 35.3305 -26.5156 0 - vertex 31.8275 -24.8188 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.8275 -24.8188 0 - vertex 34.62 -22.2927 0 - vertex 32.0255 -23.3848 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.8086 -21.404 0 - vertex 34.62 -22.2927 0 - vertex 34.9156 -21.474 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 38.4798 -20.1181 0 - vertex 30.7248 -19.9631 0 - vertex 35.5661 -21.102 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 34.62 -22.2927 0 - vertex 32.0232 -22.2828 0 - vertex 32.0255 -23.3848 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 34.62 -22.2927 0 - vertex 31.8086 -21.404 0 - vertex 32.0232 -22.2828 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 35.5661 -21.102 0 - vertex 30.7248 -19.9631 0 - vertex 35.2187 -21.2043 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 34.9156 -21.474 0 - vertex 31.3699 -20.64 0 - vertex 31.8086 -21.404 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 35.2187 -21.2043 0 - vertex 31.3699 -20.64 0 - vertex 34.9156 -21.474 0 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex 31.3699 -20.64 0 - vertex 35.2187 -21.2043 0 - vertex 30.7248 -19.9631 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 26.8464 1.29842 0 - vertex 46.2623 -19.1343 0 - vertex 26.953 2.16551 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 41.5319 -19.1343 0 - vertex 26.8464 1.29842 0 - vertex 38.4798 -20.1181 0 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex 30.7248 -19.9631 0 - vertex 38.4798 -20.1181 0 - vertex 29.9429 -19.4981 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 26.4742 18.624 0 - vertex 27.5422 14.7505 0 - vertex 117.5 117.5 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 27.5422 14.7505 0 - vertex 26.4742 18.624 0 - vertex 27.1755 15.8473 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 27.1755 15.8473 0 - vertex 26.4742 18.624 0 - vertex 26.6933 17.4601 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 117.5 117.5 0 - vertex 25.9424 19.4837 0 - vertex 26.4742 18.624 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 21.2755 24.568 0 - vertex 25.9424 19.4837 0 - vertex 117.5 117.5 0 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex 21.8319 23.6658 0 - vertex 25.9424 19.4837 0 - vertex 21.2755 24.568 0 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex 22.0827 22.427 0 - vertex 25.0752 20.0627 0 - vertex 21.8319 23.6658 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 25.0752 20.0627 0 - vertex 22.0827 22.427 0 - vertex 23.8499 20.3844 0 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex 22.2698 21.5943 0 - vertex 23.8499 20.3844 0 - vertex 22.0827 22.427 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 23.1387 20.59 0 - vertex 22.2698 21.5943 0 - vertex 22.6169 20.9877 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 23.8499 20.3844 0 - vertex 22.2698 21.5943 0 - vertex 23.1387 20.59 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 25.9424 19.4837 0 - vertex 21.8319 23.6658 0 - vertex 25.0752 20.0627 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 15.3134 30.0845 0 - vertex 21.2755 24.568 0 - vertex 117.5 117.5 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 21.2755 24.568 0 - vertex 15.3134 30.0845 0 - vertex 20.1819 25.3734 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 20.1819 25.3734 0 - vertex 15.4783 29.8698 0 - vertex 18.3193 26.3216 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 18.3193 26.3216 0 - vertex 15.4783 29.8698 0 - vertex 17.0772 26.9817 0 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex 15.6084 29.1601 0 - vertex 17.0772 26.9817 0 - vertex 15.4783 29.8698 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 17.0772 26.9817 0 - vertex 15.6084 29.1601 0 - vertex 16.2688 27.6146 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 16.2688 27.6146 0 - vertex 15.6084 29.1601 0 - vertex 15.808 28.3106 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 20.1819 25.3734 0 - vertex 15.3134 30.0845 0 - vertex 15.4783 29.8698 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.2907 30.5214 0 - vertex 15.0577 29.0611 0 - vertex 15.1584 29.8123 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.122 28.0941 0 - vertex 12.5486 25.9653 0 - vertex 13.4969 25.2416 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.2907 30.5214 0 - vertex 15.1584 29.8123 0 - vertex 15.3134 30.0845 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 12.0187 29.9363 0 - vertex 15.0577 29.0611 0 - vertex 12.2907 30.5214 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 5.15152 38.5852 0 - vertex 15.3134 30.0845 0 - vertex 117.5 117.5 0 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex 5.25321 38.4452 0 - vertex 15.3134 30.0845 0 - vertex 5.15152 38.5852 0 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex 12.0544 30.7144 0 - vertex 15.3134 30.0845 0 - vertex 5.25321 38.4452 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 13.0733 24.7212 0 - vertex 9.71033 23.0922 0 - vertex 10.9729 20.5521 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 5.72413 26.6445 0 - vertex 11.0411 28.3898 0 - vertex 11.2319 29.4873 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 12.1975 25.5292 0 - vertex 9.07032 24.476 0 - vertex 9.71033 23.0922 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 5.72413 26.6445 0 - vertex 11.2319 29.4873 0 - vertex 11.5971 30.3591 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 11.5037 26.4501 0 - vertex 8.51885 25.3107 0 - vertex 9.07032 24.476 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 11.1066 27.3577 0 - vertex 7.91411 25.7528 0 - vertex 8.51885 25.3107 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 11.0411 28.3898 0 - vertex 7.11433 25.9588 0 - vertex 7.91411 25.7528 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 11.0411 28.3898 0 - vertex 5.72413 26.6445 0 - vertex 7.11433 25.9588 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 5.19939 38.083 0 - vertex 12.0544 30.7144 0 - vertex 5.25321 38.4452 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 4.72188 37.0399 0 - vertex 12.0544 30.7144 0 - vertex 5.19939 38.083 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 7.11433 25.9588 0 - vertex 5.72413 26.6445 0 - vertex 6.4022 26.1795 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.3134 30.0845 0 - vertex 12.0544 30.7144 0 - vertex 12.2907 30.5214 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -1.46161 28.0795 0 - vertex 1.04836 28.6106 0 - vertex 1.1273 29.8907 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.04836 28.6106 0 - vertex -0.115935 27.2162 0 - vertex 0.858783 27.1101 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -2.77953 29.7664 0 - vertex 1.1273 29.8907 0 - vertex 1.37489 31.173 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.04836 28.6106 0 - vertex -0.786632 27.5359 0 - vertex -0.115935 27.2162 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -3.97987 32.1322 0 - vertex 1.37489 31.173 0 - vertex 2.44067 33.9939 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.04836 28.6106 0 - vertex -1.46161 28.0795 0 - vertex -0.786632 27.5359 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -5.55994 36.5001 0 - vertex 2.44067 33.9939 0 - vertex 4.08079 37.0842 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.1273 29.8907 0 - vertex -2.77953 29.7664 0 - vertex -1.46161 28.0795 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -5.55994 36.5001 0 - vertex 4.08079 37.0842 0 - vertex 5.15152 38.5852 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 1.37489 31.173 0 - vertex -3.97987 32.1322 0 - vertex -2.77953 29.7664 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 2.44067 33.9939 0 - vertex -4.97284 35.0324 0 - vertex -3.97987 32.1322 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -117.5 117.5 0 - vertex 5.15152 38.5852 0 - vertex 117.5 117.5 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 2.44067 33.9939 0 - vertex -5.55994 36.5001 0 - vertex -4.97284 35.0324 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 5.15152 38.5852 0 - vertex -5.8163 36.5812 0 - vertex -5.55994 36.5001 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -8.80952 27.3973 0 - vertex -6.28322 28.2565 0 - vertex -6.22131 31.7226 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -11.546 27.7352 0 - vertex -6.22131 31.7226 0 - vertex -6.055 36.2349 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -7.25507 27.2437 0 - vertex -6.28322 28.2565 0 - vertex -8.80952 27.3973 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -6.28322 28.2565 0 - vertex -7.25507 27.2437 0 - vertex -6.38329 27.6173 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -6.38329 27.6173 0 - vertex -7.25507 27.2437 0 - vertex -6.55612 27.3597 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -6.22131 31.7226 0 - vertex -11.546 27.7352 0 - vertex -8.80952 27.3973 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -6.055 36.2349 0 - vertex -13.5562 27.8374 0 - vertex -11.546 27.7352 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -22.4093 27.9007 0 - vertex -6.055 36.2349 0 - vertex -5.8163 36.5812 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -6.055 36.2349 0 - vertex -15.2376 27.7001 0 - vertex -13.5562 27.8374 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -6.055 36.2349 0 - vertex -20.8096 27.6578 0 - vertex -15.2376 27.7001 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -15.2376 27.7001 0 - vertex -20.8096 27.6578 0 - vertex -16.9875 27.3196 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.9875 27.3196 0 - vertex -19.9485 27.2141 0 - vertex -19.335 26.703 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.9875 27.3196 0 - vertex -20.8096 27.6578 0 - vertex -19.9485 27.2141 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 5.15152 38.5852 0 - vertex -117.5 117.5 0 - vertex -5.8163 36.5812 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -31.2177 27.4629 0 - vertex -5.8163 36.5812 0 - vertex -117.5 117.5 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -6.055 36.2349 0 - vertex -22.4093 27.9007 0 - vertex -20.8096 27.6578 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.3225 27.6757 0 - vertex -27.4214 26.3653 0 - vertex -24.8433 26.205 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -5.8163 36.5812 0 - vertex -24.3632 27.9554 0 - vertex -22.4093 27.9007 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -29.2879 26.9865 0 - vertex -24.3632 27.9554 0 - vertex -30.666 27.4912 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -24.3632 27.9554 0 - vertex -29.2879 26.9865 0 - vertex -27.4214 26.3653 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -5.8163 36.5812 0 - vertex -30.666 27.4912 0 - vertex -24.3632 27.9554 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -31.0943 24.213 0 - vertex -34.2108 23.023 0 - vertex -32.1178 22.3529 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -37.7877 25.1404 0 - vertex -31.2912 27.2229 0 - vertex -31.2177 27.4629 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -31.2912 27.2229 0 - vertex -36.1697 23.9798 0 - vertex -34.2108 23.023 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -31.2912 27.2229 0 - vertex -37.7877 25.1404 0 - vertex -36.1697 23.9798 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -5.8163 36.5812 0 - vertex -31.2177 27.4629 0 - vertex -30.666 27.4912 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -31.2177 27.4629 0 - vertex -38.5782 25.7376 0 - vertex -37.7877 25.1404 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -39.0347 25.8392 0 - vertex -31.2177 27.4629 0 - vertex -117.5 117.5 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -47.2102 -36.2359 0 - vertex -37.5366 -12.7854 0 - vertex -47.8577 -36.863 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -39.9072 -25.4747 0 - vertex -47.2102 -36.2359 0 - vertex -42.237 -30.9405 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -42.237 -30.9405 0 - vertex -47.2102 -36.2359 0 - vertex -43.2543 -33.2915 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -46.1801 -35.8499 0 - vertex -43.2543 -33.2915 0 - vertex -47.2102 -36.2359 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -44.1198 -34.7306 0 - vertex -46.1801 -35.8499 0 - vertex -45.0296 -35.5019 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -43.2543 -33.2915 0 - vertex -46.1801 -35.8499 0 - vertex -44.1198 -34.7306 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -37.5366 -12.7854 0 - vertex -47.2102 -36.2359 0 - vertex -39.9072 -25.4747 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -117.5 117.5 0 - vertex -47.8577 -36.863 0 - vertex -39.1303 25.4589 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -117.5 -117.5 0 - vertex -47.8577 -36.863 0 - vertex -117.5 117.5 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -39.0347 25.8392 0 - vertex -117.5 117.5 0 - vertex -39.1303 25.4589 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -31.2177 27.4629 0 - vertex -39.0347 25.8392 0 - vertex -38.5782 25.7376 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 47.8425 -21.0531 0 - vertex 117.5 -117.5 0 - vertex 47.9875 -20.1225 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 47.5305 -21.9981 0 - vertex 117.5 -117.5 0 - vertex 47.8425 -21.0531 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 47.0957 -22.796 0 - vertex 117.5 -117.5 0 - vertex 47.5305 -21.9981 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 46.5684 -23.4293 0 - vertex 117.5 -117.5 0 - vertex 47.0957 -22.796 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 37.9939 -37.5705 0 - vertex 46.5684 -23.4293 0 - vertex 45.9792 -23.8802 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 38.113 -36.8464 0 - vertex 45.9792 -23.8802 0 - vertex 45.3585 -24.1311 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 38.2188 -29.6614 0 - vertex 45.3585 -24.1311 0 - vertex 44.7368 -24.1643 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 40.0289 -25.46 0 - vertex 44.7368 -24.1643 0 - vertex 44.1445 -23.9621 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 41.2986 -23.9223 0 - vertex 44.1445 -23.9621 0 - vertex 43.6122 -23.5069 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 41.2986 -23.9223 0 - vertex 43.6122 -23.5069 0 - vertex 42.7682 -22.851 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 44.1445 -23.9621 0 - vertex 41.2986 -23.9223 0 - vertex 40.5923 -24.6171 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 44.1445 -23.9621 0 - vertex 40.5923 -24.6171 0 - vertex 40.0289 -25.46 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 44.7368 -24.1643 0 - vertex 40.0289 -25.46 0 - vertex 38.2188 -29.6614 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 37.9618 -36.3241 0 - vertex 45.3585 -24.1311 0 - vertex 38.2188 -29.6614 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 45.9792 -23.8802 0 - vertex 38.113 -36.8464 0 - vertex 37.9939 -37.5705 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 46.5684 -23.4293 0 - vertex 37.9939 -37.5705 0 - vertex 117.5 -117.5 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 37.381 -37.9628 0 - vertex 117.5 -117.5 0 - vertex 37.9939 -37.5705 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 35.8907 -38.1241 0 - vertex 117.5 -117.5 0 - vertex 37.381 -37.9628 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 33.1396 -38.1555 0 - vertex 117.5 -117.5 0 - vertex 35.8907 -38.1241 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 29.8074 -38.0948 0 - vertex 117.5 -117.5 0 - vertex 33.1396 -38.1555 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 21.4079 -38.2833 0 - vertex 29.8074 -38.0948 0 - vertex 28.6431 -37.8931 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 28.553 -36.8405 0 - vertex 25.9895 -35.834 0 - vertex 28.4102 -37.3704 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 24.0601 -37.0678 0 - vertex 28.4102 -37.3704 0 - vertex 25.9895 -35.834 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 28.4102 -37.3704 0 - vertex 24.0601 -37.0678 0 - vertex 28.6431 -37.8931 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 21.4079 -38.2833 0 - vertex 28.6431 -37.8931 0 - vertex 24.0601 -37.0678 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 29.8074 -38.0948 0 - vertex 21.4079 -38.2833 0 - vertex 20.3084 -38.5182 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 29.8074 -38.0948 0 - vertex 20.3084 -38.5182 0 - vertex 117.5 -117.5 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 19.0956 -38.5852 0 - vertex 117.5 -117.5 0 - vertex 20.3084 -38.5182 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 5.33583 -38.4712 0 - vertex 19.0956 -38.5852 0 - vertex 17.8945 -38.4707 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 5.33583 -38.4712 0 - vertex 17.8945 -38.4707 0 - vertex 16.8412 -38.0675 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 10.519 -36.9119 0 - vertex 16.8412 -38.0675 0 - vertex 15.8953 -37.4336 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex 11.871 -34.5351 0 - vertex 14.7938 -32.2631 0 - vertex 11.4887 -31.4602 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 12.2351 -35.1874 0 - vertex 14.8379 -35.6738 0 - vertex 14.6656 -34.4466 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 12.1379 -35.6584 0 - vertex 14.8379 -35.6738 0 - vertex 12.2351 -35.1874 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 14.8379 -35.6738 0 - vertex 12.1379 -35.6584 0 - vertex 15.2376 -36.6526 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 11.7916 -36.1064 0 - vertex 15.2376 -36.6526 0 - vertex 12.1379 -35.6584 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 11.1962 -36.5595 0 - vertex 15.2376 -36.6526 0 - vertex 11.7916 -36.1064 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 15.2376 -36.6526 0 - vertex 11.1962 -36.5595 0 - vertex 15.8953 -37.4336 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 10.519 -36.9119 0 - vertex 15.8953 -37.4336 0 - vertex 11.1962 -36.5595 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 16.8412 -38.0675 0 - vertex 10.519 -36.9119 0 - vertex 9.92719 -37.0575 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 16.8412 -38.0675 0 - vertex 9.92719 -37.0575 0 - vertex 8.47177 -37.477 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 16.8412 -38.0675 0 - vertex 8.47177 -37.477 0 - vertex 5.33583 -38.4712 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 19.0956 -38.5852 0 - vertex 5.33583 -38.4712 0 - vertex 117.5 -117.5 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 2.31266 -38.26 0 - vertex 5.33583 -38.4712 0 - vertex 4.84381 -38.3343 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 3.43985 -37.8545 0 - vertex 4.73542 -37.8041 0 - vertex 4.64415 -37.2809 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 3.43985 -37.8545 0 - vertex 4.84381 -38.3343 0 - vertex 4.73542 -37.8041 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 2.31266 -38.26 0 - vertex 4.84381 -38.3343 0 - vertex 3.43985 -37.8545 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 5.33583 -38.4712 0 - vertex 2.31266 -38.26 0 - vertex 0.962702 -38.4962 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 5.33583 -38.4712 0 - vertex 0.962702 -38.4962 0 - vertex 117.5 -117.5 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -0.366978 -38.538 0 - vertex 117.5 -117.5 0 - vertex 0.962702 -38.4962 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -8.66873 -38.0883 0 - vertex -0.366978 -38.538 0 - vertex -1.43333 -38.36 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -8.07933 -37.9462 0 - vertex -1.43333 -38.36 0 - vertex -2.45619 -37.7112 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.7659 -32.0301 0 - vertex -6.41168 -29.738 0 - vertex -3.99709 -33.5697 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -8.33648 -34.384 0 - vertex -3.99709 -33.5697 0 - vertex -6.41168 -29.738 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -7.51249 -36.3769 0 - vertex -3.80393 -35.193 0 - vertex -3.99709 -33.5697 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.80393 -35.193 0 - vertex -7.31439 -36.7536 0 - vertex -3.26834 -36.6145 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -7.3919 -37.1883 0 - vertex -3.26834 -36.6145 0 - vertex -7.31439 -36.7536 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -3.26834 -36.6145 0 - vertex -7.3919 -37.1883 0 - vertex -2.45619 -37.7112 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -7.74517 -37.6801 0 - vertex -2.45619 -37.7112 0 - vertex -7.3919 -37.1883 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -8.07933 -37.9462 0 - vertex -2.45619 -37.7112 0 - vertex -7.74517 -37.6801 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -1.43333 -38.36 0 - vertex -8.07933 -37.9462 0 - vertex -8.66873 -38.0883 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.366978 -38.538 0 - vertex -8.66873 -38.0883 0 - vertex -12.0013 -38.1555 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.366978 -38.538 0 - vertex -12.0013 -38.1555 0 - vertex -117.5 -117.5 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -117.5 -117.5 0 - vertex -12.0013 -38.1555 0 - vertex -15.3277 -38.0928 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -17.5781 -38.0841 0 - vertex -15.3277 -38.0928 0 - vertex -15.7983 -37.9502 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -15.9213 -37.1689 0 - vertex -16.6989 -37.6188 0 - vertex -15.9433 -37.6764 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.6989 -37.6188 0 - vertex -15.7983 -37.9502 0 - vertex -15.9433 -37.6764 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -17.033 -37.9274 0 - vertex -15.7983 -37.9502 0 - vertex -16.6989 -37.6188 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -17.5781 -38.0841 0 - vertex -15.7983 -37.9502 0 - vertex -17.033 -37.9274 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -15.3277 -38.0928 0 - vertex -17.5781 -38.0841 0 - vertex -117.5 -117.5 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -117.5 -117.5 0 - vertex -17.5781 -38.0841 0 - vertex -20.8226 -38.1301 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.2835 -38.1638 0 - vertex -20.8226 -38.1301 0 - vertex -24.8096 -38.0047 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -27.2791 -36.8782 0 - vertex -25.0608 -37.8416 0 - vertex -25.157 -37.5754 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -28.2835 -38.1638 0 - vertex -25.0608 -37.8416 0 - vertex -27.2791 -36.8782 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -25.0608 -37.8416 0 - vertex -28.2835 -38.1638 0 - vertex -24.8096 -38.0047 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -20.8226 -38.1301 0 - vertex -28.2835 -38.1638 0 - vertex -117.5 -117.5 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -117.5 -117.5 0 - vertex -28.2835 -38.1638 0 - vertex -37.632 -38.1325 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -117.5 -117.5 0 - vertex -37.632 -38.1325 0 - vertex -47.4646 -37.9547 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -0.366978 -38.538 0 - vertex -117.5 -117.5 0 - vertex 117.5 -117.5 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -47.8161 -37.7712 0 - vertex -117.5 -117.5 0 - vertex -47.4646 -37.9547 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -47.9875 -37.5097 0 - vertex -117.5 -117.5 0 - vertex -47.8161 -37.7712 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -47.8577 -36.863 0 - vertex -117.5 -117.5 0 - vertex -47.9875 -37.5097 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 42.0238 -20.3507 0 - vertex 42.943 -20.2657 0 - vertex 42.1032 -19.4743 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 42.0238 -20.3507 0 - vertex 41.971 -20.8453 0 - vertex 42.943 -20.2657 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex 41.971 -20.8453 0 - vertex 42.0238 -20.3507 0 - vertex 41.8981 -20.7296 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 36.104 -22.9178 0 - vertex 36.2859 -23.7121 0 - vertex 36.3422 -23.0402 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 35.2001 -22.9271 0 - vertex 36.2859 -23.7121 0 - vertex 36.104 -22.9178 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 36.2859 -23.7121 0 - vertex 35.2001 -22.9271 0 - vertex 35.3305 -26.5156 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 34.7441 -22.7166 0 - vertex 35.3305 -26.5156 0 - vertex 35.2001 -22.9271 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.8275 -24.8188 0 - vertex 34.7441 -22.7166 0 - vertex 34.62 -22.2927 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 31.8275 -24.8188 0 - vertex 35.3305 -26.5156 0 - vertex 34.7441 -22.7166 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.2318 -26.857 0 - vertex 35.3305 -26.5156 0 - vertex 31.4974 -26.3899 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 35.3305 -26.5156 0 - vertex 31.2318 -26.857 0 - vertex 33.8444 -30.1753 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 30.7817 -27.1595 0 - vertex 33.8444 -30.1753 0 - vertex 31.2318 -26.857 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 33.8444 -30.1753 0 - vertex 30.2029 -31.1764 0 - vertex 32.5255 -33.371 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 29.8709 -31.8517 0 - vertex 32.5255 -33.371 0 - vertex 30.2029 -31.1764 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 30.1062 -30.7807 0 - vertex 33.8444 -30.1753 0 - vertex 30.7817 -27.1595 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 32.5255 -33.371 0 - vertex 29.8709 -31.8517 0 - vertex 31.6707 -35.0376 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 31.6707 -35.0376 0 - vertex 29.8709 -31.8517 0 - vertex 30.8837 -35.7486 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 27.8442 -34.1555 0 - vertex 30.8837 -35.7486 0 - vertex 29.8709 -31.8517 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 30.8837 -35.7486 0 - vertex 27.8442 -34.1555 0 - vertex 29.7686 -36.0779 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 29.7686 -36.0779 0 - vertex 27.8442 -34.1555 0 - vertex 29.0223 -36.3831 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 29.0223 -36.3831 0 - vertex 27.8442 -34.1555 0 - vertex 28.553 -36.8405 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 25.9895 -35.834 0 - vertex 28.553 -36.8405 0 - vertex 27.8442 -34.1555 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -11.2742 24.7069 0 - vertex -10.5829 24.4 0 - vertex -10.6709 24.5009 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -14.1729 23.8467 0 - vertex -11.2742 24.7069 0 - vertex -13.9393 24.99 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -11.2742 24.7069 0 - vertex -14.1729 23.8467 0 - vertex -10.5829 24.4 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -16.6107 24.7853 0 - vertex -14.1729 23.8467 0 - vertex -13.9393 24.99 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -16.6107 24.7853 0 - vertex -19.3275 23.0662 0 - vertex -14.1729 23.8467 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex -20.4324 24.2101 0 - vertex -19.3275 23.0662 0 - vertex -16.6107 24.7853 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -20.4324 24.2101 0 - vertex -21.5591 22.7309 0 - vertex -19.3275 23.0662 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -20.4324 24.2101 0 - vertex -22.0432 22.8497 0 - vertex -21.5591 22.7309 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -20.4324 24.2101 0 - vertex -22.6641 23.2546 0 - vertex -22.0432 22.8497 0 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -22.6641 23.2546 0 - vertex -20.4324 24.2101 0 - vertex -23.3809 23.8604 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 8.49325 -21.5121 0 - vertex 10.169 -23.3758 0 - vertex 10.0454 -22.5812 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 10.169 -23.3758 0 - vertex 7.70773 -21.5983 0 - vertex 10.0775 -24.2416 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 9.16984 -21.6481 0 - vertex 10.0454 -22.5812 0 - vertex 9.69979 -22.0048 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 10.0454 -22.5812 0 - vertex 9.16984 -21.6481 0 - vertex 8.49325 -21.5121 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 10.169 -23.3758 0 - vertex 8.49325 -21.5121 0 - vertex 7.70773 -21.5983 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 6.85097 -21.9079 0 - vertex 10.0775 -24.2416 0 - vertex 7.70773 -21.5983 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 10.0775 -24.2416 0 - vertex 6.85097 -21.9079 0 - vertex 9.7411 -25.4359 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 5.96068 -22.4422 0 - vertex 9.7411 -25.4359 0 - vertex 6.85097 -21.9079 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 5.07455 -23.2024 0 - vertex 9.7411 -25.4359 0 - vertex 5.96068 -22.4422 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 3.84714 -24.6213 0 - vertex 9.7411 -25.4359 0 - vertex 5.07455 -23.2024 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 9.7411 -25.4359 0 - vertex 3.84714 -24.6213 0 - vertex 7.96204 -29.9101 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 2.80055 -26.1986 0 - vertex 7.96204 -29.9101 0 - vertex 3.84714 -24.6213 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 1.95873 -27.8549 0 - vertex 7.96204 -29.9101 0 - vertex 2.80055 -26.1986 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 1.3456 -29.5107 0 - vertex 7.96204 -29.9101 0 - vertex 1.95873 -27.8549 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 7.96204 -29.9101 0 - vertex 1.3456 -29.5107 0 - vertex 6.30534 -33.4759 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 0.985088 -31.0867 0 - vertex 6.30534 -33.4759 0 - vertex 1.3456 -29.5107 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 0.901133 -32.5034 0 - vertex 6.30534 -33.4759 0 - vertex 0.985088 -31.0867 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 6.30534 -33.4759 0 - vertex 0.901133 -32.5034 0 - vertex 5.71313 -34.2297 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 5.71313 -34.2297 0 - vertex 0.901133 -32.5034 0 - vertex 5.04571 -34.678 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 5.04571 -34.678 0 - vertex 0.901133 -32.5034 0 - vertex 4.11511 -35.011 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 4.11511 -35.011 0 - vertex 0.901133 -32.5034 0 - vertex 3.17687 -35.0966 0 - endloop - endfacet - facet normal -0 -0 1 - outer loop - vertex 1.11766 -33.6813 0 - vertex 3.17687 -35.0966 0 - vertex 0.901133 -32.5034 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 3.17687 -35.0966 0 - vertex 1.11766 -33.6813 0 - vertex 2.32628 -34.9386 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 2.32628 -34.9386 0 - vertex 1.11766 -33.6813 0 - vertex 1.65861 -34.5411 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 9.76373 17.1908 0 - vertex 9.72145 16.1788 0 - vertex 10.4258 16.5104 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 9.76373 17.1908 0 - vertex 8.86535 15.8492 0 - vertex 9.72145 16.1788 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 8.028 17.0592 0 - vertex 9.76373 17.1908 0 - vertex 8.30319 18.4459 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 9.76373 17.1908 0 - vertex 8.028 17.0592 0 - vertex 8.86535 15.8492 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 7.15178 18.7442 0 - vertex 8.30319 18.4459 0 - vertex 7.1994 19.1268 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 8.30319 18.4459 0 - vertex 7.15178 18.7442 0 - vertex 8.028 17.0592 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 26.0804 -21.8157 0 - vertex 27.3613 -24.0204 0 - vertex 27.3668 -22.8574 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 26.0804 -21.8157 0 - vertex 27.3668 -22.8574 0 - vertex 26.9354 -22.1189 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 27.3613 -24.0204 0 - vertex 26.0804 -21.8157 0 - vertex 24.4233 -24.8188 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 24.4233 -24.8188 0 - vertex 26.0804 -21.8157 0 - vertex 24.8153 -21.9586 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 27.3613 -24.0204 0 - vertex 24.4233 -24.8188 0 - vertex 27.2283 -24.8188 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 23.7526 -22.3987 0 - vertex 24.4233 -24.8188 0 - vertex 24.8153 -21.9586 0 - endloop - endfacet - facet normal -0 0 1 - outer loop - vertex 22.6861 -23.3258 0 - vertex 24.4233 -24.8188 0 - vertex 23.7526 -22.3987 0 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex 24.4233 -24.8188 0 - vertex 22.6861 -23.3258 0 - vertex 21.6183 -24.6221 0 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 117.5 -117.5 0 - vertex 117.5 117.5 -3 - vertex 117.5 117.5 0 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 117.5 117.5 -3 - vertex 117.5 -117.5 0 - vertex 117.5 -117.5 -3 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 117.5 117.5 -3 - vertex -117.5 117.5 0 - vertex 117.5 117.5 0 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -117.5 117.5 0 - vertex 117.5 117.5 -3 - vertex -117.5 117.5 -3 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -117.5 -117.5 -3 - vertex 117.5 -117.5 0 - vertex -117.5 -117.5 0 - endloop - endfacet - facet normal 0 -1 -0 - outer loop - vertex 117.5 -117.5 0 - vertex -117.5 -117.5 -3 - vertex 117.5 -117.5 -3 - endloop - endfacet -endsolid OpenSCAD_Model diff --git a/resources/meshes/hellbot_adonis.obj b/resources/meshes/hellbot_adonis.obj new file mode 100644 index 0000000000..f5b73e7210 --- /dev/null +++ b/resources/meshes/hellbot_adonis.obj @@ -0,0 +1,70 @@ +# Blender v2.80 (sub 75) OBJ File: 'hellbotBed.blend' +# www.blender.org +mtllib hellbot_adonis.mtl +o Cube.001 +v -89.999985 90.000000 -1.000015 +v -89.999985 90.000000 0.999985 +v 90.000000 89.999985 0.999996 +v 90.000000 89.999985 -1.000004 +v 89.999985 -90.000000 1.000015 +v 89.999985 -90.000000 -0.999985 +v -90.000000 -89.999985 1.000004 +v 0.900000 -0.000000 0.000151 +v -0.900000 -0.000000 0.000151 +v 0.900000 0.000000 0.017850 +v -0.900000 0.000000 0.017850 +v -89.999985 90.000000 -1.000015 +v -89.999985 90.000000 0.999985 +v 90.000000 89.999985 -1.000004 +v 89.999985 -90.000000 1.000015 +v 89.999985 -90.000000 -0.999985 +v -90.000000 -89.999985 -0.999996 +v -90.000000 -89.999985 1.000004 +v 0.900000 0.000000 -1.000000 +v -0.900000 0.000000 -1.000000 +vt 0.000100 0.000100 +vt 0.999900 0.000100 +vt 0.999900 0.999900 +vt 0.000100 0.999900 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.017463 0.999987 +vt 0.000013 0.999857 +vt 0.000013 0.000013 +vt 0.017463 0.000143 +vt 0.000013 0.000013 +vt 0.017463 0.000143 +vt 0.017463 0.999987 +vt 0.000013 0.999857 +vt 0.000000 0.000000 +vt 0.123047 0.000000 +vt 0.123047 0.126953 +vt 0.000000 0.126953 +vt 0.017463 0.999987 +vt 0.000013 0.999857 +vt 0.000013 0.000013 +vt 0.017463 0.000143 +vt 0.017463 0.000143 +vt 0.017463 0.999987 +vt 0.000013 0.999857 +vn -0.0000 0.0000 1.0000 +vn 0.0000 1.0000 -0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 -0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +usemtl Material.001 +s 1 +f 7/1/1 5/2/1 3/3/1 2/4/1 +usemtl Material.001_NONE +s off +f 8/5/2 9/6/2 11/7/2 10/8/2 +s 1 +f 1/9/2 2/10/2 3/11/2 4/12/2 +f 4/13/3 3/14/3 5/15/3 6/16/3 +f 16/17/4 17/18/4 12/19/4 14/20/4 +f 17/21/5 18/22/5 13/23/5 12/24/5 +f 16/17/6 15/25/6 18/26/6 17/27/6 +l 20 19 diff --git a/resources/meshes/hellbot_magna.obj b/resources/meshes/hellbot_magna.obj new file mode 100644 index 0000000000..b9c616ee62 --- /dev/null +++ b/resources/meshes/hellbot_magna.obj @@ -0,0 +1,70 @@ +# Blender v2.80 (sub 75) OBJ File: '' +# www.blender.org +mtllib untitled.mtl +o Cube.001 +v -119.999985 120.000000 -1.000018 +v -119.999985 120.000000 0.999981 +v 120.000000 119.999985 0.999996 +v 120.000000 119.999985 -1.000004 +v 119.999985 -120.000000 1.000018 +v 119.999985 -120.000000 -0.999981 +v -120.000000 -119.999985 1.000004 +v 1.200000 -0.000000 0.000151 +v -1.200000 -0.000000 0.000151 +v 1.200000 0.000000 0.017850 +v -1.200000 0.000000 0.017850 +v -119.999985 120.000000 -1.000018 +v -119.999985 120.000000 0.999981 +v 120.000000 119.999985 -1.000004 +v 119.999985 -120.000000 1.000018 +v 119.999985 -120.000000 -0.999981 +v -120.000000 -119.999985 -0.999996 +v -120.000000 -119.999985 1.000004 +v 1.200000 0.000000 -1.000000 +v -1.200000 0.000000 -1.000000 +vt 0.000100 0.000100 +vt 0.999900 0.000100 +vt 0.999900 0.999900 +vt 0.000100 0.999900 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.017463 0.999987 +vt 0.000013 0.999857 +vt 0.000013 0.000013 +vt 0.017463 0.000143 +vt 0.000013 0.000013 +vt 0.017463 0.000143 +vt 0.017463 0.999987 +vt 0.000013 0.999857 +vt 0.000000 0.000000 +vt 0.123047 0.000000 +vt 0.123047 0.126953 +vt 0.000000 0.126953 +vt 0.017463 0.999987 +vt 0.000013 0.999857 +vt 0.000013 0.000013 +vt 0.017463 0.000143 +vt 0.017463 0.000143 +vt 0.017463 0.999987 +vt 0.000013 0.999857 +vn -0.0000 0.0000 1.0000 +vn 0.0000 1.0000 -0.0000 +vn 1.0000 -0.0000 0.0000 +vn 0.0000 -0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn -0.0000 -1.0000 0.0000 +usemtl Material.001 +s 1 +f 7/1/1 5/2/1 3/3/1 2/4/1 +usemtl Material.001_NONE +s off +f 8/5/2 9/6/2 11/7/2 10/8/2 +s 1 +f 1/9/2 2/10/2 3/11/2 4/12/2 +f 4/13/3 3/14/3 5/15/3 6/16/3 +f 16/17/4 17/18/4 12/19/4 14/20/4 +f 17/21/5 18/22/5 13/23/5 12/24/5 +f 16/17/6 15/25/6 18/26/6 17/27/6 +l 20 19 diff --git a/resources/meshes/imade3d_jellybox_2_platform.stl b/resources/meshes/imade3d_jellybox_2_platform.stl new file mode 100644 index 0000000000..d897e1c3e0 Binary files /dev/null and b/resources/meshes/imade3d_jellybox_2_platform.stl differ diff --git a/resources/meshes/ultimaker_s3_platform.obj b/resources/meshes/ultimaker_s3_platform.obj new file mode 100644 index 0000000000..102874e3ce --- /dev/null +++ b/resources/meshes/ultimaker_s3_platform.obj @@ -0,0 +1,8031 @@ +v -123.778900 125.518311 -6.907795 +v -123.797607 121.257324 -7.040688 +v -123.799995 148.500000 -7.099978 +v -123.717606 136.811584 -5.034970 +v -123.689514 138.383133 -4.495398 +v -123.668266 139.354584 -3.842515 +v -122.703438 141.946640 24.150135 +v -122.575264 148.500000 27.401415 +v -123.783394 124.357140 -6.943633 +v -123.726234 124.340729 -5.062126 +v -123.697433 125.535110 -4.980642 +v -123.785675 120.499229 -6.692233 +v -123.770744 119.995567 -6.264033 +v -123.746635 119.562019 -5.578156 +v -122.592422 144.782043 27.268299 +v -122.641235 142.334106 25.539190 +v -122.610489 143.238342 26.570990 +v -124.574562 148.499893 27.643673 +v -125.799995 148.500000 -7.099978 +v -125.669678 139.320984 -3.903402 +v -125.626015 140.234543 -2.776348 +v -125.701309 137.411987 -4.735400 +v -125.580254 140.791824 -1.255374 +v -125.799080 121.412453 -7.073972 +v -125.741447 119.467690 -5.298861 +v -125.757713 119.727654 -5.888924 +v -125.775909 120.135315 -6.409525 +v -125.789719 120.689224 -6.805356 +v -124.642860 142.050629 25.777826 +v -124.594284 143.561432 27.219770 +v 123.798607 121.412453 -7.073972 +v 123.788132 125.517899 -6.953136 +v 123.799988 148.500000 -7.099978 +v 123.717163 137.034836 -5.016074 +v 123.692192 139.056763 -4.202315 +v 123.646599 140.244583 -2.931049 +v 123.582825 140.991791 -1.183872 +v 122.593826 148.500000 27.307976 +v 123.789421 124.357445 -6.976461 +v 123.728081 124.340919 -5.083951 +v 123.784752 120.439659 -6.669250 +v 123.757408 119.709328 -5.885711 +v 123.693954 119.396904 -4.968602 +v 122.620445 143.305984 26.566259 +v 125.675797 139.279266 -4.012356 +v 125.799988 148.500000 -7.099978 +v 125.616295 141.045639 -1.834042 +v 125.715202 137.599335 -4.845753 +v 124.661346 141.976913 25.322332 +v 125.797928 121.257324 -7.040688 +v 124.561897 148.500000 27.746351 +v 125.749077 119.516815 -5.479757 +v 125.770805 119.995567 -6.264033 +v 125.785751 120.499229 -6.692233 +v 124.582901 144.000381 27.419159 +v -0.433627 123.545013 -20.299978 +v 0.433775 123.548721 -20.299927 +v -0.982988 123.291168 -20.299980 +v -0.515263 123.518570 -4.699982 +v 0.515225 123.518318 -4.699982 +v 0.852666 123.366661 -4.699982 +v 1.042472 123.247452 -20.299980 +v -0.885582 123.344009 -4.699983 +v 1.367260 122.864059 -4.700087 +v -1.392007 122.830261 -4.699985 +v -1.439614 122.718979 -20.299982 +v 1.447857 122.702782 -20.299982 +v -1.590363 122.235336 -20.299982 +v 1.590363 122.235336 -4.700104 +v 1.615159 121.988457 -20.299982 +v -1.615159 121.988457 -4.700000 +v -1.568210 121.630394 -20.299982 +v 1.568210 121.630394 -4.700117 +v 1.415175 121.231514 -20.299982 +v -1.415175 121.231514 -4.699983 +v -1.211469 120.935127 -20.299982 +v 1.211469 120.935127 -4.700011 +v 1.027053 120.767014 -20.299982 +v -1.027053 120.767014 -4.699983 +v -0.618134 120.519394 -20.299982 +v 0.618161 120.519402 -4.700011 +v 0.583915 120.505600 -20.299982 +v -0.583881 120.505585 -4.699983 +v -0.034710 120.392029 -20.299982 +v 0.034666 120.392029 -4.699994 +v 79.499992 119.352646 -4.699983 +v -79.254425 119.000000 -2.699982 +v -79.499992 119.352646 -4.699983 +v 79.254425 119.000000 -2.699982 +v -81.415436 118.385399 -20.299982 +v -91.745560 119.000000 -2.699982 +v -85.624176 118.184456 -19.176199 +v -103.474350 142.187607 -20.266941 +v -103.475227 148.500000 -20.298664 +v -103.480392 124.453445 -17.978180 +v -103.474327 123.506805 -20.292078 +v -103.474403 122.664955 -20.270054 +v -103.474792 124.088440 -20.131594 +v -103.475044 122.088608 -20.033234 +v -103.475266 141.522446 -19.940849 +v -103.475967 124.671646 -19.675062 +v -103.476196 121.580650 -19.567003 +v -103.476288 141.154083 -19.562185 +v -103.493393 137.350800 -13.004006 +v -103.480392 125.421677 -17.978180 +v -103.493301 128.535370 -13.037661 +v -103.478004 121.280525 -18.901505 +v -103.515190 120.520004 -4.699983 +v -103.515190 124.337555 -4.699982 +v -103.515190 125.537560 -4.699982 +v -103.494659 136.877258 -12.563451 +v -103.494568 128.974823 -12.602526 +v -103.515213 136.484894 -4.693568 +v -103.495224 136.221008 -12.316591 +v -103.495186 129.635452 -12.327147 +v -102.525032 148.500000 -20.297888 +v -102.525536 142.073929 -20.239792 +v -102.519592 124.453445 -17.978180 +v -102.525581 122.628830 -20.271664 +v -102.525604 123.763466 -20.253416 +v -102.524765 124.371239 -19.953941 +v -102.524879 122.047485 -20.000715 +v -102.524323 141.328033 -19.779812 +v -102.523941 121.623199 -19.623102 +v -102.523712 124.757019 -19.564121 +v -102.506699 137.377441 -13.037759 +v -102.519592 125.421677 -17.978180 +v -102.506599 128.562012 -13.003924 +v -102.522148 121.296043 -18.963028 +v -102.484795 120.520004 -4.699983 +v -102.484795 125.537560 -4.699982 +v -102.484795 124.337555 -4.699982 +v -102.505432 136.937958 -12.602538 +v -102.505318 129.035522 -12.563430 +v -102.484741 136.730774 -4.679422 +v -102.504807 136.277298 -12.327147 +v -102.504768 129.691742 -12.316591 +v -0.433668 146.687607 -20.266937 +v -0.515177 148.500000 -4.699978 +v -0.433495 148.500000 -20.299974 +v -0.444588 124.455215 -18.181370 +v -0.433768 124.064957 -20.248905 +v -0.435918 145.877045 -19.837273 +v -0.435678 124.566193 -19.882954 +v -0.444588 125.419907 -18.181370 +v -0.471626 128.552765 -13.017731 +v -0.471600 141.867615 -13.022640 +v -0.515177 125.537560 -4.699982 +v -0.515177 124.337555 -4.699982 +v -0.474002 141.377243 -12.563434 +v -0.473797 128.974823 -12.602527 +v -0.475297 140.720963 -12.316586 +v -0.475242 129.635468 -12.327146 +v -0.515234 136.579285 -4.685525 +v -0.515633 137.447144 -4.525631 +v -0.516624 138.358353 -4.147129 +v -0.518110 139.165298 -3.579410 +v -0.520580 139.988434 -2.636411 +v -0.523477 140.490219 -1.529178 +v -0.525686 140.661316 -0.685408 +v -0.600000 148.500000 27.700026 +v -0.590811 141.551880 24.189827 +v -0.599979 145.231857 27.691992 +v -0.593405 141.792160 25.181160 +v -0.596356 142.471283 26.308067 +v -0.598573 143.478134 27.154871 +v -0.599649 144.477005 27.566135 +v -103.515526 137.332901 -4.558472 +v -103.516525 138.261337 -4.200128 +v -103.517899 139.088470 -3.647146 +v -103.519791 139.770004 -2.930894 +v -103.522041 140.282242 -2.077142 +v -103.524940 140.629425 -0.990034 +v -103.599991 148.500000 27.700026 +v -103.590683 141.546494 24.151115 +v -103.599960 145.199188 27.689819 +v -103.593422 141.790009 25.175095 +v -103.595825 142.327484 26.112658 +v -103.597527 142.932861 26.753635 +v -103.598778 143.627060 27.224945 +v -103.599541 144.403076 27.544779 +v -102.399994 148.500000 27.700026 +v -102.400040 145.173416 27.687176 +v -102.482506 138.898361 -3.811198 +v -102.484032 137.831848 -4.394243 +v -102.479683 139.919907 -2.740244 +v -102.476723 140.463562 -1.612636 +v -102.474434 140.653610 -0.750987 +v -102.409355 141.545029 24.131550 +v -102.406822 141.752808 25.077885 +v -102.403854 142.400620 26.222998 +v -102.401550 143.383789 27.097219 +v -102.400444 144.402069 27.545050 +v -79.834412 121.169449 -4.701422 +v 0.515177 124.337555 -4.699982 +v 102.484795 124.337555 -4.699982 +v 102.484795 120.520004 -4.699983 +v 93.792580 120.504227 -4.700222 +v -79.608337 120.869682 -4.700410 +v 79.810974 121.136620 -4.700951 +v -93.169708 120.103333 -4.700118 +v -93.660034 120.477562 -4.700276 +v 93.412888 120.339523 -4.700282 +v 93.155975 120.065941 -4.700138 +v -91.199013 121.118652 -4.704729 +v 79.538834 120.726501 -4.701214 +v -91.452232 120.752220 -4.700679 +v 92.975784 119.598564 -4.700064 +v -92.746597 119.383522 -4.699994 +v -91.499992 119.352646 -4.699983 +v -92.984299 119.616989 -4.699931 +v 91.499992 119.352646 -4.699983 +v 92.712402 119.373917 -4.699970 +v -123.704918 119.406097 -5.006795 +v -125.673828 119.342697 -4.643714 +v -125.448242 119.233131 -4.022115 +v -124.974792 119.122421 -3.394266 +v -123.424431 119.356491 -4.721560 +v -124.216087 119.032242 -2.882760 +v -123.431183 119.000702 -2.702945 +v -118.286034 119.008522 -2.700004 +v -117.446686 120.258507 -2.699887 +v -117.813896 119.859451 -2.699959 +v -117.069260 120.405914 -2.699887 +v -93.707397 120.315140 -2.699938 +v 117.748909 119.959366 -2.700021 +v 117.254326 120.378242 -2.699966 +v 93.497986 120.228104 -2.699977 +v 93.940285 120.408371 -2.699966 +v 93.169945 119.803787 -2.699978 +v 93.020607 119.182770 -2.699950 +v 92.760284 119.016273 -2.699984 +v -93.166580 119.788689 -2.699978 +v 117.945099 119.261238 -2.700148 +v -117.912086 119.353401 -2.700000 +v -93.062637 119.269722 -2.699976 +v -118.051476 119.129562 -2.700031 +v 118.218620 119.016579 -2.699992 +v -92.781548 119.022514 -2.700027 +v 91.745560 119.000000 -2.699982 +v -117.709160 120.253014 -4.700198 +v -123.431557 124.337654 -4.710291 +v -117.207901 120.504120 -4.700198 +v -118.008156 119.644287 -4.700133 +v -118.279015 119.376610 -4.700014 +v -122.425484 139.558868 24.168488 +v -123.267197 138.666763 -0.749820 +v -122.301895 141.552841 24.144461 +v -123.166824 140.666580 -0.688533 +v 0.471611 128.547089 -13.020448 +v 0.471618 141.861221 -13.019171 +v 0.433495 148.500000 -20.299974 +v 0.433810 146.573929 -20.239788 +v 0.433649 123.989830 -20.270569 +v -105.217323 124.368568 -8.253350 +v -105.249428 125.507248 -8.172711 +v -107.405624 125.520935 -6.604790 +v -105.618233 125.512680 -7.550677 +v -106.104141 125.516853 -7.073968 +v -106.817802 125.520012 -6.711080 +v -123.480270 125.520760 -6.624343 +v -123.406464 125.537415 -4.718421 +v -105.742447 124.360977 -7.383870 +v -106.400261 124.356720 -6.894501 +v -107.074173 124.354500 -6.640208 +v -123.515190 124.354416 -6.630264 +v -2.375973 124.360718 -7.353566 +v -2.408108 125.515121 -7.272839 +v -4.528426 124.346367 -5.707678 +v -32.720348 125.528694 -5.716523 +v -72.588997 124.376701 -9.184699 +v -72.738953 125.498367 -9.191535 +v -32.605324 124.346390 -5.711790 +v -99.052933 124.376877 -9.204794 +v -101.241241 125.483864 -10.853795 +v -101.291100 124.393028 -11.055563 +v -100.869537 125.489670 -10.188559 +v -100.307999 125.494530 -9.630728 +v -99.381577 125.497948 -9.239424 +v -2.954309 125.522476 -6.428508 +v -3.600958 125.526459 -5.972470 +v -4.320638 125.528648 -5.721797 +v -101.062790 124.387939 -10.473304 +v -100.462624 124.381599 -9.746922 +v -99.640572 124.377792 -9.311066 +v -2.747823 124.354912 -6.688328 +v -3.208852 124.350784 -6.214532 +v -3.915388 124.347427 -5.831334 +v -89.313148 120.223473 -20.299982 +v -81.740738 120.232155 -20.299982 +v -79.535530 120.703430 -4.701630 +v -122.519623 145.274750 27.479473 +v -122.273773 148.500000 27.681963 +v -122.347404 145.208221 27.630726 +v -122.180847 145.165298 27.681499 +v -122.631172 141.832413 24.514389 +v -122.505241 141.634384 24.129721 +v -122.530212 141.848465 24.917847 +v -122.334938 141.697495 24.840992 +v -122.464088 142.034149 25.464901 +v -122.246231 142.049393 25.683220 +v -122.603767 142.641693 26.063051 +v -122.442970 142.363556 26.014219 +v -122.244881 142.574097 26.401011 +v -122.466408 142.967987 26.623608 +v -122.262245 143.054642 26.831783 +v -122.556091 143.741684 26.997967 +v -122.425652 143.627197 27.114178 +v -122.233841 143.627792 27.220556 +v -122.514977 144.514893 27.362223 +v -122.383064 144.425903 27.467810 +v -122.213562 144.462509 27.554651 +v -123.375854 140.752487 -0.688539 +v -123.655510 137.488007 -4.755487 +v -123.609016 136.548401 -4.852862 +v -123.383240 136.545639 -4.703648 +v -123.391365 137.156616 -4.611506 +v -123.532509 137.921127 -4.468591 +v -123.323792 137.886734 -4.379573 +v -123.500740 138.855682 -3.947949 +v -123.321648 138.547806 -4.038620 +v -123.302940 139.163986 -3.592607 +v -123.497841 139.404678 -3.494964 +v -123.637909 140.299393 -2.813444 +v -123.511017 139.939545 -2.934212 +v -123.304268 139.674911 -3.058841 +v -123.295609 139.965225 -2.664153 +v -123.573151 140.585693 -2.048277 +v -123.431107 140.402679 -2.041083 +v -123.232658 140.327255 -1.991789 +v -123.578583 141.006042 -1.078155 +v -123.492302 140.825912 -1.005560 +v -123.263428 140.566772 -1.297280 +v -91.125710 120.975777 -4.795104 +v -79.876404 121.030540 -4.759994 +v 0.473797 141.437927 -12.602518 +v 0.475241 140.777252 -12.327140 +v 0.474002 129.035522 -12.563435 +v 0.475297 129.691742 -12.316590 +v 0.436371 145.794769 -19.750616 +v 0.435401 124.520126 -19.935883 +v -79.575577 120.511330 -5.036986 +v -79.787041 120.723289 -5.103093 +v -79.954048 120.788910 -5.085986 +v -79.906380 120.868362 -4.904600 +v -79.703827 120.819626 -4.834780 +v -81.443214 119.969955 -20.299982 +v -91.447578 120.469299 -4.982037 +v -91.320137 120.660995 -5.030531 +v -91.178352 120.757484 -5.057798 +v -91.028969 120.794846 -5.059298 +v -91.173988 120.860252 -4.891590 +v -89.568253 119.911949 -20.299982 +v 89.584549 118.385399 -20.299982 +v 81.415436 118.385399 -20.299982 +v 103.474983 148.500000 -20.297888 +v 103.474457 142.073929 -20.239792 +v 103.480392 124.453445 -17.978180 +v 103.474403 122.628830 -20.271664 +v 103.474388 123.763466 -20.253416 +v 103.475227 124.371239 -19.953941 +v 103.475105 122.047485 -20.000715 +v 103.475670 141.328033 -19.779812 +v 103.476051 121.623199 -19.623102 +v 103.476280 124.757019 -19.564121 +v 103.493301 137.377441 -13.037759 +v 103.480392 125.421677 -17.978180 +v 103.493393 128.562012 -13.003924 +v 103.477844 121.296043 -18.963028 +v 103.515190 120.520004 -4.699983 +v 103.515190 125.537560 -4.699982 +v 103.515190 124.337555 -4.699982 +v 103.494553 136.937958 -12.602537 +v 103.494675 129.035522 -12.563435 +v 103.515221 136.556458 -4.686877 +v 103.495178 136.277298 -12.327147 +v 103.495216 129.691742 -12.316590 +v 102.525635 142.187607 -20.266941 +v 102.525009 148.500000 -20.298645 +v 102.519592 124.453445 -17.978180 +v 102.525665 123.506805 -20.292078 +v 102.525597 122.664955 -20.270054 +v 102.525200 124.088440 -20.131594 +v 102.524956 122.088608 -20.033234 +v 102.524719 141.522446 -19.940849 +v 102.524025 124.671646 -19.675062 +v 102.523796 121.580650 -19.567003 +v 102.523705 141.154083 -19.562185 +v 102.506599 137.350800 -13.004006 +v 102.519592 125.421677 -17.978180 +v 102.506691 128.535370 -13.037661 +v 102.521988 121.280525 -18.901505 +v 102.484795 125.537560 -4.699982 +v 102.505325 136.877258 -12.563450 +v 102.505424 128.974823 -12.602526 +v 102.484764 136.579285 -4.685526 +v 102.504768 136.221008 -12.316591 +v 102.504799 129.635468 -12.327146 +v 0.515177 148.500000 -4.699978 +v 0.444588 124.455215 -18.181370 +v 0.444588 125.419907 -18.181370 +v 0.515177 125.537560 -4.699982 +v 0.515251 136.730774 -4.679422 +v 0.517503 138.898361 -3.811198 +v 0.515976 137.831848 -4.394243 +v 0.520308 139.919907 -2.740244 +v 0.523259 140.463562 -1.612636 +v 0.525514 140.653610 -0.750987 +v 0.590658 141.545029 24.131548 +v 0.600000 148.500000 27.700026 +v 0.599966 145.173416 27.687176 +v 0.593135 141.752808 25.077885 +v 0.596134 142.400620 26.222996 +v 0.598422 143.383789 27.097219 +v 0.599594 144.402069 27.545050 +v 103.515594 137.360123 -4.550949 +v 103.516769 138.489334 -4.085704 +v 103.518837 139.459930 -3.295880 +v 103.523277 140.465225 -1.610781 +v 103.520943 140.056824 -2.505926 +v 103.525673 140.660690 -0.708934 +v 103.590767 141.551147 24.181124 +v 103.599991 148.500000 27.700026 +v 103.599915 145.000656 27.674658 +v 103.592842 141.718307 24.947397 +v 103.595398 142.199921 25.951372 +v 103.597939 143.107315 26.905979 +v 103.599251 144.059204 27.427553 +v 102.399994 148.500000 27.700026 +v 102.400024 145.231857 27.691992 +v 102.484329 137.447144 -4.525632 +v 102.483376 138.358353 -4.147129 +v 102.481895 139.165298 -3.579410 +v 102.479408 139.988434 -2.636411 +v 102.476501 140.490219 -1.529178 +v 102.474258 140.661316 -0.685408 +v 102.409203 141.551880 24.189827 +v 102.406548 141.792160 25.181158 +v 102.403633 142.471283 26.308067 +v 102.401405 143.478134 27.154871 +v 102.400391 144.477005 27.566135 +v 123.433495 125.537300 -4.729113 +v 125.643623 119.318535 -4.506390 +v 125.379059 119.213570 -3.911189 +v 124.883949 119.105827 -3.300157 +v 123.382149 119.355118 -4.712761 +v 124.090012 119.025063 -2.842031 +v 123.427376 119.000595 -2.702304 +v 118.395432 119.356400 -4.699981 +v 123.307671 124.337578 -4.701297 +v 117.828018 120.102058 -4.700052 +v 117.358292 120.474388 -4.700041 +v 118.001266 119.663490 -4.700052 +v 118.150871 119.454453 -4.699969 +v 122.384254 141.562973 24.112606 +v 123.168343 140.665909 -0.692286 +v 105.217323 125.506546 -8.253350 +v 105.249428 124.367867 -8.172711 +v 107.405624 124.354187 -6.604791 +v 105.742447 125.514137 -7.383870 +v 106.400261 125.518417 -6.894500 +v 107.074173 125.520630 -6.640207 +v 123.515182 125.520721 -6.630262 +v 123.702591 125.534996 -4.994817 +v 105.618233 124.362442 -7.550677 +v 106.104141 124.358284 -7.073968 +v 106.817802 124.355118 -6.711080 +v 123.571121 124.354660 -6.658079 +v 123.562859 124.338539 -4.811217 +v 2.375973 125.514412 -7.353565 +v 2.408108 124.360016 -7.272839 +v 4.528426 125.528778 -5.707678 +v 72.738953 124.376762 -9.191535 +v 32.720348 124.346436 -5.716524 +v 72.588997 125.498428 -9.184699 +v 32.605324 125.528740 -5.711789 +v 99.052933 125.498253 -9.204794 +v 101.241241 124.391258 -10.853795 +v 101.291100 125.482101 -11.055563 +v 101.062790 125.487183 -10.473304 +v 100.462624 125.493523 -9.746922 +v 99.640572 125.497322 -9.311066 +v 2.747823 125.520210 -6.688327 +v 3.208852 125.524345 -6.214532 +v 3.915388 125.527695 -5.831334 +v 100.869537 124.385468 -10.188559 +v 100.307999 124.380592 -9.630728 +v 99.381577 124.377174 -9.239424 +v 2.954309 124.352646 -6.428508 +v 3.600958 124.348671 -5.972470 +v 4.320638 124.346481 -5.721798 +v 81.762947 120.242188 -20.299982 +v 89.201332 120.245956 -20.299982 +v 122.251465 141.701035 24.888420 +v 122.508278 145.188385 27.486597 +v 122.470367 148.500000 27.549826 +v 122.366234 145.230942 27.620163 +v 122.229202 148.500000 27.688200 +v 122.180374 145.198975 27.685953 +v 122.697273 141.976990 24.321791 +v 122.632164 141.763535 24.117718 +v 122.596687 141.885773 24.814671 +v 122.416397 141.747147 24.870359 +v 122.641075 142.277542 25.454687 +v 122.476112 142.142380 25.642162 +v 122.282471 141.961472 25.499708 +v 122.264717 142.299561 26.062757 +v 122.580383 142.777130 26.257877 +v 122.443611 142.632797 26.330292 +v 122.230614 142.882843 26.703127 +v 122.535507 143.327255 26.793961 +v 122.317810 143.269730 26.975847 +v 122.406235 143.669785 27.149931 +v 122.544563 144.090820 27.182377 +v 122.206291 143.998932 27.397743 +v 122.590134 144.857300 27.287502 +v 122.416550 144.448227 27.453918 +v 122.218788 144.639587 27.592222 +v 123.345612 140.730438 -0.721902 +v 123.474869 140.854660 -0.685640 +v 123.630150 136.564789 -4.879474 +v 123.603477 137.452484 -4.689911 +v 123.492058 136.538010 -4.756981 +v 123.655388 138.464218 -4.388837 +v 123.310623 136.544952 -4.692371 +v 123.335014 137.155060 -4.601349 +v 123.383362 137.637024 -4.476795 +v 123.513191 138.393173 -4.236556 +v 123.317856 138.345261 -4.163475 +v 123.598434 139.094406 -3.882812 +v 123.458488 139.207779 -3.643221 +v 123.293419 139.158936 -3.594824 +v 123.586426 139.653931 -3.393130 +v 123.355507 139.666656 -3.085800 +v 123.545952 140.253998 -2.546889 +v 123.322617 139.959808 -2.682391 +v 123.356804 140.371002 -2.003010 +v 123.190422 140.325668 -1.985545 +v 123.513893 140.669449 -1.611584 +v 123.295074 140.569702 -1.313683 +v 79.821266 120.930267 -4.819538 +v 91.129601 120.930992 -4.826019 +v 79.872467 121.050995 -4.746078 +v 79.544685 120.408348 -5.006674 +v 79.624199 120.591789 -5.030023 +v 79.766312 120.714760 -5.082232 +v 79.935730 120.787437 -5.073254 +v 79.841743 120.817261 -4.951159 +v 79.652245 120.782875 -4.821328 +v 81.457191 119.992241 -20.299982 +v 91.423058 120.504257 -5.015013 +v 91.498421 120.467331 -4.700700 +v 91.309555 120.686195 -4.990452 +v 91.108566 120.782196 -5.066273 +v 91.445183 120.740845 -4.701596 +v 91.328575 120.949066 -4.705514 +v 91.160637 121.148323 -4.703731 +v 89.463188 120.098969 -20.299982 +v 89.580627 119.838661 -20.299982 +v -123.407379 137.293488 -2.609838 +v -123.377846 137.884109 -2.359198 +v 123.394051 137.895630 -2.344923 +v 123.360443 138.171631 -2.102092 +v -123.352135 138.263199 -1.996058 +v 123.341820 138.382828 -1.802064 +v -123.322937 138.486023 -1.582113 +v 123.304993 138.564682 -1.354972 +v 123.285324 138.666229 -0.785798 +v 122.320786 139.637802 24.894356 +v -122.375397 139.753174 25.500620 +v 122.378113 139.809113 25.718523 +v -122.439117 140.089523 26.590048 +v 122.336189 140.208115 26.865940 +v -122.346626 140.496429 27.405722 +v 122.311852 140.569565 27.523333 +v 122.326950 141.501526 28.527752 +v 122.317314 142.142807 28.932178 +v -122.296257 142.669312 29.180302 +v -122.293144 143.872208 29.526834 +v 122.312408 143.916626 29.529678 +v -122.304489 145.328064 29.682253 +v 122.295372 145.270447 29.681156 +v 125.622047 137.393356 -4.406818 +v 125.427315 137.003799 -3.977706 +v 125.136688 136.972733 -3.553803 +v 124.777138 136.933609 -3.209860 +v 124.342026 136.877319 -2.941798 +v 123.860962 136.858032 -2.763032 +v 93.673721 136.838669 -2.695724 +v 125.412987 137.890060 -3.768965 +v 125.592934 139.054260 -3.717830 +v 125.411697 138.618195 -3.448086 +v 125.138290 137.760635 -3.388522 +v 125.126045 138.318420 -3.129252 +v 125.393555 139.192261 -2.948785 +v 124.770248 137.641754 -3.052038 +v 125.443268 139.600494 -2.605448 +v 125.617294 140.314529 -2.611781 +v 124.658913 138.083069 -2.758296 +v 125.110458 138.777206 -2.764651 +v 124.337341 137.549057 -2.793803 +v 124.741508 138.514954 -2.516759 +v 123.857971 137.485962 -2.624840 +v 124.111916 137.907623 -2.527047 +v 125.089340 139.121292 -2.323090 +v 124.307259 138.312881 -2.327080 +v 123.476059 137.548721 -2.532204 +v 123.833336 138.023605 -2.341359 +v 125.456551 140.063004 -1.876462 +v 124.720856 138.808884 -2.139570 +v 125.568520 140.672531 -1.428420 +v 123.817833 138.265823 -2.106691 +v 125.204010 139.613495 -1.706880 +v 124.284439 138.565689 -2.001396 +v 124.892387 139.189102 -1.739274 +v 123.796188 138.456146 -1.824320 +v 124.643936 139.048294 -1.519520 +v 124.266586 138.760452 -1.597831 +v 123.768311 138.640778 -1.365706 +v 125.023682 139.555756 -0.995835 +v 125.359573 140.106445 -0.866199 +v 124.192146 138.896652 -0.970977 +v 124.795959 139.342194 -0.767632 +v 124.452370 139.064514 -0.781275 +v 123.738312 138.744003 -0.773159 +v 122.456535 139.538757 23.776522 +v 122.867111 139.615036 23.863029 +v 124.628220 141.354202 23.900852 +v 124.434921 140.890533 24.048855 +v 123.582428 139.955322 24.132860 +v 124.079620 140.377197 24.135508 +v 123.015526 139.699249 24.424398 +v 124.581261 141.659607 25.565178 +v 124.487083 141.334747 25.508059 +v 124.267097 140.868286 25.384329 +v 123.924118 140.402847 25.208706 +v 123.403564 140.015030 25.278458 +v 122.821014 139.841125 25.531425 +v 123.855255 140.549164 25.987509 +v 123.494743 140.258942 25.960516 +v 123.043427 140.111237 26.220205 +v 122.473808 139.985199 26.296606 +v 124.215721 141.232635 26.512444 +v 124.471336 142.132599 26.953270 +v 123.930656 141.019348 26.837170 +v 124.294662 141.608459 26.895813 +v 123.680878 140.765152 26.839380 +v 124.593246 142.359512 26.581017 +v 123.260818 140.553040 27.005692 +v 122.785019 140.388184 27.078362 +v 124.482010 142.943665 27.495399 +v 123.861618 141.381592 27.467588 +v 124.199135 142.034012 27.551786 +v 123.473534 141.165756 27.683304 +v 124.554970 145.786285 27.698719 +v 123.016823 140.991241 27.830372 +v 122.469925 140.920868 27.965439 +v 123.809143 141.759766 27.920452 +v 124.419548 144.115250 28.011969 +v 124.189926 142.727173 28.020348 +v 124.401375 145.710587 28.185059 +v 123.860748 142.377106 28.271479 +v 123.237648 141.653595 28.326473 +v 124.176888 143.744431 28.382067 +v 122.763512 141.429550 28.369808 +v 123.365173 142.216202 28.614485 +v 124.150536 145.038849 28.615545 +v 123.854675 142.971497 28.543447 +v 123.850807 143.650772 28.759430 +v 122.756363 142.031784 28.792459 +v 123.446075 143.139404 28.951933 +v 123.724228 144.447128 29.028765 +v 123.740341 145.466797 29.087597 +v 122.988899 142.758896 29.050262 +v 122.395576 142.835205 29.236187 +v 122.985512 143.380905 29.251104 +v 123.214592 144.323212 29.342007 +v 122.719818 143.560654 29.386080 +v 123.234299 145.495361 29.423876 +v 122.738457 144.520920 29.542765 +v 122.750641 145.493652 29.609381 +v 124.111443 148.500000 28.709991 +v 123.346680 148.500000 29.387154 +v 122.489700 148.500000 29.677999 +v -125.540283 136.975204 -4.216683 +v -125.295456 136.955414 -3.765795 +v -124.970253 136.944595 -3.380332 +v -124.568878 136.906433 -3.066399 +v -124.106026 136.697525 -2.846749 +v -93.508949 136.714417 -2.702255 +v -125.619156 138.140671 -4.216978 +v -125.415276 137.812500 -3.798562 +v -125.453728 139.034317 -3.244794 +v -125.408295 138.466171 -3.519937 +v -125.136040 137.743484 -3.391164 +v -125.126595 138.277313 -3.151920 +v -124.768684 137.630325 -3.054291 +v -125.031975 138.654419 -2.744327 +v -124.758110 138.091690 -2.845890 +v -125.483101 139.647095 -2.731160 +v -124.340736 137.536896 -2.799740 +v -123.946663 137.298996 -2.703526 +v -124.324417 137.945999 -2.612323 +v -125.234558 139.274826 -2.443251 +v -124.533615 138.367691 -2.451627 +v -123.852730 137.755737 -2.512392 +v -124.826668 138.856049 -2.217199 +v -125.470787 140.297958 -1.387183 +v -123.981506 138.123474 -2.310292 +v -125.351257 139.772217 -1.954677 +v -124.288055 138.548676 -2.031816 +v -123.819916 138.283340 -2.089251 +v -125.063866 139.364243 -1.807904 +v -124.700211 139.021255 -1.698278 +v -123.783676 138.538071 -1.664282 +v -124.192635 138.765411 -1.484308 +v -125.232521 139.841385 -1.031264 +v -124.861710 139.379822 -0.979162 +v -124.476349 139.058273 -0.989736 +v -123.418312 138.614044 -1.162055 +v -124.235863 138.940552 -0.757408 +v -123.747108 138.748596 -0.755508 +v -124.612442 141.388062 24.328829 +v -122.880562 139.624496 23.953104 +v -124.423798 140.921783 24.422092 +v -123.368980 139.816071 23.960115 +v -124.137665 140.489929 24.467207 +v -123.769798 140.125137 24.480099 +v -123.326233 139.915192 24.923344 +v -122.839348 139.727905 24.932682 +v -124.489555 141.385712 25.593828 +v -124.257805 140.962555 25.717773 +v -123.931969 140.574707 25.815039 +v -123.523697 140.251282 25.883419 +v -123.060783 140.014969 25.905210 +v -122.690475 139.908997 25.919983 +v -124.552956 142.034744 26.446108 +v -124.452446 141.928833 26.820757 +v -124.228226 141.368011 26.722179 +v -123.910194 140.820038 26.486565 +v -123.500839 140.518845 26.616425 +v -123.038200 140.294128 26.686176 +v -123.797333 141.030548 27.112125 +v -124.522018 142.863022 27.291945 +v -123.260620 140.735687 27.307905 +v -122.781715 140.574860 27.393860 +v -124.221451 141.861542 27.348864 +v -124.326576 142.641953 27.717220 +v -123.879845 141.510590 27.581753 +v -124.501427 144.089188 27.780247 +v -123.963768 142.016403 27.926386 +v -123.470383 141.259216 27.788452 +v -123.012489 141.083282 27.930904 +v -124.337700 143.846268 28.147188 +v -122.450294 141.052216 28.113037 +v -123.959610 142.758896 28.352013 +v -123.465591 141.756271 28.242928 +v -124.393227 145.872498 28.207176 +v -123.004631 141.587814 28.402418 +v -124.160797 143.693024 28.400230 +v -123.568329 142.305435 28.510359 +v -124.182854 145.190353 28.576385 +v -122.436699 141.598221 28.585018 +v -123.833664 143.594376 28.760855 +v -123.453369 142.728134 28.789173 +v -122.992256 142.143723 28.764185 +v -123.924301 145.482849 28.914623 +v -123.750748 144.417114 28.996668 +v -122.430557 142.042404 28.870070 +v -123.372566 143.384552 29.072205 +v -122.850250 142.604996 29.042976 +v -123.221390 144.146332 29.312075 +v -123.520622 145.553665 29.257572 +v -122.735435 143.204330 29.285692 +v -123.216530 145.294479 29.426373 +v -122.732513 144.099335 29.489393 +v -122.794724 145.380280 29.597078 +v -124.303406 148.500000 28.401031 +v -123.842216 148.500000 29.003263 +v -123.223381 148.500000 29.443645 +v -122.458557 148.500000 29.684410 +v -123.848862 116.490852 -5.899983 +v -123.918678 116.485359 -4.399983 +v -124.751320 116.347321 -5.899983 +v -124.840981 116.323296 -4.399983 +v -125.731331 115.981438 -5.899983 +v -125.814034 115.939293 -4.399983 +v -126.807808 115.272736 -5.899984 +v -126.686714 115.361000 -4.399984 +v -127.420036 114.613716 -4.399984 +v -127.811707 114.065964 -5.899984 +v -127.981415 113.731354 -4.399984 +v -128.323303 112.840874 -5.899984 +v -128.347336 112.751183 -4.399984 +v -128.485352 111.918663 -5.899984 +v -128.490829 111.848846 -4.399984 +v -128.490829 -107.848816 -5.900032 +v -128.485352 -107.918633 -4.400032 +v -128.347351 -108.751183 -5.900032 +v -128.323303 -108.840874 -4.400032 +v -127.981392 -109.731384 -5.900032 +v -127.811676 -110.066010 -4.400032 +v -127.420097 -110.613640 -5.900033 +v -126.807747 -111.272789 -4.400032 +v -126.686729 -111.360992 -5.900033 +v -125.814201 -111.939201 -5.900033 +v -125.731499 -111.981346 -4.400032 +v -124.841278 -112.323212 -5.900033 +v -124.751602 -112.347244 -4.400032 +v -123.918594 -112.485367 -5.900033 +v -123.848831 -112.490852 -4.400032 +v 123.848808 -112.490852 -5.900033 +v 123.918579 -112.485367 -4.400032 +v 128.490829 -107.848816 -4.400032 +v 128.485352 -107.918633 -5.900032 +v 128.347351 -108.751183 -4.400032 +v 128.323303 -108.840874 -5.900032 +v 127.981392 -109.731384 -4.400032 +v 127.811684 -110.066002 -5.900033 +v 127.420074 -110.613678 -4.400032 +v 126.807777 -111.272774 -5.900033 +v 126.686745 -111.360992 -4.400032 +v 125.814232 -111.939186 -4.400032 +v 125.731522 -111.981331 -5.900033 +v 124.841293 -112.323204 -4.400032 +v 124.751617 -112.347244 -5.900033 +v 128.485352 111.918602 -4.399984 +v 128.490829 111.848747 -5.899984 +v 123.848846 116.490852 -4.399983 +v 123.918602 116.485367 -5.899983 +v 124.751381 116.347305 -4.399983 +v 124.841072 116.323265 -5.899983 +v 125.731339 115.981438 -4.399983 +v 125.814034 115.939293 -5.899983 +v 126.807838 115.272720 -4.399984 +v 126.686729 115.360992 -5.899984 +v 127.420013 114.613754 -5.899984 +v 127.811707 114.065948 -4.399984 +v 127.981415 113.731354 -5.899984 +v 128.323303 112.840874 -4.399984 +v 128.347336 112.751228 -5.899984 +v 122.500000 148.500000 -7.299976 +v 125.490013 148.500000 -18.680765 +v 125.500000 148.500000 -7.299976 +v 120.811798 148.500000 -20.287933 +v 120.779869 148.500000 -23.297600 +v -121.111626 148.500000 -23.280685 +v -120.824448 148.500000 -20.292238 +v 121.750755 148.500000 -23.147449 +v 122.731339 148.500000 -22.781443 +v 121.667557 148.500000 -19.956633 +v 123.614044 148.500000 -22.219763 +v 124.361305 148.500000 -21.486303 +v 122.276192 148.500000 -19.248241 +v 124.939240 148.500000 -20.614082 +v 125.323212 148.500000 -19.641190 +v 122.494461 148.500000 -18.529585 +v -125.499992 148.500000 -7.299976 +v -125.493134 148.500000 -18.627178 +v -122.499992 148.500000 -7.299976 +v -120.745895 -97.595192 -20.294550 +v 119.418747 -98.242973 -20.299652 +v 119.896957 -97.739487 -20.299604 +v 120.501480 -97.596779 -20.307573 +v 119.292007 -98.823532 -20.300013 +v -120.075317 -97.668686 -20.300041 +v 119.775055 -99.776619 -20.300028 +v 120.271324 -99.983147 -20.300028 +v 119.414673 -99.332115 -20.300026 +v 130.999985 -112.887878 -20.296299 +v -119.685028 -97.912460 -20.300026 +v -119.414665 -98.267868 -20.300026 +v -119.292000 -98.776657 -20.300026 +v -119.393944 -99.286797 -20.300026 +v -119.738312 -99.745422 -20.300028 +v -130.999985 -112.764626 -20.296947 +v -120.274551 -99.987526 -20.300028 +v -124.516418 -100.047935 -20.300028 +v -130.986267 -106.976845 -20.300028 +v 124.014038 -100.012764 -20.300028 +v 130.951736 -106.481750 -20.300028 +v 130.485199 -104.743752 -20.300028 +v 129.995178 -103.750000 -20.300028 +v 125.376137 -100.228836 -20.300028 +v -126.256004 -100.514709 -20.300028 +v 126.550491 -100.648407 -20.300028 +v -127.249992 -101.004791 -20.300028 +v 127.530861 -101.164200 -20.300028 +v -130.771271 -105.624184 -20.300028 +v -130.222168 -104.152985 -20.300028 +v -128.280045 -101.708504 -20.300028 +v 129.291534 -102.720024 -20.300028 +v 128.518478 -101.926392 -20.300028 +v -129.379150 -102.828224 -20.300028 +v -120.257370 -97.618202 -23.303097 +v -119.798943 -97.815338 -23.300028 +v 120.304253 -97.609634 -23.302044 +v -119.782234 -99.778496 -23.300261 +v -119.413895 -99.329964 -23.300028 +v -119.292007 -98.823547 -23.300028 +v -119.418739 -98.242981 -23.300028 +v -130.999985 -112.941383 -23.297308 +v -120.271317 -99.983147 -23.300028 +v 119.775101 -97.823364 -23.300026 +v 119.414658 -98.267891 -23.300026 +v 119.292000 -98.776649 -23.300026 +v 119.418793 -99.357086 -23.300026 +v 130.999985 -112.912247 -23.295227 +v 119.798965 -99.784683 -23.300028 +v 120.274582 -99.987534 -23.300028 +v -124.014038 -100.012764 -23.300028 +v 124.516403 -100.047935 -23.300028 +v 130.535095 -104.873734 -23.300028 +v 130.968750 -106.630760 -23.300028 +v 129.995178 -103.750000 -23.300028 +v -125.376114 -100.228828 -23.300028 +v 126.255981 -100.514694 -23.300028 +v -126.550491 -100.648407 -23.300028 +v -127.530922 -101.164246 -23.300028 +v 127.250000 -101.004791 -23.300028 +v -130.951736 -106.481728 -23.300028 +v -130.485199 -104.743790 -23.300028 +v -129.995178 -103.750000 -23.300028 +v 128.280075 -101.708534 -23.300028 +v 129.379150 -102.828224 -23.300028 +v -128.518478 -101.926392 -23.300028 +v -129.291534 -102.720024 -23.300028 +v -121.480598 -97.600281 -23.220627 +v -122.731308 -97.600006 -22.781506 +v -121.485016 -97.600006 -20.050444 +v -123.614120 -97.600006 -22.219757 +v -122.037872 -97.600006 -19.599304 +v -124.361351 -97.600006 -21.486292 +v -124.939278 -97.600006 -20.614075 +v -122.450729 -97.600006 -18.814415 +v -125.323242 -97.600006 -19.641140 +v -125.485359 -97.600006 -18.718697 +v -121.523247 148.500000 -20.028318 +v -122.089958 148.500000 -19.534952 +v -122.470726 148.500000 -18.742956 +v -122.337410 148.500000 -22.956833 +v -123.265381 148.500000 -22.473095 +v -124.272751 148.500000 -21.607742 +v -124.981422 148.500000 -20.531307 +v -125.347275 148.500000 -19.551422 +v -122.499443 -97.575020 -12.604840 +v -125.499992 -97.582451 -12.797888 +v -125.499992 -97.388100 -11.691212 +v -122.499992 -97.228371 -11.199620 +v -125.499992 -96.927032 -10.522801 +v -122.499992 -96.796204 -10.300028 +v -122.499992 -96.303345 -9.562597 +v -125.499992 -96.233238 -9.476027 +v -122.499992 -95.423882 -8.666689 +v -125.499992 -95.614807 -8.841157 +v -125.499992 -94.824959 -8.231556 +v -122.499992 -94.376930 -7.972893 +v -125.499992 -93.700737 -7.671827 +v -122.499992 -93.208542 -7.511895 +v -125.499992 -92.295341 -7.325005 +v -122.499992 -92.102417 -7.317586 +v 121.332619 -97.600105 -23.236347 +v 121.332466 -97.600006 -20.136358 +v 122.337379 -97.600006 -22.956894 +v 123.265419 -97.600006 -22.473129 +v 122.085442 -97.600006 -19.541189 +v 124.272774 -97.600006 -21.607773 +v 124.981400 -97.600006 -20.531393 +v 122.456230 -97.600006 -18.768280 +v 125.347252 -97.600006 -19.551569 +v 125.486282 -97.600006 -18.692442 +v 125.500000 -92.102417 -7.317586 +v 125.500000 -97.575020 -12.604840 +v 122.499359 -97.582451 -12.797888 +v 122.500000 -97.388100 -11.691212 +v 125.500000 -97.228371 -11.199620 +v 122.500000 -96.927032 -10.522801 +v 125.500000 -96.796204 -10.300028 +v 125.500000 -96.303345 -9.562597 +v 122.500000 -96.233238 -9.476027 +v 125.500000 -95.423882 -8.666689 +v 122.500000 -95.614807 -8.841157 +v 122.500000 -94.824959 -8.231556 +v 125.500000 -94.376930 -7.972893 +v 122.500000 -93.700737 -7.671827 +v 125.500000 -93.208542 -7.511895 +v 122.499886 -92.295341 -7.325005 +v 130.999985 -114.250908 -23.086523 +v 130.999985 -113.900215 -20.052269 +v 130.999985 -115.623672 -22.574188 +v 130.999985 -114.816292 -19.578260 +v 130.999985 -116.859962 -21.787552 +v 130.999985 -117.905518 -20.761232 +v 130.999985 -115.716095 -18.701925 +v 130.999985 -118.714859 -19.540068 +v 130.999985 -116.225327 -17.770367 +v 130.999985 -119.252548 -18.177534 +v 130.999985 -116.490425 -16.759218 +v 130.999985 -119.489388 -16.806313 +v -130.999985 -113.572533 -20.158754 +v -130.999985 -114.376450 -23.052889 +v -130.999985 -114.351540 -19.851315 +v -130.999985 -115.347198 -22.694849 +v -130.999985 -116.371674 -22.142324 +v -130.999985 -115.049248 -19.388901 +v -130.999985 -117.183899 -21.502045 +v -130.999985 -115.635872 -18.791319 +v -130.999985 -117.987297 -20.660238 +v -130.999985 -116.085358 -18.084764 +v -130.999985 -118.773872 -19.424257 +v -130.999985 -116.378059 -17.300266 +v -130.999985 -119.286194 -18.052002 +v -130.999985 -116.495605 -16.551306 +v -130.999985 -119.490387 -16.758808 +v 130.989014 -116.500000 -14.381718 +v 130.961365 -119.500000 -13.985286 +v 130.817078 -116.500000 -13.299699 +v 130.588028 -119.500000 -12.594712 +v 130.377716 -116.500000 -12.122287 +v 130.196182 -119.500000 -11.800031 +v 129.703339 -116.500000 -11.062609 +v 129.633224 -119.500000 -10.976038 +v 128.823898 -116.500000 -10.166730 +v 129.014786 -119.500000 -10.341161 +v 128.224899 -119.500000 -9.731530 +v 128.000000 -116.500000 -9.603883 +v 127.204735 -116.500000 -9.211755 +v 127.100731 -119.500000 -9.171831 +v 125.814484 -116.500000 -8.838605 +v 125.695335 -119.500000 -8.825008 +v 88.180832 -119.500000 -8.788692 +v 88.190269 -116.500000 -8.791777 +v 87.377190 -119.500000 -8.650752 +v 87.379242 -116.500000 -8.645697 +v 84.047554 -116.500000 -7.280856 +v 84.847519 -119.500000 -7.598902 +v 81.590515 -119.500000 -6.468049 +v 79.865524 -116.500000 -5.997742 +v 77.368362 -119.500000 -5.457813 +v 75.603195 -116.500000 -5.173487 +v 74.333740 -119.500000 -5.030953 +v 71.736549 -116.500000 -4.830858 +v 71.447136 -119.500000 -4.819301 +v -71.736549 -119.500000 -4.830859 +v -71.447136 -116.500000 -4.819300 +v -84.047539 -119.500000 -7.280851 +v -84.847519 -116.500000 -7.598901 +v -81.590515 -116.500000 -6.468049 +v -79.865524 -119.500000 -5.997742 +v -77.368362 -116.500000 -5.457813 +v -75.603195 -119.500000 -5.173487 +v -74.333740 -116.500000 -5.030953 +v -88.190269 -119.500000 -8.791777 +v -88.180832 -116.500000 -8.788692 +v -87.377190 -116.500000 -8.650750 +v -87.379227 -119.500000 -8.645694 +v -130.989014 -119.500000 -14.381718 +v -130.961365 -116.500000 -13.985286 +v -130.817078 -119.500000 -13.299699 +v -130.588028 -116.500000 -12.594712 +v -130.377716 -119.500000 -12.122287 +v -130.196182 -116.500000 -11.800031 +v -129.703339 -119.500000 -11.062609 +v -129.633224 -116.500000 -10.976038 +v -128.823883 -119.500000 -10.166717 +v -129.014786 -116.500000 -10.341161 +v -128.224930 -116.500000 -9.731552 +v -127.999992 -119.500000 -9.603883 +v -127.204689 -119.500000 -9.211740 +v -127.100693 -116.500000 -9.171818 +v -125.814468 -119.500000 -8.838605 +v -125.695320 -116.500000 -8.825008 +v 126.792892 116.000000 -4.399983 +v 126.792892 -112.000000 -4.400032 +v -126.792892 116.000000 -4.399983 +v -126.792892 -112.000000 -4.400032 +v -127.999992 114.792900 -4.399983 +v 128.000000 114.792900 -4.399983 +v 128.000000 -110.792908 -4.400032 +v -127.999992 -110.792908 -4.400032 +v -128.499985 115.000000 -3.899983 +v -126.999992 116.500000 -0.899983 +v -126.999992 116.500000 -3.899983 +v -128.499985 115.000000 -0.899983 +v -126.792892 116.000000 -0.399983 +v -127.999992 114.792900 -0.399983 +v 126.792892 116.000000 -0.399983 +v 127.000000 116.500000 -0.899983 +v 127.000000 116.500000 -3.899983 +v -128.499985 -111.000000 -0.900032 +v -127.999992 -110.792908 -0.400032 +v -128.499985 -111.000000 -3.900032 +v 128.499985 115.000000 -0.899983 +v 128.499985 115.000000 -3.899983 +v 128.000000 114.792900 -0.399983 +v -126.999992 -112.500000 -3.900032 +v -126.999992 -112.500000 -0.900032 +v -126.792892 -112.000000 -0.400032 +v 128.000000 -110.792908 -0.400032 +v 128.499985 -111.000000 -0.900032 +v 128.499985 -111.000000 -3.900032 +v 127.000000 -112.500000 -0.900032 +v 126.792892 -112.000000 -0.400032 +v 127.000000 -112.500000 -3.900032 +v -113.499512 -104.925499 -6.290667 +v -113.499794 -104.696381 -5.941831 +v -113.499992 -104.950165 -5.898036 +v -98.500351 -104.753258 -5.915757 +v -98.500107 -104.863670 -6.305339 +v -113.499992 -112.403862 -5.902736 +v -113.499992 -112.401367 -6.304688 +v -113.499992 -112.576485 -5.856108 +v -113.499992 -112.850365 -6.169373 +v -113.499992 -112.735107 -5.680000 +v -113.499992 -113.135582 -5.749354 +v -113.499992 -113.119308 -0.120282 +v -113.499992 -112.720406 -0.196579 +v -98.499992 -112.518532 -5.886173 +v -98.499992 -112.584015 -6.289790 +v -98.499992 -113.006104 -6.019112 +v -98.499969 -112.717926 -5.719210 +v -98.499481 -113.155006 -5.553756 +v -98.494156 -112.745590 -5.550069 +v -113.499992 -112.835075 0.240816 +v -113.499992 -112.423920 -0.023948 +v -113.499992 -112.392403 0.382573 +v -98.498772 -112.756721 -0.373211 +v -98.499809 -113.152428 -0.379375 +v -98.499992 -113.078110 -0.050501 +v -98.499992 -112.611053 -0.093820 +v -98.499992 -112.857735 0.224349 +v -98.499992 -112.440186 0.380228 +v -98.499992 -112.381073 -0.025535 +v -113.499908 -107.268150 -1.232720 +v -113.499733 -107.277565 -1.645689 +v -113.495285 -106.151192 -0.649756 +v -113.469170 -105.784584 -0.907685 +v -98.500359 -107.288628 -1.237510 +v -98.500069 -107.214096 -1.645461 +v -99.718605 -104.795349 -0.381813 +v -98.511063 -105.896660 -0.967468 +v -112.237427 -104.788513 -0.378215 +v -99.130211 -105.010773 -0.496472 +v -98.692696 -105.437569 -0.723395 +v -113.196884 -105.291206 -0.645579 +v -112.752754 -104.947914 -0.463047 +v -120.283081 -104.935890 -5.899981 +v -124.041954 -112.380196 -5.900015 +v -124.345459 -108.882858 -5.900032 +v -123.648956 -109.099205 -5.900032 +v -122.105476 -108.302788 -5.900032 +v -123.083359 -109.054390 -5.900032 +v -122.518867 -108.775360 -5.900032 +v -124.864326 -108.353592 -5.900032 +v -125.176270 -112.113762 -5.900033 +v -126.244164 -111.573875 -5.900033 +v -127.169693 -110.760399 -5.900033 +v -127.705376 -104.983971 -5.900032 +v -128.254196 -106.228333 -5.900032 +v -128.404648 -107.393890 -5.900032 +v -128.317169 -108.468346 -5.900032 +v -127.866142 -109.755821 -5.900033 +v -125.104385 -107.683228 -5.900032 +v -121.904442 -107.708160 -5.900032 +v -121.981270 -106.939384 -5.900032 +v -125.024849 -106.984032 -5.900032 +v -124.744057 -106.485962 -5.900032 +v -122.370270 -106.358353 -5.900032 +v -126.720436 -104.940346 -5.900032 +v -124.351341 -106.133759 -5.900032 +v -125.971497 -104.207916 -5.900032 +v -121.109909 -104.151787 -5.900032 +v -122.835838 -106.034187 -5.900032 +v -125.004074 -103.676003 -5.900031 +v -122.082436 -103.643372 -5.900031 +v -123.595512 -105.883949 -5.900032 +v -122.891411 -103.440079 -5.900031 +v -123.930885 -103.410545 -5.900031 +v -99.762520 -102.508858 -7.193946 +v -112.437813 -102.537514 -7.177415 +v -98.719894 -103.106201 -6.849077 +v -98.519432 -103.555161 -6.589985 +v -99.192123 -102.689484 -7.089674 +v -113.032555 -102.844978 -6.999902 +v -113.495285 -103.661278 -6.528798 +v -113.365311 -103.244720 -6.769102 +v -112.164268 -102.703552 -7.543434 +v -99.715584 -102.715805 -7.536356 +v -112.700294 -102.838028 -7.465782 +v -99.143272 -102.914772 -7.421479 +v -98.692696 -103.345505 -7.172802 +v -98.511055 -103.795998 -6.913196 +v -113.469170 -103.685844 -6.976448 +v -113.196938 -103.202034 -7.255642 +v -123.870140 -105.914825 -6.300029 +v -124.108574 -103.440071 -6.300029 +v -123.069107 -103.410545 -6.300029 +v -123.083351 -105.945625 -6.300029 +v -124.917564 -103.643372 -6.300029 +v -121.995911 -103.676010 -6.300029 +v -125.890121 -104.151817 -6.300029 +v -122.400894 -106.311417 -6.300029 +v -121.028503 -104.207909 -6.300029 +v -124.560188 -106.288651 -6.300029 +v -126.715698 -104.934837 -6.300029 +v -120.279839 -104.940414 -6.300001 +v -124.984863 -106.874008 -6.300030 +v -121.947678 -107.055283 -6.300030 +v -122.134476 -108.351173 -6.300030 +v -121.912720 -107.764015 -6.300030 +v -125.111130 -107.617622 -6.300030 +v -124.161758 -112.365791 -6.300035 +v -124.894539 -108.302742 -6.300030 +v -125.266083 -112.080132 -6.300033 +v -126.352432 -111.498817 -6.300033 +v -127.232658 -110.688118 -6.300034 +v -127.692566 -104.972702 -6.300030 +v -128.215454 -106.091179 -6.300030 +v -128.403107 -107.337410 -6.300030 +v -128.350403 -108.256805 -6.300031 +v -127.984772 -109.527443 -6.300033 +v -124.475876 -108.782425 -6.300035 +v -122.564178 -108.808975 -6.300035 +v -123.977356 -109.033783 -6.300033 +v -123.273483 -109.103020 -6.300034 +v -112.281502 -104.983139 -0.028692 +v -98.519440 -106.043015 -0.592111 +v -99.762512 -104.976540 -0.024644 +v -98.719910 -105.585251 -0.348906 +v -99.190887 -105.162781 -0.124252 +v -113.308205 -105.610222 -0.362170 +v -112.798042 -105.159676 -0.122605 +v -98.326378 -113.189217 -5.549622 +v -98.125603 -112.840919 -5.549874 +v -98.346329 -113.179306 -0.381882 +v -98.122849 -112.837944 -0.382129 +v -94.418640 -117.086685 -0.392829 +v -94.102501 -116.836975 -0.401198 +v -94.041710 -116.897942 -5.523133 +v -94.385391 -117.119865 -5.530602 +v -93.248222 -117.691116 -1.643624 +v -93.278313 -117.661041 -4.525964 +v -93.593376 -117.345970 -5.182483 +v -93.685204 -117.254150 -0.645702 +v -93.385139 -117.554199 -1.109923 +v -93.983215 -117.521812 -5.299919 +v -93.659790 -117.845245 -4.809508 +v -93.531029 -117.974007 -4.287407 +v -93.555519 -117.949516 -1.439597 +v -93.806717 -117.698318 -0.846351 +v -94.094833 -117.410194 -0.544410 +v 113.499519 -104.696648 -5.939164 +v 113.499840 -104.930397 -6.285290 +v 113.500000 -104.950111 -5.898717 +v 98.500404 -104.866028 -6.305832 +v 98.500092 -104.755470 -5.918425 +v 98.554482 -103.585854 -7.034211 +v 113.500000 -112.419914 -5.914762 +v 113.500000 -112.404060 -6.303746 +v 113.500000 -112.814133 -6.189299 +v 113.500000 -112.732468 -5.691329 +v 113.500000 -113.122543 -5.799522 +v 113.500000 -112.735374 -0.252623 +v 113.500000 -113.130424 -0.154565 +v 98.499992 -112.485909 -5.894973 +v 98.499992 -112.621277 -6.279701 +v 98.499992 -112.702332 -5.747434 +v 98.499992 -113.033752 -5.981179 +v 98.499817 -113.152283 -5.552338 +v 98.487495 -112.738274 -5.550432 +v 113.500000 -112.857735 0.224349 +v 113.500000 -112.485870 -0.019457 +v 113.500000 -112.440186 0.380228 +v 98.499466 -113.155251 -0.377895 +v 98.499969 -112.723473 -0.227026 +v 98.499992 -112.750000 -0.381767 +v 98.499992 -113.066734 -0.028299 +v 98.499992 -112.835075 0.240816 +v 98.499992 -112.486038 -0.026784 +v 98.499992 -112.392403 0.382573 +v 113.499641 -107.288414 -1.237147 +v 113.499924 -107.221558 -1.644919 +v 113.495285 -105.963409 -1.002908 +v 113.482582 -106.059982 -0.600996 +v 98.500092 -107.287163 -1.231096 +v 98.500473 -107.119835 -1.607435 +v 98.499992 -107.442665 -1.619605 +v 98.519989 -105.850006 -0.942378 +v 99.762573 -104.788605 -0.378049 +v 113.310593 -105.426094 -0.717291 +v 98.747757 -105.346573 -0.675018 +v 99.247215 -104.947937 -0.463054 +v 112.798149 -104.971954 -0.475823 +v 112.281425 -104.795334 -0.381843 +v 120.280762 -104.939301 -5.899974 +v 124.161591 -112.365814 -5.900041 +v 124.481133 -108.775352 -5.900032 +v 122.096054 -108.292747 -5.900032 +v 123.777817 -109.097626 -5.900032 +v 123.055847 -109.042770 -5.900032 +v 126.710945 -104.934135 -5.900032 +v 124.894539 -108.302765 -5.900032 +v 122.568306 -108.812569 -5.900032 +v 125.266022 -112.080162 -5.900033 +v 126.352356 -111.498863 -5.900033 +v 127.235878 -110.684738 -5.900033 +v 127.984848 -105.510780 -5.900032 +v 128.236313 -108.789978 -5.900032 +v 128.411392 -107.570511 -5.900032 +v 128.278763 -106.376389 -5.900032 +v 127.836113 -109.805634 -5.900033 +v 127.669876 -104.965614 -5.900032 +v 125.095566 -107.708069 -5.900032 +v 121.902435 -107.665779 -5.900032 +v 121.940353 -107.110680 -5.900032 +v 125.020500 -106.944038 -5.900032 +v 122.159836 -106.614799 -5.900032 +v 124.629768 -106.358398 -5.900032 +v 122.610275 -106.152077 -5.900032 +v 121.028549 -104.207870 -5.900032 +v 124.164169 -106.034195 -5.900032 +v 123.377098 -105.882690 -5.900032 +v 121.995842 -103.676041 -5.900031 +v 126.010841 -104.226738 -5.900032 +v 124.917488 -103.643349 -5.900031 +v 124.108589 -103.440079 -5.900031 +v 123.069069 -103.410553 -5.900031 +v 98.511055 -103.595947 -6.566602 +v 99.737251 -102.513840 -7.191072 +v 112.237526 -102.508865 -7.193945 +v 98.694313 -103.139557 -6.829818 +v 113.480286 -103.552589 -6.591471 +v 113.245514 -103.052094 -6.880321 +v 99.157127 -102.710800 -7.077363 +v 112.752754 -102.665260 -7.103669 +v 99.609573 -102.725800 -7.530644 +v 112.281433 -102.715607 -7.536579 +v 113.280121 -103.296547 -7.201065 +v 113.488785 -103.793900 -6.914021 +v 112.798103 -102.888779 -7.436486 +v 99.001900 -103.015198 -7.363509 +v 123.607086 -105.894508 -6.300029 +v 123.930862 -103.410545 -6.300029 +v 122.891365 -103.440079 -6.300029 +v 122.917824 -105.996483 -6.300029 +v 122.082375 -103.643394 -6.300029 +v 124.341850 -106.117165 -6.300029 +v 125.004021 -103.675987 -6.300029 +v 121.109894 -104.151802 -6.300029 +v 125.940239 -104.185684 -6.300029 +v 122.370323 -106.358299 -6.300029 +v 120.284874 -104.934319 -6.299974 +v 126.720154 -104.940269 -6.300029 +v 125.067200 -107.134468 -6.300030 +v 125.062706 -107.933044 -6.300030 +v 124.840096 -106.614677 -6.300029 +v 124.044334 -112.379829 -6.299971 +v 122.047325 -106.811668 -6.300029 +v 121.957108 -107.977531 -6.300030 +v 121.902435 -107.334229 -6.300030 +v 125.176231 -112.113785 -6.300033 +v 126.244125 -111.573906 -6.300033 +v 127.171951 -110.758118 -6.300034 +v 127.686363 -104.976646 -6.300030 +v 127.999123 -105.543640 -6.300030 +v 128.300034 -106.471367 -6.300030 +v 128.407745 -107.702271 -6.300030 +v 128.181396 -108.992409 -6.300033 +v 122.285065 -108.555832 -6.300030 +v 124.673141 -108.601311 -6.300033 +v 122.847336 -108.974190 -6.300034 +v 124.162331 -108.966446 -6.300034 +v 123.550743 -109.108284 -6.300034 +v 127.743515 -109.962273 -6.300034 +v 98.518402 -106.015022 -0.576808 +v 99.718506 -104.983116 -0.028731 +v 113.245491 -105.530182 -0.319623 +v 98.769402 -105.518837 -0.313582 +v 112.237511 -104.976295 -0.025104 +v 112.752716 -105.135696 -0.109857 +v 99.201920 -105.159698 -0.122616 +v 98.335167 -113.182594 -5.549920 +v 98.062172 -112.884262 -5.549552 +v 98.185387 -112.803619 -0.381866 +v 98.326126 -113.189362 -0.382180 +v 94.135887 -116.803902 -0.392826 +v 94.383286 -117.121971 -0.401478 +v 94.324425 -117.180733 -5.523123 +v 94.102478 -116.836937 -5.530604 +v 93.253868 -117.685486 -4.364363 +v 93.431343 -117.508011 -4.925447 +v 93.735924 -117.203400 -5.330145 +v 93.263680 -117.675674 -1.518235 +v 93.443596 -117.495735 -0.982359 +v 93.763214 -117.176125 -0.576032 +v 93.528664 -117.977074 -4.225070 +v 93.625305 -117.879730 -4.715205 +v 93.880737 -117.624275 -5.185385 +v 93.537170 -117.967857 -1.580292 +v 93.990219 -117.514809 -0.620049 +v 93.694748 -117.810280 -1.051726 +v -93.457199 107.408188 -5.899989 +v -92.471741 107.428665 -5.899989 +v -116.421928 107.690308 -5.899989 +v -117.723480 107.392021 -5.899989 +v -118.682686 107.451340 -5.899989 +v -91.678413 107.609406 -5.899989 +v -94.632759 107.721680 -5.899989 +v -119.602753 107.713234 -5.899989 +v -90.766449 108.051056 -5.899989 +v -88.072945 110.981140 -5.899985 +v -95.563309 108.288452 -5.899989 +v -89.881233 108.817245 -5.899989 +v -121.261696 108.937073 -5.899989 +v -120.566490 108.291306 -5.899989 +v -122.929337 110.965004 -5.899985 +v -115.358192 108.352219 -5.899989 +v -96.260963 108.936569 -5.899927 +v -114.685974 108.956573 -5.899958 +v -92.376839 110.017067 -5.899984 +v -116.716599 110.515991 -5.899984 +v -117.292595 110.051674 -5.899984 +v -117.972672 109.891693 -5.899984 +v -118.636246 110.019333 -5.899984 +v -116.453796 111.069145 -5.899984 +v -89.582787 108.977974 -5.899989 +v -116.394730 111.606445 -5.899683 +v -92.972641 109.891693 -5.899874 +v -89.007599 109.003036 -5.899989 +v -88.616379 109.230896 -5.899990 +v -88.273994 110.005592 -5.899982 +v -97.999992 108.986526 -5.899444 +v -104.266434 110.355560 -5.888364 +v -112.999992 108.982887 -5.896468 +v -106.771355 110.365898 -5.885510 +v -122.699768 109.924782 -5.899983 +v -121.959541 108.994751 -5.899990 +v -122.353432 109.196281 -5.899990 +v -93.636230 110.019333 -5.899706 +v -122.780365 111.516769 -5.899985 +v -91.868309 110.356567 -5.899985 +v -94.157387 110.387894 -5.899706 +v -119.157417 110.387932 -5.899984 +v -88.224861 111.581909 -5.899985 +v -91.525284 110.851791 -5.899985 +v -94.451607 110.806999 -5.899706 +v -119.481621 110.866241 -5.899985 +v -107.254250 110.957619 -5.896412 +v -117.217361 112.911865 -5.899669 +v -116.590553 112.297836 -5.899670 +v -117.942871 113.116211 -5.899650 +v -91.382301 111.522881 -5.899984 +v -94.611031 111.462395 -5.899826 +v -119.609612 111.556183 -5.899985 +v -91.590561 112.297852 -5.899985 +v -119.436722 112.228004 -5.899985 +v -122.915993 111.992317 -5.899990 +v -94.451820 112.203018 -5.899984 +v -92.291740 112.959991 -5.899984 +v -119.015717 112.747292 -5.899984 +v -118.545944 113.009422 -5.900004 +v -88.063522 112.029976 -5.899984 +v -120.575012 115.733574 -5.899984 +v -121.562607 114.962120 -5.899984 +v -122.832520 112.622887 -5.899985 +v -118.511703 116.430450 -5.899996 +v -112.999992 116.470177 -5.905325 +v -119.653870 116.178001 -5.899984 +v -89.627434 115.139854 -5.899984 +v -90.693741 115.899643 -5.899983 +v -94.015778 112.747238 -5.899984 +v -93.545959 113.009415 -5.899984 +v -91.705811 116.283203 -5.899983 +v -92.574860 116.438957 -5.899793 +v -88.303055 113.080490 -5.899984 +v -97.999992 116.450958 -5.900380 +v -122.418610 113.763077 -5.899984 +v -93.030785 113.108910 -5.899984 +v -88.770714 114.097679 -5.899984 +v -88.071281 112.023727 -6.249987 +v -88.353348 113.244545 -6.249987 +v -88.869331 114.238022 -6.249987 +v -89.526070 115.043114 -6.249987 +v -90.425079 115.733627 -6.249986 +v -91.346169 116.178009 -6.249986 +v -92.487869 116.430382 -6.249986 +v -88.300186 109.924904 -6.249987 +v -88.646561 109.196289 -6.249988 +v -88.066315 110.978760 -6.249987 +v -98.000145 111.329643 -1.306486 +v -98.000343 111.284821 -1.658780 +v -97.999992 116.446060 -0.036659 +v -97.999992 116.501801 0.318218 +v -97.999992 116.668297 -0.113920 +v -97.999992 116.999046 0.068039 +v -97.999428 116.804558 -0.382584 +v -97.992462 117.146606 -0.392939 +v -97.999992 116.449997 -6.249986 +v -97.999992 116.677109 -6.219506 +v -97.999992 116.628044 -5.859048 +v -97.999992 117.038368 -5.959882 +v -97.999771 116.804825 -5.589553 +v -97.988678 117.141571 -5.551567 +v -98.000267 108.964531 -6.242128 +v -98.000107 108.732391 -5.942806 +v -112.999786 108.967407 -6.242245 +v -98.552956 107.589096 -7.003625 +v -112.423355 107.587151 -7.004711 +v -98.025063 108.025566 -6.751427 +v -98.226402 107.753662 -6.908240 +v -112.991585 108.092934 -6.712529 +v -112.801086 107.766960 -6.900558 +v -94.578064 107.690315 -6.249988 +v -93.276512 107.392021 -6.249988 +v -119.566055 107.687584 -6.249988 +v -118.310516 107.399757 -6.249988 +v -92.073479 107.491287 -6.249988 +v -117.306091 107.453941 -6.249988 +v -116.367241 107.721672 -6.249988 +v -91.126602 107.847733 -6.249988 +v -88.187202 111.259911 -6.249987 +v -95.641525 108.352013 -6.249988 +v -89.738297 108.937073 -6.249988 +v -90.436714 108.288429 -6.249988 +v -120.641571 108.352051 -6.249988 +v -121.308395 108.958084 -6.249988 +v -122.928596 110.977837 -6.249987 +v -115.435402 108.289360 -6.249988 +v -122.796249 111.345139 -6.249987 +v -96.130859 108.835815 -6.249988 +v -114.891869 108.815964 -6.249988 +v -92.292458 110.042313 -6.249987 +v -94.082542 110.306168 -6.249987 +v -93.530800 109.985214 -6.249987 +v -93.027306 109.891693 -6.249987 +v -118.707375 110.051666 -6.249987 +v -94.474319 110.856720 -6.249987 +v -114.621017 108.966179 -6.249984 +v -96.413216 108.976440 -6.249709 +v -94.611168 111.539703 -6.249810 +v -104.237610 110.403954 -6.242070 +v -118.027336 109.891693 -6.249827 +v -89.040466 108.994743 -6.249988 +v -106.755104 110.442375 -6.233991 +v -107.157143 110.736473 -6.245662 +v -122.725990 110.005554 -6.249987 +v -121.992378 109.003029 -6.249988 +v -122.383606 109.230888 -6.249988 +v -117.363731 110.019341 -6.249716 +v -116.842575 110.387924 -6.249753 +v -119.283401 110.516006 -6.249987 +v -91.654900 110.608009 -6.249987 +v -103.869957 110.727264 -6.241818 +v -116.518379 110.866234 -6.249715 +v -119.601173 111.253990 -6.249987 +v -91.378632 111.421478 -6.249987 +v -116.392204 111.549171 -6.249715 +v -88.205940 111.620117 -6.249987 +v -122.813408 111.741768 -6.249987 +v -91.525772 112.149673 -6.249987 +v -118.519196 113.018822 -6.249987 +v -119.089600 112.699272 -6.249987 +v -119.515198 112.046059 -6.249987 +v -103.858253 112.262878 -6.245065 +v -91.830063 112.600189 -6.249987 +v -112.999992 116.454048 -6.250648 +v -94.484596 112.111603 -6.249987 +v -116.526878 112.151657 -6.249769 +v -92.337517 112.971985 -6.249987 +v -121.372597 115.139809 -6.249987 +v -120.306221 115.899666 -6.249986 +v -122.927307 112.003471 -6.249987 +v -122.173409 114.181870 -6.249987 +v -118.425499 116.438911 -6.249986 +v -119.294159 116.283211 -6.249986 +v -94.197571 112.573898 -6.249987 +v -122.700172 113.098145 -6.249987 +v -116.830055 112.600174 -6.249987 +v -93.708115 112.944855 -6.249987 +v -117.337502 112.971977 -6.249987 +v -93.057114 113.116203 -6.249987 +v -117.969193 113.108917 -6.249987 +v -112.999992 116.760338 -6.183825 +v -112.999992 117.041199 -5.942510 +v -113.007523 117.146599 -5.551701 +v -113.011307 117.141563 -0.393072 +v -112.999992 116.339027 0.301899 +v -112.999992 116.673340 0.277984 +v -112.999992 117.038368 0.015241 +v -112.999535 111.321297 -1.300562 +v -112.379631 108.968468 -0.092693 +v -98.475334 108.995598 -0.106952 +v -112.983459 109.462547 -0.349791 +v -112.744789 109.107712 -0.165509 +v -98.163330 109.205498 -0.216355 +v -98.008926 109.484711 -0.361415 +v -112.508896 108.828346 -0.414637 +v -98.518517 108.819817 -0.410019 +v -112.999886 111.295853 -1.667535 +v -98.008667 109.344498 -0.682835 +v -98.144615 109.057861 -0.534070 +v -112.845184 109.051636 -0.530834 +v -112.991425 109.329285 -0.675166 +v -112.999992 116.467468 -0.037616 +v -112.999992 116.730728 -0.166269 +v -113.000198 116.799858 -0.392486 +v -113.001457 116.798187 -5.550020 +v -113.000076 116.767227 -5.723131 +v -112.999992 108.716454 -5.952114 +v -98.519775 107.421898 -6.695710 +v -112.377480 107.405441 -6.705694 +v -98.206375 107.596001 -6.595117 +v -98.015335 107.880562 -6.430892 +v -112.752441 107.551208 -6.620988 +v -112.983795 107.890961 -6.425009 +v -97.743851 116.844315 -0.394769 +v -97.757713 116.838837 -5.549709 +v -96.479713 117.569489 -0.409993 +v -96.557098 117.929001 -0.439012 +v -96.648811 117.876091 -5.534465 +v -96.490608 117.563240 -5.534006 +v -96.005692 117.843430 -4.930008 +v -96.021057 117.834366 -0.914491 +v -96.195190 117.733711 -0.600994 +v -96.156540 117.756027 -5.314418 +v -96.188637 118.142052 -4.985723 +v -96.200172 118.135406 -0.874624 +v -96.338158 118.055328 -5.309988 +v -113.242294 116.838844 -0.394931 +v -113.256165 116.844322 -5.549870 +v -114.345245 117.872650 -0.409992 +v -114.550301 117.586845 -0.419719 +v -114.496002 117.555489 -5.539159 +v -114.411201 117.910744 -5.516488 +v -114.981857 117.836052 -5.015651 +v -114.822136 117.743729 -0.621010 +v -114.986725 117.838989 -0.947407 +v -114.796585 117.728981 -5.355307 +v -114.803696 118.137421 -0.913932 +v -114.685379 118.068916 -5.273161 +v -114.817238 118.145737 -4.962123 +v -114.629814 118.036835 -0.601007 +v -104.414108 112.413628 -6.139888 +v -106.482231 110.938232 -5.749270 +v -104.493355 110.933571 -5.759127 +v -106.487389 111.903282 -5.670944 +v -106.647697 111.906334 -5.724234 +v -106.769165 111.851471 -5.813412 +v -106.935722 111.982765 -6.094294 +v -106.504074 112.065399 -5.758055 +v -106.648102 111.083740 -5.728839 +v -106.477921 111.119072 -5.663718 +v -106.787575 111.172974 -5.830660 +v -106.873199 112.329819 -6.183705 +v -106.685463 112.454254 -6.183847 +v -104.519966 111.887238 -5.664809 +v -104.342880 111.889977 -5.727822 +v -104.230042 111.827873 -5.807755 +v -104.075012 111.899689 -6.067691 +v -104.480385 112.066589 -5.759784 +v -104.349289 111.098404 -5.724714 +v -104.515678 111.099098 -5.669219 +v -104.229538 111.144989 -5.815945 +v -104.067993 112.163719 -6.151033 +v -104.205994 112.368210 -6.162953 +v -107.128067 112.083672 -6.232297 +v -106.903862 112.594223 -6.247279 +v -106.689117 110.611526 -6.132488 +v -106.897377 110.766296 -6.152784 +v -107.098976 111.000710 -6.212734 +v -106.924095 111.044205 -6.072845 +v -104.342430 110.556915 -6.171640 +v -103.914062 111.960899 -6.203500 +v -104.219086 112.581245 -6.240262 +v -104.131752 110.705536 -6.157367 +v -104.038795 110.982742 -6.130045 +v -103.934410 111.046631 -6.192696 +v -104.480042 111.969444 -5.323241 +v -104.473381 110.699265 -5.496435 +v -106.513138 110.678482 -5.512131 +v -103.769928 112.022125 -5.892881 +v -106.568703 111.870361 -5.316419 +v -106.942986 111.905777 -5.491482 +v -107.224693 111.987534 -5.882084 +v -106.825523 112.077309 -5.472023 +v -106.452087 112.083336 -5.359232 +v -106.580963 112.237206 -5.450602 +v -106.785179 110.866623 -5.471889 +v -106.566093 110.942360 -5.358616 +v -107.039703 111.096970 -5.589523 +v -106.831940 111.129662 -5.421003 +v -106.589676 111.138077 -5.316360 +v -107.035713 112.458000 -5.887029 +v -107.183807 110.896088 -5.858757 +v -104.473587 110.902161 -5.371440 +v -104.436478 111.112213 -5.317396 +v -104.241524 111.926552 -5.386766 +v -103.979485 111.891624 -5.562956 +v -104.249046 112.156982 -5.466810 +v -104.518562 112.293533 -5.482383 +v -106.681541 112.655128 -5.889740 +v -107.048790 110.566238 -5.888335 +v -104.240997 110.857124 -5.468195 +v -104.020943 110.938721 -5.590680 +v -104.108810 111.138252 -5.449102 +v -103.897697 111.157433 -5.667879 +v -103.907387 112.365372 -5.887381 +v -104.220413 112.636398 -5.889463 +v -103.883896 110.655914 -5.886767 +v -103.767960 110.969543 -5.891033 +v 119.277084 106.393517 -4.899989 +v 95.566040 106.687584 -4.899989 +v 94.310516 106.399757 -4.899989 +v 118.311691 106.452644 -4.899989 +v 93.306091 106.453941 -4.899989 +v 120.321587 106.609413 -4.899989 +v 117.367218 106.721680 -4.899989 +v 92.367241 106.721672 -4.899989 +v 121.233490 107.051033 -4.899989 +v 123.923012 109.991776 -4.899984 +v 116.436707 107.288445 -4.899989 +v 122.126549 107.824242 -4.899989 +v 90.738297 107.937073 -4.899988 +v 91.436661 107.288467 -4.899989 +v 89.186546 110.257935 -4.899984 +v 96.641594 107.352066 -4.899989 +v 115.745979 107.930901 -4.899928 +v 97.130836 107.835800 -4.899989 +v 119.623154 109.017067 -4.899989 +v 95.283409 109.516006 -4.899988 +v 94.707375 109.051666 -4.899989 +v 94.027336 108.891693 -4.899989 +v 93.363731 109.019341 -4.899989 +v 95.601173 110.253990 -4.899852 +v 122.426277 107.978027 -4.899989 +v 97.413818 107.976685 -4.899984 +v 119.027367 108.891693 -4.899878 +v 122.994049 108.003273 -4.899989 +v 123.383987 108.229218 -4.899989 +v 123.754089 109.092621 -4.899990 +v 114.000000 107.986526 -4.899444 +v 107.734337 109.350510 -4.891824 +v 98.999992 107.982849 -4.896558 +v 105.343307 109.335587 -4.892531 +v 89.071800 109.991951 -4.899983 +v 89.259972 109.036934 -4.899990 +v 89.919495 108.015945 -4.899989 +v 89.572708 108.301605 -4.899989 +v 118.363785 109.019325 -4.899711 +v 120.196320 109.417709 -4.899988 +v 117.841614 109.387657 -4.899711 +v 92.842575 109.387924 -4.899990 +v 123.775154 110.582008 -4.899984 +v 117.508217 109.886246 -4.899704 +v 92.518379 109.866234 -4.899983 +v 120.556572 110.066063 -4.899984 +v 95.089607 111.699265 -4.899679 +v 94.057129 112.116211 -4.899740 +v 94.582771 111.991867 -4.899984 +v 95.515198 111.046059 -4.899679 +v 117.394417 110.483948 -4.899829 +v 92.392204 110.549171 -4.899984 +v 120.595520 110.678253 -4.899984 +v 89.206841 110.615959 -4.899984 +v 120.401939 111.315758 -4.899984 +v 117.470238 110.998016 -4.899930 +v 92.526878 111.151657 -4.899984 +v 92.830040 111.600159 -4.899984 +v 89.071106 111.024162 -4.900006 +v 119.708931 111.959755 -4.899984 +v 93.337494 111.971970 -4.900055 +v 123.936478 111.029953 -4.899984 +v 91.424995 114.733574 -4.899984 +v 90.526024 114.043068 -4.899984 +v 93.490334 115.430748 -4.900046 +v 98.999992 115.451912 -4.900729 +v 92.346130 115.178001 -4.899984 +v 122.082268 114.384392 -4.899960 +v 121.162155 114.963066 -4.899930 +v 117.766685 111.532646 -4.899930 +v 118.313545 111.963829 -4.899953 +v 120.294167 115.283203 -4.899930 +v 119.426048 115.438835 -4.899759 +v 108.013367 111.471786 -4.891539 +v 123.696945 112.080444 -4.899984 +v 89.289581 112.040268 -4.899984 +v 114.000000 115.451820 -4.901362 +v 122.764908 113.721687 -4.899984 +v 118.969223 112.108917 -4.899984 +v 123.301338 112.968239 -4.899984 +v 89.736198 113.044205 -4.899984 +v 123.928719 111.023720 -5.249987 +v 123.714645 112.026840 -5.249987 +v 123.285194 113.012062 -5.249986 +v 122.386742 114.138947 -5.249986 +v 121.121315 114.991249 -5.249986 +v 119.795052 115.405235 -5.249986 +v 123.474556 108.364761 -5.249987 +v 123.831955 109.388870 -5.249987 +v 123.924683 110.000000 -5.249987 +v 113.999931 110.329643 -0.306486 +v 113.999680 110.284821 -0.658780 +v 113.994652 108.515915 0.622359 +v 114.000000 115.446060 0.963341 +v 114.000000 115.501793 1.318218 +v 114.000000 115.668289 0.886080 +v 114.000000 115.999046 1.068036 +v 114.000565 115.804558 0.617415 +v 114.007538 116.146606 0.607061 +v 114.000000 115.449997 -5.249986 +v 114.000000 115.677109 -5.219506 +v 114.000000 115.720963 -4.791820 +v 114.000000 116.038368 -4.959881 +v 114.000206 115.799850 -4.552153 +v 114.011314 116.141571 -4.551567 +v 113.999580 107.963921 -5.242334 +v 113.999886 107.732391 -4.942805 +v 99.000084 107.967079 -5.242357 +v 113.376526 106.581184 -6.008274 +v 99.599998 106.584969 -6.006034 +v 113.968620 107.002335 -5.764848 +v 113.689171 106.688217 -5.946023 +v 99.298325 106.698257 -5.940228 +v 99.022987 107.017281 -5.756165 +v 117.096085 106.862488 -5.249987 +v 119.182930 106.390770 -5.249988 +v 92.421928 106.690308 -5.249988 +v 93.723480 106.392021 -5.249988 +v 117.969620 106.519394 -5.249988 +v 94.682686 106.451340 -5.249988 +v 120.519264 106.663666 -5.249988 +v 95.602730 106.713234 -5.249988 +v 123.812775 110.259972 -5.249987 +v 116.358482 107.352013 -5.249987 +v 122.270584 107.942039 -5.249987 +v 121.564560 107.289337 -5.249987 +v 91.358437 107.352028 -5.249987 +v 90.691597 107.958092 -5.249987 +v 89.119019 110.065613 -5.249987 +v 96.566505 107.291321 -5.249987 +v 115.869087 107.835846 -5.249987 +v 97.131416 107.838875 -5.249987 +v 119.707535 109.042313 -5.249987 +v 117.769287 109.460953 -5.249987 +v 118.294586 109.050919 -5.249987 +v 118.972694 108.891693 -5.249987 +v 93.292603 109.051674 -5.249987 +v 117.470222 110.002022 -5.249987 +v 115.579910 107.977150 -5.249862 +v 117.394417 110.516022 -5.249832 +v 97.415993 107.973610 -5.249982 +v 107.743530 109.398308 -5.242226 +v 93.972672 108.891693 -5.249852 +v 123.086090 108.019096 -5.249987 +v 105.275436 109.373375 -5.244706 +v 89.160904 109.425552 -5.249987 +v 89.871613 108.037392 -5.249987 +v 89.507072 108.394264 -5.249987 +v 94.636246 109.019333 -5.249716 +v 95.157433 109.387939 -5.249753 +v 92.716599 109.515991 -5.249987 +v 120.393303 109.669777 -5.249987 +v 108.129616 109.768715 -5.237755 +v 95.481613 109.866226 -5.249714 +v 92.453796 110.069145 -5.249987 +v 120.611160 110.460304 -5.249987 +v 95.609612 110.556190 -5.249714 +v 92.394730 110.606445 -5.249987 +v 123.794052 110.620071 -5.249987 +v 89.209145 110.594025 -5.249987 +v 120.451797 111.203079 -5.249987 +v 93.291733 111.959991 -5.249987 +v 92.590561 111.297844 -5.249987 +v 117.489182 111.052124 -5.249907 +v 89.069229 111.041512 -5.249987 +v 98.999992 115.454544 -5.250670 +v 95.436722 111.227997 -5.249831 +v 120.011887 111.753136 -5.249987 +v 119.549400 112.008522 -5.249987 +v 90.627380 114.139801 -5.249986 +v 91.693764 114.899658 -5.249986 +v 89.826332 113.181335 -5.249986 +v 93.577652 115.439323 -5.249986 +v 92.705795 115.283195 -5.249986 +v 117.802475 111.573959 -5.249987 +v 95.015732 111.747284 -5.249987 +v 89.335381 112.183235 -5.249987 +v 118.291832 111.944839 -5.249987 +v 94.545921 112.009430 -5.249987 +v 118.942879 112.116211 -5.249987 +v 94.030800 112.108917 -5.249987 +v 98.999992 115.760338 -5.183825 +v 98.999992 116.041199 -4.942509 +v 98.992462 116.146606 -4.551701 +v 98.988686 116.141571 0.606927 +v 98.999992 115.339027 1.301899 +v 98.999992 115.673340 1.277982 +v 98.999992 116.038376 1.015234 +v 99.000198 110.321304 -0.300562 +v 99.479935 107.988045 0.896983 +v 113.517632 107.989532 0.896202 +v 99.044327 108.353836 0.706629 +v 113.863274 108.231628 0.770063 +v 99.441933 107.839493 0.579550 +v 113.418991 107.810287 0.594986 +v 99.000038 110.295853 -0.667536 +v 113.986069 108.310341 0.334863 +v 113.783447 107.981194 0.505796 +v 99.029411 108.226479 0.378272 +v 98.999992 115.467468 0.962384 +v 98.999992 115.730728 0.833731 +v 98.999786 115.799858 0.607514 +v 98.999428 115.804550 -4.562055 +v 98.999992 115.652847 -4.845448 +v 98.999992 107.716454 -4.952114 +v 113.478729 106.421669 -5.695842 +v 99.479515 106.426086 -5.693498 +v 113.783806 106.587341 -5.600120 +v 113.984993 106.875946 -5.433554 +v 99.040802 106.793175 -5.481410 +v 114.256142 115.844307 0.605231 +v 114.242256 115.838829 -4.549708 +v 115.458786 116.533997 0.599046 +v 115.303352 116.848503 0.594521 +v 115.283752 116.837181 -4.543685 +v 115.548958 116.586067 -4.525201 +v 115.967522 116.827782 0.130243 +v 115.728035 116.689400 0.477969 +v 115.986710 116.838974 -4.003286 +v 115.813538 116.738754 -4.333748 +v 115.798119 117.134293 -4.057592 +v 115.805977 117.139053 0.088237 +v 115.572716 117.003860 0.461469 +v 115.556709 116.994629 -4.419199 +v 98.757683 115.838844 0.605069 +v 98.743820 115.844322 -4.549870 +v 97.716278 116.837219 0.599046 +v 97.519547 116.546524 0.594282 +v 97.440727 116.591995 -4.526853 +v 97.567131 116.923210 -4.509143 +v 97.188873 116.737366 0.407748 +v 97.007202 116.842552 0.009389 +v 97.041718 116.822418 -4.131379 +v 97.188591 117.141930 0.039357 +v 97.200897 117.134979 -4.079837 +v 97.397346 117.021149 0.440425 +v 107.586189 111.413033 -5.139513 +v 105.517776 109.938225 -4.749277 +v 107.506638 109.933578 -4.759125 +v 105.515610 110.905540 -4.671377 +v 105.329254 110.885361 -4.729440 +v 105.227264 110.860260 -4.819574 +v 105.063942 110.942734 -5.089035 +v 105.492996 111.066559 -4.759372 +v 105.351906 110.083733 -4.728831 +v 105.522079 110.119072 -4.663718 +v 105.212433 110.172974 -4.830655 +v 105.090736 111.277710 -5.182544 +v 105.289825 111.425751 -5.166357 +v 107.480034 110.887238 -4.664808 +v 107.657120 110.889969 -4.727819 +v 107.769951 110.827881 -4.807754 +v 107.976868 110.918137 -5.131878 +v 107.519485 111.066910 -4.759967 +v 107.670860 110.114128 -4.729780 +v 107.481453 110.096718 -4.669746 +v 107.772728 110.139778 -4.819564 +v 107.931999 111.163704 -5.151029 +v 107.793999 111.368225 -5.162958 +v 104.871925 111.083664 -5.232297 +v 105.165283 111.584297 -5.243751 +v 105.321037 109.564156 -5.168948 +v 105.174271 109.708855 -5.126842 +v 104.867050 109.734520 -5.241574 +v 104.938721 110.034477 -5.187284 +v 105.075905 110.044197 -5.072843 +v 108.165199 111.197701 -5.242495 +v 107.781578 111.582031 -5.240498 +v 107.706375 109.580956 -5.160128 +v 107.912750 109.795784 -5.151037 +v 107.937347 110.100189 -5.084785 +v 107.520111 110.969406 -4.323245 +v 107.526360 109.699219 -4.496430 +v 105.482056 109.681274 -4.510768 +v 108.196640 110.972534 -4.851724 +v 104.779068 111.014053 -4.882636 +v 105.427185 110.870232 -4.316616 +v 105.175392 110.908806 -4.418930 +v 104.970909 110.892014 -4.579121 +v 105.519333 111.092667 -4.364466 +v 105.248383 111.152390 -4.464416 +v 105.505302 111.314125 -4.503884 +v 105.214134 109.870827 -4.470306 +v 105.433907 109.942360 -4.358616 +v 104.959518 110.094780 -4.591235 +v 105.168060 110.129669 -4.420999 +v 105.410324 110.138077 -4.316359 +v 104.925430 111.389008 -4.884177 +v 105.247055 111.639610 -4.887202 +v 107.526413 109.902161 -4.371441 +v 107.563560 110.112267 -4.317392 +v 107.824005 110.858505 -4.408923 +v 108.072060 110.865387 -4.627129 +v 107.873337 111.071869 -4.500808 +v 107.671715 111.185608 -4.450884 +v 107.475281 111.289795 -4.479084 +v 105.022705 109.493622 -4.887904 +v 104.846115 109.765907 -4.884669 +v 104.769356 110.036293 -4.887146 +v 107.817123 109.886459 -4.480720 +v 108.074448 110.121819 -4.631178 +v 107.852768 110.164177 -4.424860 +v 107.720177 111.648094 -4.889249 +v 108.228195 111.130844 -4.894429 +v 108.065651 109.590736 -4.887218 +v 108.229324 109.983955 -4.889183 +vn 0.9920 0.0812 -0.0970 +vn 0.6018 -0.4497 -0.6600 +vn 0.9337 0.2674 -0.2381 +vn 0.9731 0.0429 -0.2264 +vn 0.9485 0.1342 -0.2870 +vn 0.9469 0.2018 -0.2504 +vn 0.9710 0.1956 -0.1376 +vn 0.9804 0.1878 -0.0594 +vn 0.9762 0.2145 -0.0332 +vn 0.5118 0.8590 -0.0140 +vn 0.9281 0.0167 -0.3721 +vn 0.8325 -0.1217 -0.5406 +vn 0.8513 0.0321 -0.5237 +vn 0.7272 -0.3517 -0.5895 +vn 0.7791 -0.4597 -0.4263 +vn 0.7649 -0.5738 -0.2927 +vn 0.5350 -0.8094 -0.2422 +vn 0.9657 0.0398 -0.2564 +vn 0.9332 0.2965 -0.2032 +vn 0.9457 0.1807 -0.2700 +vn -0.9906 -0.0633 0.1214 +vn -0.9910 -0.1074 0.0803 +vn -0.3957 -0.0295 -0.9179 +vn -0.9911 -0.0264 0.1303 +vn -0.9924 -0.1060 0.0619 +vn -0.4882 -0.1599 -0.8580 +vn -0.7682 0.6138 0.1818 +vn -0.3601 -0.9007 0.2431 +vn -0.6369 -0.3816 -0.6698 +vn -0.9466 -0.0517 -0.3182 +vn -0.4449 0.2629 -0.8561 +vn -0.9874 -0.1369 0.0794 +vn -0.9897 -0.0444 0.1363 +vn -0.3555 -0.2831 -0.8908 +vn -1.0000 0.0046 0.0082 +vn -0.9109 0.3685 -0.1854 +vn -0.9745 0.0170 -0.2238 +vn -0.9829 0.0783 -0.1667 +vn -0.9783 0.1467 -0.1462 +vn -0.9817 0.1699 -0.0861 +vn -0.4923 0.8653 0.0941 +vn -0.9968 -0.0521 0.0598 +vn -0.9575 -0.0683 -0.2801 +vn -0.2931 0.5239 -0.7998 +vn -0.7047 -0.4149 -0.5756 +vn -0.7850 -0.5208 -0.3354 +vn -0.5611 -0.7657 -0.3143 +vn -0.9785 0.1906 -0.0789 +vn -0.9512 0.0496 -0.3047 +vn -0.9325 0.2992 -0.2024 +vn -0.9728 0.1206 -0.1976 +vn 0.9994 -0.0268 0.0214 +vn 0.9935 -0.0600 0.0970 +vn 0.9586 0.2737 -0.0784 +vn 0.9946 -0.0284 0.1003 +vn 0.9934 -0.0908 0.0699 +vn 0.7472 -0.4807 -0.4588 +vn 0.7506 0.5881 0.3011 +vn 0.4485 -0.8426 0.2982 +vn 0.2496 -0.7543 -0.6072 +vn 0.1466 -0.5754 -0.8046 +vn 0.9850 -0.0302 0.1699 +vn -0.5917 0.8045 0.0517 +vn -0.9461 0.3170 -0.0665 +vn -0.2560 0.8676 -0.4262 +vn 0.4510 0.8110 -0.3727 +vn 0.5618 0.8259 -0.0487 +vn 0.0839 0.2262 -0.9705 +vn 0.5987 0.7874 -0.1466 +vn 0.0583 0.1160 -0.9915 +vn 0.1382 0.1175 -0.9834 +vn -0.2658 0.5934 -0.7598 +vn -0.8802 0.4741 0.0229 +vn 0.8848 0.4654 0.0229 +vn -0.9732 0.1695 -0.1557 +vn 0.2283 0.0571 -0.9719 +vn 0.9956 0.0559 0.0753 +vn -0.4148 0.5956 -0.6879 +vn -0.9714 -0.2293 -0.0613 +vn 0.1380 -0.0164 -0.9903 +vn 0.9071 -0.4157 -0.0662 +vn -0.6685 0.1430 -0.7298 +vn -0.7699 -0.6350 -0.0633 +vn 0.2452 -0.1952 -0.9496 +vn 0.6687 -0.7413 -0.0574 +vn -0.6375 -0.2275 -0.7361 +vn -0.4299 -0.8988 -0.0853 +vn 0.3558 -0.5267 -0.7721 +vn 0.3764 -0.9224 -0.0865 +vn -0.2663 -0.5080 -0.8192 +vn -0.4096 -0.8924 -0.1896 +vn 0.3915 -0.7531 -0.5288 +vn -0.1692 -0.8725 -0.4583 +vn 0.0079 -0.9954 0.0950 +vn -0.1047 -0.4505 -0.8866 +vn -0.0106 -0.9752 0.2209 +vn 0.0806 -0.9950 -0.0583 +vn 0.1753 -0.9845 0.0032 +vn 0.1231 -0.9806 0.1526 +vn -0.8554 -0.1082 -0.5066 +vn -0.9487 -0.3148 -0.0308 +vn -0.6724 0.2859 -0.6827 +vn -0.7483 0.2942 -0.5946 +vn -0.8892 -0.2576 -0.3781 +vn -0.6010 0.2199 -0.7684 +vn -0.9055 0.4229 0.0352 +vn -0.0937 0.0142 -0.9955 +vn -0.5878 0.6531 -0.4774 +vn -0.9004 -0.3545 -0.2523 +vn -0.5437 -0.1017 -0.8331 +vn -0.7317 -0.6601 0.1699 +vn -0.9432 0.3271 -0.0574 +vn -0.9660 0.1875 -0.1779 +vn -0.8132 -0.3955 -0.4270 +vn -0.3036 -0.5213 -0.7976 +vn -0.6085 -0.6356 -0.4750 +vn -0.6251 0.2255 -0.7473 +vn -0.9242 -0.3819 0.0065 +vn -0.9871 0.0371 -0.1558 +vn -0.3262 0.1708 -0.9297 +vn -0.9894 -0.0399 -0.1393 +vn -0.9874 -0.0305 -0.1554 +vn 0.9925 -0.1221 -0.0114 +vn 0.8552 -0.1387 -0.4994 +vn 0.8017 0.1510 -0.5784 +vn 0.7183 0.4254 -0.5505 +vn 0.8891 -0.2646 -0.3735 +vn 0.7702 0.6137 0.1737 +vn 0.9876 -0.1528 -0.0353 +vn 0.9848 -0.1304 -0.1144 +vn 0.8989 -0.3608 -0.2485 +vn 0.4511 0.7410 -0.4974 +vn 0.9859 -0.1098 -0.1265 +vn 0.9529 0.3019 -0.0278 +vn 0.2837 0.8082 -0.5162 +vn 0.9097 -0.4088 -0.0736 +vn 0.8473 -0.4139 -0.3328 +vn 0.0844 0.3604 -0.9290 +vn 0.0606 -0.8022 -0.5940 +vn 0.9936 -0.0004 -0.1127 +vn 0.4029 0.0688 -0.9127 +vn 0.6895 -0.5516 -0.4693 +vn 0.9848 0.0253 -0.1716 +vn 0.9900 0.0720 -0.1212 +vn -0.3844 0.4514 -0.8053 +vn -0.9877 0.1561 -0.0037 +vn -0.5852 0.8098 -0.0433 +vn -0.8012 -0.5853 -0.1242 +vn -0.7283 0.3673 -0.5785 +vn -0.9885 -0.1409 -0.0548 +vn -0.4707 0.7335 -0.4903 +vn -0.9351 0.3488 -0.0632 +vn -0.9809 0.1280 -0.1461 +vn -0.9887 -0.1100 -0.1021 +vn -0.0479 0.0483 -0.9977 +vn -0.0496 -0.3698 -0.9278 +vn -0.8137 -0.5811 -0.0178 +vn -0.9876 0.0341 -0.1532 +vn -0.2561 -0.4032 -0.8785 +vn -0.9878 -0.0326 -0.1521 +vn -0.0472 0.0666 -0.9967 +vn -0.0346 0.2861 -0.9576 +vn -0.0487 0.4822 -0.8747 +vn -0.0612 0.6733 -0.7368 +vn -0.0750 0.8548 -0.5135 +vn -0.9252 0.1862 0.3307 +vn -0.0703 0.9962 -0.0524 +vn -0.7411 0.4204 -0.5235 +vn -0.0446 0.9802 -0.1932 +vn -0.0370 0.0385 -0.9986 +vn 0.0020 0.9298 -0.3681 +vn 0.0106 0.7624 -0.6470 +vn 0.0141 0.5126 -0.8585 +vn -0.0301 0.2692 -0.9626 +vn -0.3306 -0.2545 -0.9088 +vn -0.3960 -0.1019 -0.9126 +vn -0.4688 0.0615 -0.8812 +vn -0.4959 0.2868 -0.8196 +vn -0.4387 0.4949 -0.7500 +vn -0.4951 0.7891 -0.3637 +vn -0.9761 0.1766 -0.1267 +vn -0.1406 0.9763 -0.1648 +vn -0.1290 0.0492 -0.9904 +vn -0.0382 0.9345 -0.3540 +vn -0.0060 0.8080 -0.5891 +vn -0.0205 0.6531 -0.7570 +vn 0.0759 0.4843 -0.8716 +vn 0.0071 0.3211 -0.9470 +vn -0.0150 0.7617 -0.6478 +vn 0.1378 0.0835 -0.9869 +vn 0.3345 0.3922 -0.8569 +vn 0.2040 -0.4134 -0.8874 +vn 0.8063 0.5671 0.1681 +vn 0.3041 -0.2309 -0.9242 +vn 0.5791 0.7499 0.3198 +vn 0.1265 0.7096 -0.6932 +vn 0.1555 0.7933 -0.5887 +vn 0.0542 0.9956 -0.0771 +vn -0.0003 0.9540 -0.2999 +vn -0.0084 0.8187 -0.5742 +vn -0.0133 0.5931 -0.8050 +vn 0.0299 0.3360 -0.9414 +vn 0.1889 0.0388 -0.9812 +vn -0.0295 0.1056 -0.9940 +vn -0.0074 -0.3114 -0.9503 +vn -0.0808 -0.5183 -0.8514 +vn -0.1392 -0.7378 -0.6605 +vn 0.0072 0.0535 -0.9985 +vn -0.7423 -0.4666 -0.4808 +vn -0.0198 -0.3379 -0.9410 +vn 0.0304 0.1613 -0.9864 +vn 0.3301 -0.0433 -0.9430 +vn 0.3403 0.0606 -0.9384 +vn -0.3636 -0.4013 -0.8407 +vn 0.4200 -0.6231 -0.6598 +vn 0.5694 -0.2176 -0.7928 +vn 0.2530 0.1935 -0.9479 +vn -0.1868 0.0902 -0.9782 +vn -0.2151 -0.0731 -0.9738 +vn 0.4336 0.0121 -0.9010 +vn 0.5718 -0.2655 -0.7762 +vn 0.6814 -0.4392 -0.5855 +vn -0.5514 -0.4797 -0.6826 +vn -0.8204 -0.4581 -0.3423 +vn -0.2729 -0.7005 -0.6594 +vn 0.2794 -0.5995 -0.7500 +vn 0.9771 -0.0909 -0.1923 +vn -0.3305 0.5979 -0.7303 +vn 0.2651 0.0849 -0.9605 +vn -0.7049 -0.3303 0.6277 +vn -0.2518 -0.5613 0.7884 +vn 0.0467 -0.5191 0.8534 +vn 0.4282 -0.5843 -0.6894 +vn -0.4065 -0.0544 0.9121 +vn -0.1843 -0.0101 0.9828 +vn 0.6804 -0.4921 -0.5430 +vn 0.4645 -0.7963 0.3875 +vn -0.6589 -0.7150 0.2337 +vn 0.3565 0.0037 0.9343 +vn 0.7057 -0.4267 -0.5655 +vn 0.0161 -0.0763 0.9970 +vn 0.6101 -0.4849 0.6266 +vn -0.2430 0.0437 0.9690 +vn 0.0186 -0.1041 0.9944 +vn -0.6878 -0.0115 0.7258 +vn 0.0396 -0.9992 0.0068 +vn -0.4970 -0.4408 -0.7475 +vn 0.1224 -0.9814 0.1476 +vn -0.3535 -0.4946 0.7940 +vn 0.2330 -0.8638 0.4467 +vn 0.3826 0.0143 0.9238 +vn 0.7930 0.0262 0.6086 +vn -0.8614 -0.1530 0.4843 +vn -0.5416 0.1990 0.8168 +vn 0.0190 -0.7015 0.7124 +vn -0.8469 -0.2367 0.4763 +vn 0.6602 -0.7499 0.0418 +vn -0.3824 -0.3381 0.8600 +vn 0.0359 -0.9967 -0.0728 +vn -0.0190 -0.4913 -0.8708 +vn 0.6076 -0.5349 -0.5871 +vn -0.1445 -0.6796 -0.7192 +vn 0.7694 -0.5848 -0.2570 +vn 0.0791 -0.9922 0.0966 +vn -0.0741 -0.9917 0.1055 +vn -0.0939 -0.9916 0.0889 +vn 0.0791 -0.9937 0.0795 +vn -0.0983 -0.0488 0.9940 +vn 0.0889 -0.0424 0.9951 +vn 0.0011 0.5922 0.8058 +vn 0.1951 0.7562 0.6246 +vn 0.1708 0.9806 -0.0967 +vn 0.1946 0.9708 -0.1406 +vn 0.9714 0.1605 -0.1751 +vn 0.7800 0.4934 -0.3849 +vn 0.7548 0.4782 -0.4490 +vn 0.6213 -0.4462 -0.6441 +vn 0.6922 0.0628 -0.7190 +vn 0.9919 -0.1028 -0.0746 +vn 0.7951 0.6012 -0.0802 +vn 0.9854 -0.1471 -0.0860 +vn 0.7515 0.1291 -0.6470 +vn -0.5026 -0.8027 -0.3210 +vn -0.7700 0.5639 -0.2986 +vn 0.1552 0.7647 -0.6255 +vn 0.0001 -0.8577 -0.5141 +vn 0.1048 0.8920 -0.4397 +vn 0.0132 -0.6558 -0.7548 +vn -0.3474 0.8939 -0.2832 +vn -0.6192 0.5576 -0.5529 +vn -0.1386 0.8681 -0.4766 +vn -0.2935 -0.9067 -0.3028 +vn -0.2088 -0.8870 -0.4120 +vn -0.5285 -0.7945 -0.2992 +vn -0.7378 0.5897 -0.3285 +vn 0.0433 0.6882 -0.7242 +vn -0.1319 -0.9087 -0.3960 +vn -0.4585 0.5577 -0.6919 +vn 0.0391 -0.7506 -0.6596 +vn -0.1856 -0.9177 -0.3513 +vn 0.0090 0.9656 -0.2598 +vn -0.1594 -0.8743 -0.4585 +vn -0.3534 0.5757 -0.7374 +vn 0.4463 0.8777 -0.1743 +vn 0.7802 -0.6250 0.0260 +vn 0.2449 0.9441 -0.2209 +vn 0.1224 0.9572 -0.2623 +vn -0.4905 0.5999 -0.6321 +vn -0.2384 0.8317 -0.5015 +vn 0.3054 -0.9283 -0.2122 +vn 0.1525 -0.9549 -0.2549 +vn 0.0760 -0.9547 -0.2877 +vn -0.3933 -0.8687 -0.3012 +vn -0.3055 -0.8536 -0.4219 +vn -0.2623 -0.7708 -0.5805 +vn -0.0903 0.9604 -0.2637 +vn 0.1725 0.9556 -0.2389 +vn -0.3595 0.9319 -0.0488 +vn 0.2061 0.9783 -0.0191 +vn -0.9638 0.1520 -0.2190 +vn -0.3195 -0.8734 -0.3676 +vn 0.9457 -0.2205 -0.2389 +vn 0.9287 0.3031 -0.2135 +vn 0.2658 0.9241 -0.2746 +vn 0.1868 0.8580 -0.4785 +vn 0.2318 0.7231 -0.6506 +vn 0.2471 0.6002 -0.7607 +vn 0.2162 0.4633 -0.8594 +vn 0.1954 0.2725 -0.9421 +vn 0.3193 0.1942 -0.9276 +vn 0.2004 0.3560 -0.9127 +vn 0.1926 0.4902 -0.8501 +vn 0.2058 0.6339 -0.7455 +vn 0.2500 0.7263 -0.6403 +vn 0.2501 0.8159 -0.5214 +vn 0.1950 0.8934 -0.4047 +vn 0.2937 0.9173 -0.2691 +vn 0.8270 0.0315 -0.5614 +vn 0.4943 0.0604 -0.8672 +vn 0.7208 0.6383 -0.2703 +vn 0.6000 0.7923 -0.1103 +vn 0.8366 0.5244 -0.1586 +vn 0.5952 0.7158 -0.3652 +vn 0.5603 0.6635 -0.4958 +vn 0.8844 0.3440 -0.3155 +vn 0.6521 0.4920 -0.5768 +vn 0.8799 0.2057 -0.4284 +vn 0.6119 0.3778 -0.6949 +vn 0.8046 0.1536 -0.5736 +vn 0.5483 0.2411 -0.8007 +vn 0.5372 0.8366 -0.1073 +vn 0.8134 0.5717 -0.1071 +vn 0.6838 0.2178 -0.6964 +vn 0.7416 0.0303 -0.6702 +vn 0.6115 0.2834 -0.7387 +vn 0.6240 0.4357 -0.6487 +vn 0.6289 0.5508 -0.5487 +vn 0.6932 0.5633 -0.4497 +vn 0.6681 0.6813 -0.2991 +vn 0.6036 0.7192 -0.3441 +vn 0.1931 0.7944 -0.5759 +vn -0.3405 0.7231 -0.6010 +vn 0.0589 0.5723 -0.8180 +vn 0.0723 0.4941 -0.8664 +vn 0.9910 -0.0098 -0.1333 +vn 0.9869 0.0205 -0.1601 +vn 0.5535 0.7889 -0.2670 +vn 0.5841 0.5781 -0.5698 +vn -0.4374 0.8535 -0.2832 +vn -0.7218 0.6326 -0.2808 +vn 0.0816 -0.9951 -0.0563 +vn -0.2930 -0.9496 -0.1118 +vn 0.9867 -0.1623 -0.0133 +vn 0.7870 0.5924 0.1721 +vn 0.9859 -0.1097 -0.1264 +vn 0.9222 0.3852 -0.0343 +vn 0.6309 -0.6752 -0.3823 +vn 0.2747 0.1901 -0.9425 +vn 0.3086 -0.4397 -0.8435 +vn 0.9936 -0.0008 -0.1131 +vn 0.8547 0.0054 -0.5190 +vn 0.9848 0.0253 -0.1718 +vn 0.9901 0.0720 -0.1208 +vn -0.9701 -0.2416 -0.0245 +vn -0.6725 0.2859 -0.6827 +vn -0.9054 0.4231 0.0347 +vn -0.0938 0.0142 -0.9955 +vn -0.9629 0.2657 -0.0464 +vn -0.9660 0.1875 -0.1778 +vn -0.8132 -0.3955 -0.4269 +vn -0.0520 0.2346 -0.9707 +vn -0.9242 -0.3818 0.0068 +vn -0.9871 0.0370 -0.1559 +vn -0.1178 0.1852 -0.9756 +vn -0.9896 -0.0312 -0.1406 +vn 0.9958 0.0904 0.0124 +vn 0.8786 -0.4701 -0.0840 +vn 0.9085 0.4160 -0.0386 +vn 0.0868 0.1111 -0.9900 +vn 0.6318 -0.5678 -0.5277 +vn 0.7987 0.5674 0.2002 +vn 0.0436 0.3583 -0.9326 +vn 0.5820 0.7500 0.3143 +vn 0.1593 0.7164 -0.6793 +vn 0.1968 0.8005 -0.5662 +vn 0.0592 0.9952 -0.0773 +vn 0.2400 0.7604 -0.6034 +vn 0.0435 0.1573 -0.9866 +vn -0.0002 0.9540 -0.2999 +vn -0.0085 0.8187 -0.5742 +vn -0.0131 0.5931 -0.8050 +vn 0.0298 0.3361 -0.9414 +vn 0.6001 0.7241 -0.3398 +vn 0.9670 -0.0701 -0.2450 +vn 0.5738 0.8182 -0.0364 +vn 0.3820 0.6362 -0.6703 +vn 0.4795 0.3998 -0.7811 +vn 0.2756 0.8529 -0.4434 +vn 0.4429 0.8965 -0.0122 +vn 0.8382 0.3940 -0.3772 +vn 0.1939 0.1584 -0.9681 +vn 0.0454 0.9473 -0.3171 +vn 0.0395 0.8369 -0.5460 +vn 0.0056 0.6306 -0.7761 +vn -0.0095 0.3820 -0.9241 +vn 0.0208 0.7414 -0.6708 +vn -0.1385 0.0709 -0.9878 +vn -0.7392 0.4203 -0.5262 +vn -0.0419 0.1875 -0.9814 +vn -0.2726 -0.2717 -0.9230 +vn -0.3283 -0.1469 -0.9331 +vn -0.3593 0.0082 -0.9332 +vn -0.3112 0.2755 -0.9095 +vn -0.5539 0.6343 0.5393 +vn -0.1207 0.8477 -0.5165 +vn 0.0021 0.9298 -0.3681 +vn 0.0104 0.7625 -0.6469 +vn 0.0144 0.5126 -0.8585 +vn -0.1436 0.0856 -0.9859 +vn -0.1883 0.9562 -0.2243 +vn 0.9683 -0.0556 0.2436 +vn 0.8507 -0.0899 0.5179 +vn 0.5787 -0.0620 0.8132 +vn -0.2671 -0.7907 -0.5508 +vn 0.3518 -0.0874 0.9320 +vn -0.3262 -0.6026 -0.7283 +vn -0.1064 -0.7898 -0.6040 +vn 0.1262 -0.4981 -0.8579 +vn -0.2254 -0.5350 -0.8142 +vn 0.0109 -0.3728 -0.9279 +vn -0.3469 -0.6102 -0.7122 +vn -0.3483 0.9321 -0.0991 +vn -0.1471 0.9833 -0.1070 +vn 0.5051 0.8427 -0.1866 +vn 0.7700 -0.5639 -0.2986 +vn -0.0209 0.7682 -0.6399 +vn -0.0333 -0.8501 -0.5256 +vn -0.0132 0.6558 -0.7548 +vn -0.1382 -0.9349 -0.3268 +vn 0.2935 0.9067 -0.3028 +vn 0.2087 0.8870 -0.4120 +vn 0.3474 -0.8939 -0.2832 +vn 0.6192 -0.5576 -0.5529 +vn 0.1386 -0.8681 -0.4766 +vn -0.8577 -0.2894 -0.4249 +vn 0.5320 0.8269 -0.1824 +vn 0.7378 -0.5897 -0.3285 +vn 0.3094 0.7999 -0.5142 +vn -0.0582 -0.7687 -0.6370 +vn -0.0390 0.7506 -0.6596 +vn 0.4585 -0.5577 -0.6919 +vn 0.3236 -0.3294 -0.8870 +vn 0.1856 0.9177 -0.3513 +vn 0.2874 0.6812 -0.6733 +vn 0.3534 -0.5757 -0.7374 +vn -0.4463 -0.8777 -0.1743 +vn -0.7802 0.6250 0.0260 +vn -0.3054 0.9283 -0.2122 +vn -0.1525 0.9549 -0.2549 +vn -0.0760 0.9547 -0.2877 +vn 0.3933 0.8687 -0.3012 +vn 0.3055 0.8536 -0.4219 +vn 0.2623 0.7708 -0.5805 +vn -0.2448 -0.9441 -0.2209 +vn -0.1224 -0.9572 -0.2623 +vn 0.4905 -0.5999 -0.6321 +vn 0.2384 -0.8317 -0.5015 +vn -0.2144 0.9271 -0.3074 +vn 0.2796 0.9206 -0.2725 +vn -0.2872 0.9578 0.0099 +vn 0.1571 0.9865 -0.0457 +vn 0.9798 -0.1557 -0.1253 +vn -0.9777 0.1621 -0.1335 +vn -0.9031 -0.2745 -0.3303 +vn -0.1535 0.9497 -0.2731 +vn -0.2343 0.8726 -0.4285 +vn -0.2452 0.7812 -0.5741 +vn -0.2320 0.6514 -0.7224 +vn -0.3427 0.5300 -0.7756 +vn -0.2257 0.3826 -0.8959 +vn -0.2328 0.2181 -0.9477 +vn -0.2384 0.1889 -0.9526 +vn -0.2877 0.3440 -0.8938 +vn -0.2083 0.4816 -0.8513 +vn -0.1907 0.6482 -0.7372 +vn -0.3484 0.7178 -0.6027 +vn -0.3096 0.7939 -0.5233 +vn -0.1098 0.9111 -0.3973 +vn -0.3468 0.9091 -0.2307 +vn -0.8143 0.0411 -0.5790 +vn -0.3208 0.8786 -0.3538 +vn -0.5247 0.0479 -0.8500 +vn -0.8016 0.5658 -0.1932 +vn -0.8069 0.5808 -0.1079 +vn -0.4730 0.8386 -0.2703 +vn -0.6180 0.6699 -0.4115 +vn -0.8696 0.3492 -0.3490 +vn -0.5700 0.5988 -0.5626 +vn -0.7929 0.3443 -0.5028 +vn -0.5685 0.3762 -0.7316 +vn -0.8584 0.1886 -0.4771 +vn -0.6165 0.2086 -0.7592 +vn -0.5413 0.8349 -0.1000 +vn -0.7779 0.6254 -0.0616 +vn -0.7006 0.2137 -0.6808 +vn -0.7717 0.0270 -0.6354 +vn -0.5042 0.0574 -0.8617 +vn -0.7676 0.2603 -0.5858 +vn -0.6054 0.3715 -0.7039 +vn -0.8299 0.3209 -0.4563 +vn -0.5289 0.5446 -0.6509 +vn -0.7639 0.4566 -0.4561 +vn -0.7612 0.5615 -0.3245 +vn -0.4511 0.8117 -0.3709 +vn -0.7518 0.6113 -0.2473 +vn -0.3471 0.6279 -0.6966 +vn 0.2188 0.6642 -0.7148 +vn 0.0084 0.5014 -0.8652 +vn -0.4899 0.6959 -0.5250 +vn -0.5400 0.7976 -0.2688 +vn -0.6344 0.6697 -0.3860 +vn -0.8200 0.5001 -0.2783 +vn 0.6753 0.6510 -0.3467 +vn 0.8330 0.5239 -0.1779 +vn 0.6572 0.7537 -0.0046 +vn -0.0869 -0.7979 0.5965 +vn 0.0840 -0.6213 0.7790 +vn -0.0987 -0.5342 0.8396 +vn 0.0715 -0.5710 0.8179 +vn 0.0741 -0.7491 0.6583 +vn -0.1043 -0.7855 0.6100 +vn 0.0901 -0.8782 0.4698 +vn -0.0666 -0.9165 0.3944 +vn 0.0776 -0.9632 0.2572 +vn -0.1179 -0.9685 0.2194 +vn 0.0809 -0.9825 0.1679 +vn -0.0723 -0.9695 0.2343 +vn 0.0959 -0.9609 0.2599 +vn 0.1256 -0.9314 0.3415 +vn -0.1324 -0.9176 0.3747 +vn 0.0638 -0.8920 0.4475 +vn -0.0775 -0.8322 0.5490 +vn 0.1112 -0.8268 0.5513 +vn -0.1225 -0.7035 0.7001 +vn 0.1414 -0.7425 0.6548 +vn 0.0870 -0.5929 0.8006 +vn -0.1113 -0.5847 0.8036 +vn -0.1248 -0.4712 0.8732 +vn 0.0898 -0.4520 0.8875 +vn -0.0746 -0.3393 0.9377 +vn 0.1310 -0.3339 0.9335 +vn -0.0706 -0.1759 0.9819 +vn 0.0823 -0.1589 0.9839 +vn 0.9583 -0.0415 0.2828 +vn 0.8798 -0.0367 0.4740 +vn 0.7673 -0.0663 0.6379 +vn 0.6185 -0.0830 0.7814 +vn 0.4457 -0.0898 0.8906 +vn 0.1825 -0.0993 0.9782 +vn 0.9565 -0.1578 0.2455 +vn 0.8726 -0.1517 0.4643 +vn 0.8870 -0.2294 0.4009 +vn 0.7699 -0.1932 0.6083 +vn 0.7689 -0.3152 0.5563 +vn 0.8677 -0.3590 0.3438 +vn 0.6278 -0.2401 0.7404 +vn 0.9655 -0.2017 0.1648 +vn 0.9088 -0.3337 0.2505 +vn 0.5896 -0.4065 0.6979 +vn 0.7722 -0.4337 0.4644 +vn 0.4499 -0.2766 0.8492 +vn 0.6320 -0.5350 0.5606 +vn 0.2042 -0.3021 0.9311 +vn 0.3605 -0.4663 0.8078 +vn 0.7791 -0.5213 0.3481 +vn 0.4468 -0.6187 0.6462 +vn 0.2603 -0.5865 0.7670 +vn 0.9341 -0.3268 0.1438 +vn 0.6280 -0.6534 0.4227 +vn 0.9844 -0.1626 0.0672 +vn 0.2659 -0.7331 0.6260 +vn 0.8377 -0.5101 0.1949 +vn 0.4451 -0.7521 0.4860 +vn 0.7132 -0.6414 0.2827 +vn 0.2694 -0.8421 0.4673 +vn 0.6033 -0.7526 0.2640 +vn 0.4489 -0.8285 0.3349 +vn 0.2685 -0.9232 0.2751 +vn 0.7844 -0.6087 0.1193 +vn 0.9109 -0.4047 0.0801 +vn 0.4325 -0.8908 0.1392 +vn 0.6842 -0.7234 0.0922 +vn 0.5615 -0.8217 0.0974 +vn 0.2670 -0.9580 0.1042 +vn 0.2514 -0.9651 0.0730 +vn 0.9624 -0.2651 0.0595 +vn 0.3177 -0.9416 0.1113 +vn 0.8805 -0.4684 0.0726 +vn 0.5483 -0.8324 0.0805 +vn 0.7390 -0.6687 0.0822 +vn 0.9621 -0.2453 0.1193 +vn 0.9165 -0.3751 0.1392 +vn 0.8286 -0.5378 0.1556 +vn 0.6898 -0.7070 0.1560 +vn 0.4867 -0.8543 0.1827 +vn 0.2608 -0.9410 0.2157 +vn 0.6807 -0.6897 0.2468 +vn 0.5228 -0.8099 0.2661 +vn 0.3490 -0.8825 0.3153 +vn 0.8273 -0.5003 0.2555 +vn 0.9821 -0.1330 0.1335 +vn 0.9289 -0.2614 0.2623 +vn 0.7208 -0.5950 0.3556 +vn 0.8555 -0.4171 0.3067 +vn 0.6027 -0.7017 0.3799 +vn 0.4486 -0.7822 0.4324 +vn 0.2573 -0.8473 0.4646 +vn 0.9388 -0.1509 0.3095 +vn 0.6981 -0.5480 0.4608 +vn 0.8264 -0.3557 0.4366 +vn 0.5309 -0.6437 0.5512 +vn 0.9768 -0.0023 0.2140 +vn 0.3500 -0.7160 0.6040 +vn 0.6681 -0.4697 0.5771 +vn 0.9207 -0.0697 0.3839 +vn 0.8283 -0.2446 0.5041 +vn 0.9171 -0.0053 0.3987 +vn 0.6912 -0.3549 0.6295 +vn 0.4490 -0.5462 0.7071 +vn 0.8273 -0.1343 0.5454 +vn 0.2595 -0.6185 0.7417 +vn 0.4992 -0.4146 0.7609 +vn 0.8175 -0.0418 0.5744 +vn 0.6939 -0.2545 0.6736 +vn 0.6937 -0.1658 0.7009 +vn 0.2596 -0.4788 0.8387 +vn 0.5344 -0.2575 0.8051 +vn 0.6453 -0.0988 0.7575 +vn 0.6506 -0.0209 0.7591 +vn 0.3449 -0.3426 0.8738 +vn 0.3616 -0.2433 0.9000 +vn 0.4468 -0.1260 0.8857 +vn 0.2402 -0.2235 0.9446 +vn 0.4558 -0.0265 0.8897 +vn 0.2506 -0.1084 0.9620 +vn 0.2730 -0.0247 0.9617 +vn 0.6759 0.5648 0.4734 +vn 0.4285 0.5636 0.7062 +vn -0.9259 -0.0299 0.3767 +vn -0.8300 -0.0574 0.5548 +vn -0.6989 -0.0792 0.7108 +vn -0.5311 -0.0888 0.8427 +vn -0.2473 -0.0660 0.9667 +vn -0.9365 -0.1177 0.3302 +vn -0.8805 -0.1228 0.4578 +vn -0.9064 -0.2652 0.3288 +vn -0.8641 -0.2444 0.4400 +vn -0.7675 -0.1854 0.6136 +vn -0.7735 -0.3065 0.5548 +vn -0.6208 -0.2297 0.7496 +vn -0.9317 -0.2893 0.2195 +vn -0.7456 -0.4461 0.4951 +vn -0.6226 -0.3869 0.6802 +vn -0.4451 -0.2772 0.8515 +vn -0.2399 -0.2826 0.9287 +vn -0.4472 -0.4448 0.7760 +vn -0.8291 -0.4582 0.3203 +vn -0.5435 -0.5648 0.6210 +vn -0.2533 -0.4256 0.8688 +vn -0.6620 -0.6125 0.4320 +vn -0.9443 -0.3105 0.1094 +vn -0.3150 -0.6153 0.7226 +vn -0.8644 -0.4574 0.2089 +vn -0.4570 -0.7344 0.5018 +vn -0.7736 -0.5861 0.2410 +vn -0.2460 -0.7418 0.6239 +vn -0.6134 -0.7333 0.2935 +vn -0.2625 -0.8700 0.4173 +vn -0.4204 -0.8606 0.2876 +vn -0.8517 -0.5138 0.1028 +vn -0.7093 -0.6933 0.1273 +vn -0.5713 -0.8087 0.1400 +vn -0.4311 -0.8961 0.1059 +vn -0.2588 -0.9605 0.1022 +vn -0.9637 -0.2619 0.0519 +vn -0.2697 -0.9591 0.0858 +vn -0.8818 -0.4646 0.0813 +vn -0.4649 -0.8814 0.0837 +vn -0.7676 -0.6339 0.0942 +vn -0.6210 -0.7754 0.1145 +vn -0.4509 -0.8788 0.1560 +vn -0.2547 -0.9547 0.1539 +vn -0.9259 -0.3521 0.1368 +vn -0.8325 -0.5227 0.1837 +vn -0.7015 -0.6788 0.2171 +vn -0.5410 -0.8034 0.2490 +vn -0.3588 -0.8938 0.2689 +vn -0.2013 -0.9391 0.2784 +vn -0.9667 -0.2024 0.1568 +vn -0.9186 -0.2991 0.2583 +vn -0.8258 -0.4824 0.2923 +vn -0.7034 -0.6469 0.2945 +vn -0.5352 -0.7689 0.3499 +vn -0.3450 -0.8589 0.3785 +vn -0.6587 -0.6272 0.4156 +vn -0.9594 -0.1376 0.2462 +vn -0.4510 -0.7481 0.4868 +vn -0.2548 -0.8142 0.5217 +vn -0.8321 -0.3865 0.3978 +vn -0.8755 -0.2325 0.4236 +vn -0.6975 -0.5207 0.4923 +vn -0.9577 -0.0463 0.2840 +vn -0.5321 -0.6191 0.5776 +vn -0.7319 -0.4011 0.5508 +vn -0.3472 -0.6919 0.6330 +vn -0.8903 -0.1039 0.4434 +vn -0.7365 -0.2661 0.6219 +vn -0.5354 -0.5092 0.6738 +vn -0.9220 -0.0148 0.3868 +vn -0.3453 -0.5736 0.7428 +vn -0.8061 -0.1447 0.5738 +vn -0.5696 -0.3946 0.7210 +vn -0.8336 -0.0420 0.5508 +vn -0.6805 -0.1839 0.7093 +vn -0.5302 -0.3204 0.7850 +vn -0.3568 -0.4532 0.8169 +vn -0.6592 -0.0983 0.7455 +vn -0.4972 -0.2332 0.8357 +vn -0.7213 -0.0242 0.6922 +vn -0.3072 -0.3675 0.8778 +vn -0.5701 -0.0288 0.8211 +vn -0.2493 -0.2664 0.9311 +vn -0.4463 -0.1410 0.8837 +vn -0.4445 -0.0551 0.8941 +vn -0.2569 -0.1500 0.9547 +vn -0.2713 -0.0441 0.9615 +vn -0.7218 0.5740 0.3866 +vn -0.5751 0.5748 0.5821 +vn -0.3749 0.5741 0.7279 +vn -0.1583 0.8202 -0.5498 +vn -0.2503 0.3166 0.9149 +vn -0.1880 0.1941 -0.9628 +vn -0.2403 0.8172 0.5239 +vn -0.3084 0.8384 -0.4494 +vn -0.4388 0.8161 0.3760 +vn -0.4313 0.8946 -0.1165 +vn -0.6273 0.7737 0.0881 +vn -0.7622 0.6094 0.2184 +vn -0.6270 0.0458 -0.7776 +vn -0.4624 0.2012 0.8635 +vn -0.5376 0.0933 -0.8381 +vn -0.5136 0.1165 0.8501 +vn -0.4093 -0.0473 -0.9112 +vn -0.5065 0.0189 0.8620 +vn -0.1398 -0.2016 -0.9694 +vn -0.1820 -0.0414 0.9824 +vn -0.4996 -0.1804 -0.8473 +vn -0.5114 -0.1672 0.8429 +vn -0.5667 -0.3009 -0.7670 +vn -0.5655 -0.4352 0.7006 +vn -0.4497 -0.5194 -0.7267 +vn -0.1564 -0.6134 0.7742 +vn -0.4700 -0.8803 -0.0643 +vn -0.6647 -0.7282 -0.1672 +vn -0.4533 -0.8808 0.1369 +vn -0.3835 -0.8621 -0.3313 +vn -0.2356 -0.9110 0.3386 +vn 0.3390 -0.6583 -0.6721 +vn 0.2508 -0.4557 0.8541 +vn 0.0477 -0.3578 -0.9326 +vn 0.4507 -0.6860 0.5712 +vn 0.5178 -0.1039 0.8491 +vn 0.5114 -0.1672 -0.8429 +vn 0.4062 0.4546 -0.7927 +vn 0.1955 0.2527 0.9476 +vn 0.6041 -0.2395 0.7601 +vn 0.5655 -0.4352 -0.7006 +vn 0.5115 -0.3640 0.7784 +vn 0.1564 -0.6134 -0.7741 +vn 0.7088 -0.7037 0.0497 +vn 0.4326 -0.8925 0.1272 +vn 0.4533 -0.8808 -0.1369 +vn 0.2394 -0.9182 0.3155 +vn 0.2356 -0.9110 -0.3386 +vn 0.4916 0.3735 0.7866 +vn 0.5203 0.1812 -0.8345 +vn 0.2923 0.9563 0.0089 +vn 0.2670 0.9637 -0.0066 +vn 0.0487 0.0433 -0.9979 +vn -0.5247 0.2586 0.8111 +vn 0.4623 0.8569 0.2281 +vn 0.4500 0.8587 -0.2453 +vn 0.5418 0.6951 0.4725 +vn 0.5706 0.6906 -0.4444 +vn 0.6266 0.4767 -0.6165 +vn 0.5585 0.3914 0.7314 +vn 0.5833 0.2662 -0.7674 +vn 0.5090 0.1785 0.8421 +vn 0.5136 0.1165 -0.8501 +vn -0.9629 0.0203 0.2693 +vn 0.8757 0.1019 -0.4720 +vn -0.8180 0.2841 -0.5001 +vn 0.9448 0.0076 0.3275 +vn 0.1102 0.1332 0.9849 +vn 0.0329 -0.0061 -0.9994 +vn -0.0718 0.0270 -0.9971 +vn -0.0865 0.9957 -0.0323 +vn 0.2137 0.0107 -0.9768 +vn 0.4077 -0.0082 -0.9131 +vn -0.2021 0.1729 0.9640 +vn 0.5893 0.0096 -0.8079 +vn 0.7444 0.0068 -0.6677 +vn -0.7857 0.0897 0.6120 +vn 0.8669 0.0096 -0.4984 +vn 0.9509 -0.0077 -0.3094 +vn -0.9632 0.0207 0.2679 +vn 0.3112 0.5457 0.7781 +vn -0.7478 0.2078 -0.6306 +vn 0.9440 0.0075 0.3300 +vn -0.4319 -0.2167 0.8755 +vn 0.0758 -0.4149 0.9067 +vn -0.0585 0.0436 0.9973 +vn -0.3037 -0.8085 0.5041 +vn -0.1543 -0.9859 0.0651 +vn -0.0132 -0.0032 0.9999 +vn -0.0089 0.2429 0.9700 +vn 0.0233 -0.0760 0.9968 +vn -0.0554 0.4966 0.8662 +vn 0.1653 -0.3477 0.9229 +vn 0.0208 -0.0156 0.9997 +vn -0.0208 0.0027 0.9998 +vn -0.2302 0.5681 0.7901 +vn 0.0252 -0.0078 0.9997 +vn -0.6596 0.0373 0.7507 +vn -0.1108 -0.2172 0.9698 +vn -0.0875 0.3693 0.9252 +vn -0.0294 0.4042 0.9142 +vn -0.5129 0.0738 0.8553 +vn 0.3727 0.3948 0.8398 +vn 0.5441 0.0911 0.8341 +vn 0.6470 0.2617 0.7162 +vn 0.4215 0.2524 0.8710 +vn 0.2015 0.8841 0.4215 +vn -0.2738 0.6382 0.7195 +vn 0.3644 0.8747 0.3197 +vn -0.2635 0.4225 0.8672 +vn 0.5020 0.8432 0.1923 +vn -0.5716 0.4816 0.6643 +vn -0.5969 0.6944 0.4018 +vn -0.6601 0.7476 0.0739 +vn 0.7663 0.6352 0.0961 +vn 0.6654 0.7448 0.0494 +vn -0.8082 0.5888 -0.0051 +vn 0.2159 -0.8512 -0.4783 +vn 0.2602 -0.0809 -0.9622 +vn 0.0237 0.0432 -0.9988 +vn 0.1229 0.1527 -0.9806 +vn -0.0079 -0.0041 -1.0000 +vn -0.2254 0.3545 -0.9075 +vn 0.0279 -0.0283 -0.9992 +vn -0.0753 -0.4319 -0.8988 +vn -0.0868 0.2213 -0.9713 +vn -0.0364 -0.0120 -0.9993 +vn 0.0131 -0.0046 -0.9999 +vn 0.2280 0.5737 -0.7867 +vn -0.0208 -0.0841 -0.9962 +vn 0.3217 0.5866 -0.7432 +vn 0.1933 0.6293 -0.7527 +vn 0.0805 0.3728 -0.9244 +vn -0.0286 0.3638 -0.9310 +vn -0.6493 -0.2839 -0.7056 +vn -0.3863 0.6260 -0.6775 +vn 0.6476 0.2871 -0.7058 +vn 0.6166 0.0734 -0.7839 +vn 0.8164 0.3362 -0.4695 +vn -0.1516 0.6240 -0.7666 +vn 0.3556 0.8764 -0.3248 +vn -0.2799 0.6578 -0.6992 +vn -0.6220 0.2615 -0.7381 +vn 0.4906 0.8175 -0.3017 +vn -0.8729 0.3420 -0.3479 +vn -0.8239 0.4906 -0.2837 +vn 0.6723 0.7398 0.0266 +vn 0.7429 -0.1573 -0.6506 +vn -0.6451 0.7568 -0.1050 +vn -0.7512 0.6601 -0.0003 +vn -0.1431 0.0010 -0.9897 +vn -0.3943 0.0114 -0.9189 +vn 0.2465 -0.1073 0.9632 +vn -0.5886 0.0088 -0.8084 +vn 0.6437 -0.0905 0.7599 +vn -0.7448 -0.0329 -0.6665 +vn -0.8665 0.0084 -0.4991 +vn 0.8969 -0.1084 0.4287 +vn -0.9510 -0.0109 -0.3091 +vn -0.9939 -0.0207 -0.1085 +vn 0.5265 0.0739 0.8469 +vn 0.8034 0.0796 0.5901 +vn -0.3518 -0.0120 -0.9360 +vn -0.5510 -0.0128 -0.8344 +vn -0.7354 -0.0183 -0.6774 +vn -0.8868 -0.0122 -0.4620 +vn -0.9659 0.0103 -0.2588 +vn 0.9302 -0.2933 0.2206 +vn -0.6954 -0.6811 0.2292 +vn -0.8739 -0.4015 -0.2739 +vn 0.7197 -0.6326 0.2860 +vn -0.5739 -0.7205 0.3892 +vn 0.5576 -0.7119 0.4270 +vn 0.4470 -0.7417 0.5000 +vn -0.4239 -0.6992 0.5757 +vn 0.2680 -0.6995 0.6625 +vn -0.3410 -0.6194 0.7072 +vn -0.2091 -0.5190 0.8288 +vn 0.1259 -0.4468 0.8857 +vn -0.0669 -0.3509 0.9340 +vn 0.0098 -0.2542 0.9671 +vn -0.8919 0.2350 0.3863 +vn 0.9026 0.0317 0.4294 +vn 0.2902 0.0016 -0.9570 +vn -0.3442 -0.0934 0.9342 +vn 0.3521 -0.0089 -0.9359 +vn 0.6513 0.0057 -0.7588 +vn -0.7263 -0.0930 0.6811 +vn 0.7382 0.0184 -0.6743 +vn 0.9517 -0.0009 -0.3069 +vn -0.9494 -0.0992 0.2978 +vn 0.9695 -0.0111 -0.2448 +vn 0.9993 -0.0230 0.0288 +vn -0.6469 -0.5799 0.4953 +vn 0.7731 -0.3785 0.5089 +vn 0.9148 -0.3016 0.2686 +vn -0.6464 -0.7295 0.2235 +vn -0.9118 -0.3744 -0.1686 +vn 0.6399 -0.7339 0.2279 +vn -0.5010 -0.7631 0.4083 +vn 0.5596 -0.7346 0.3836 +vn 0.4395 -0.6988 0.5643 +vn -0.3431 -0.7265 0.5954 +vn 0.2618 -0.6706 0.6941 +vn -0.2665 -0.6354 0.7248 +vn -0.1428 -0.5265 0.8381 +vn 0.1441 -0.5882 0.7958 +vn 0.0131 -0.3538 0.9352 +vn 0.0362 -0.4335 0.9004 +vn -0.0070 -0.2138 -0.9768 +vn 0.0452 0.3286 0.9434 +vn -0.0190 -0.4072 -0.9132 +vn 0.0598 0.4691 0.8811 +vn 0.0095 -0.5893 -0.8079 +vn -0.0067 -0.7439 -0.6683 +vn 0.0971 0.5383 0.8371 +vn -0.0081 -0.8666 -0.4990 +vn 0.0458 0.9208 0.3874 +vn -0.0074 -0.9510 -0.3092 +vn 0.0247 0.9948 0.0990 +vn 0.0017 -0.9946 -0.1038 +vn -0.0403 0.2600 0.9648 +vn 0.0040 -0.2845 -0.9587 +vn -0.0285 0.4530 0.8911 +vn -0.0489 -0.3500 -0.9355 +vn -0.0103 -0.6734 -0.7392 +vn -0.0367 0.6282 0.7772 +vn -0.0061 -0.7227 -0.6912 +vn -0.0640 0.7751 0.6285 +vn 0.0060 -0.7936 -0.6084 +vn -0.0409 0.8899 0.4543 +vn 0.0087 -0.9027 -0.4302 +vn -0.0392 0.9645 0.2612 +vn 0.0074 -0.9724 -0.2333 +vn -0.0424 0.9958 0.0813 +vn 0.0099 -0.9978 -0.0650 +vn 0.1115 0.9927 0.0460 +vn 0.4486 -0.8825 -0.1412 +vn 0.2919 0.8575 -0.4236 +vn 0.7061 -0.6477 0.2860 +vn 0.1338 0.9906 0.0279 +vn 0.7132 -0.5520 0.4319 +vn 0.0870 0.9850 0.1491 +vn 0.6935 -0.4261 0.5810 +vn 0.0258 0.9756 0.2180 +vn 0.6194 -0.3410 0.7072 +vn 0.5206 -0.1831 0.8339 +vn 0.2106 0.9601 0.1840 +vn 0.0097 0.9513 0.3081 +vn 0.3514 -0.0482 0.9350 +vn 0.3074 0.0266 0.9512 +vn 0.0042 -0.7433 0.6689 +vn 0.0251 -0.9886 0.1483 +vn -0.4844 0.6578 0.5768 +vn -0.2737 -0.9279 0.2534 +vn 0.0160 0.9985 0.0533 +vn 0.3726 0.4742 0.7977 +vn 0.3518 -0.0519 0.9347 +vn 0.2825 -0.0785 0.9561 +vn 0.1919 0.2451 0.9503 +vn 0.1778 -0.2591 0.9493 +vn 0.0788 0.0490 0.9957 +vn 0.0871 -0.4373 0.8951 +vn -0.3633 0.8293 0.4246 +vn 0.0221 -0.5491 0.8354 +vn -0.2634 -0.4974 0.8266 +vn 0.0812 0.5542 0.8284 +vn -0.5409 -0.1764 0.8224 +vn -0.3518 0.0520 0.9346 +vn -0.6022 0.6575 0.4527 +vn -0.4002 -0.9154 0.0429 +vn -0.2824 0.0801 0.9559 +vn -0.6364 -0.1430 0.7580 +vn -0.1787 0.2439 0.9532 +vn -0.3461 -0.4665 0.8140 +vn -0.0880 0.4191 0.9037 +vn -0.6108 -0.5678 0.5518 +vn -0.4615 0.8399 0.2855 +vn 0.4010 -0.1850 0.8972 +vn -0.0052 0.7543 0.6566 +vn -0.2506 -0.8918 -0.3767 +vn -0.0860 -0.9706 0.2247 +vn -0.5811 0.7744 -0.2504 +vn -0.9368 -0.0081 0.3498 +vn -0.0635 -0.9792 0.1928 +vn -0.8568 0.0592 0.5123 +vn -0.1457 -0.9866 0.0729 +vn -0.7631 0.1384 0.6313 +vn -0.0629 -0.9818 0.1791 +vn -0.6357 0.2645 0.7252 +vn -0.4948 0.3395 0.8000 +vn -0.0812 -0.9635 0.2551 +vn -0.1298 -0.9580 0.2557 +vn -0.2899 0.5112 0.8091 +vn 0.0000 0.0022 -1.0000 +vn 0.0000 -0.0022 -1.0000 +vn -0.1699 0.0020 -0.9855 +vn 0.4132 0.0011 -0.9106 +vn 0.1690 -0.0009 -0.9856 +vn -0.4132 -0.0011 -0.9106 +vn -0.9705 0.0104 -0.2410 +vn -0.0093 0.9704 0.2412 +vn -0.0035 0.9970 -0.0775 +vn -0.9970 0.0040 0.0777 +vn -0.0000 0.0022 1.0000 +vn -0.4132 0.0011 0.9106 +vn 0.0035 0.9970 0.0776 +vn 0.0093 0.9704 -0.2412 +vn -0.9705 -0.0104 0.2410 +vn -0.1699 -0.0020 0.9855 +vn -0.9970 -0.0040 -0.0776 +vn 0.9705 0.0104 0.2410 +vn 0.9970 0.0040 -0.0777 +vn 0.1699 0.0020 0.9855 +vn -0.0092 -0.9704 -0.2412 +vn -0.0035 -0.9970 0.0775 +vn 0.0000 -0.0022 1.0000 +vn 0.4136 -0.0024 0.9105 +vn 0.9970 -0.0066 0.0769 +vn 0.9701 -0.0063 -0.2428 +vn 0.0056 -0.9701 0.2428 +vn 0.0058 -0.9970 -0.0769 +vn -0.1774 -0.1097 0.9780 +vn -0.0573 0.6011 0.7971 +vn 0.0035 -0.1817 -0.9833 +vn 0.8924 0.4403 0.0989 +vn 0.3021 -0.4601 0.8349 +vn 0.3071 -0.1333 -0.9423 +vn 0.2528 -0.5069 -0.8241 +vn -0.1632 0.4213 0.8921 +vn -0.1790 0.2555 0.9501 +vn -0.0432 0.0673 -0.9968 +vn 0.0672 -0.6751 -0.7346 +vn -0.2329 0.8433 0.4843 +vn 0.0579 -0.9872 -0.1487 +vn -0.1370 -0.6192 0.7732 +vn -0.2729 0.9338 -0.2314 +vn 0.3231 0.7074 0.6286 +vn -0.0629 -0.6920 -0.7192 +vn 0.2925 0.4397 -0.8492 +vn 0.2768 0.5624 0.7791 +vn -0.3470 -0.9020 -0.2568 +vn -0.0354 0.9984 0.0444 +vn -0.0175 -0.2420 0.9701 +vn -0.2826 0.3815 -0.8801 +vn 0.0618 0.1160 0.9913 +vn -0.2645 0.1314 0.9554 +vn 0.0854 0.1242 -0.9886 +vn 0.3309 -0.3390 0.8807 +vn 0.0241 -0.9966 -0.0789 +vn -0.0903 0.9879 -0.1260 +vn 0.3658 0.8949 -0.2555 +vn 0.3088 0.1101 0.9447 +vn 0.2944 0.6273 0.7210 +vn 0.3156 0.5019 -0.8053 +vn -0.7530 -0.4986 0.4293 +vn -0.9215 0.3825 -0.0674 +vn 0.3799 0.4300 0.8190 +vn 0.0437 0.5417 -0.8394 +vn 0.0742 0.7846 -0.6156 +vn 0.6094 0.7305 -0.3081 +vn -0.1191 0.7738 -0.6221 +vn 0.3262 0.8689 -0.3722 +vn 0.8850 0.4253 0.1897 +vn -0.5623 0.7637 -0.3170 +vn -0.7647 0.6100 0.2076 +vn 0.4170 -0.2613 0.8705 +vn -0.2898 0.7806 0.5538 +vn -0.2916 0.1162 0.9494 +vn 0.4058 0.8403 0.3596 +vn -0.1486 0.5712 0.8072 +vn -0.1929 0.1690 0.9666 +vn 0.2167 0.1974 0.9561 +vn 0.3686 0.7282 0.5778 +vn 0.0055 0.1987 0.9800 +vn -0.0793 -0.1192 0.9897 +vn -0.1170 -0.1163 0.9863 +vn -0.1143 -0.0535 0.9920 +vn -0.0030 0.3043 0.9526 +vn -0.3575 0.0987 0.9287 +vn -0.5205 0.0145 0.8537 +vn -0.8512 0.3143 0.4203 +vn -0.6659 -0.2192 0.7131 +vn 0.4469 0.0688 0.8920 +vn -0.4272 0.0017 0.9042 +vn -0.1835 -0.1603 0.9699 +vn 0.2272 -0.0710 0.9712 +vn 0.7628 -0.5982 0.2457 +vn -0.0485 -0.1216 0.9914 +vn -0.0060 -0.1371 0.9905 +vn -0.2236 0.1306 0.9659 +vn 0.7221 0.6657 0.1879 +vn 0.0125 -0.1233 0.9923 +vn -0.7253 0.3198 0.6097 +vn -0.0596 0.9640 0.2593 +vn 0.4721 -0.8028 0.3642 +vn -0.5983 0.5061 0.6212 +vn 0.6290 0.5715 0.5271 +vn -0.4064 0.1664 0.8984 +vn 0.4640 0.8550 0.2317 +vn -0.1652 0.8486 0.5026 +vn 0.4945 0.5228 0.6943 +vn 0.4608 0.8566 -0.2323 +vn -0.1476 0.9875 0.0552 +vn -0.4717 0.8783 0.0781 +vn 0.3522 0.3562 -0.8655 +vn 0.1153 0.7156 -0.6890 +vn -0.8729 -0.3571 -0.3325 +vn -0.4273 -0.1053 -0.8980 +vn 0.5816 0.6016 -0.5476 +vn 0.7072 -0.0344 -0.7062 +vn -0.7399 0.5588 -0.3746 +vn 0.4612 -0.0886 -0.8828 +vn -0.0774 0.2297 -0.9702 +vn 0.4770 0.3362 -0.8120 +vn -0.0996 -0.0792 -0.9919 +vn -0.1044 0.2212 -0.9696 +vn 0.7337 0.5920 -0.3334 +vn -0.1616 0.1723 -0.9717 +vn -0.1471 -0.0119 -0.9891 +vn 0.2497 0.9295 -0.2716 +vn 0.6034 -0.7609 -0.2385 +vn 0.1454 0.0690 -0.9870 +vn 0.3671 -0.0704 -0.9275 +vn 0.2078 -0.0791 -0.9750 +vn -0.4818 0.2505 -0.8397 +vn -0.3694 0.0746 -0.9263 +vn -0.4707 0.0865 -0.8780 +vn 0.3746 0.0240 -0.9269 +vn 0.2240 0.1652 -0.9605 +vn 0.5310 -0.7852 -0.3187 +vn 0.0924 -0.2044 -0.9745 +vn -0.1048 -0.1288 -0.9861 +vn -0.1033 -0.0440 -0.9937 +vn -0.3020 0.1010 -0.9480 +vn -0.3347 0.0803 -0.9389 +vn -0.5344 0.0168 -0.8451 +vn -0.3730 -0.4769 -0.7959 +vn -0.6749 -0.5413 -0.5014 +vn 0.1584 0.1435 -0.9769 +vn -0.0955 0.2399 -0.9661 +vn 0.0689 0.1386 -0.9880 +vn -0.6049 0.5152 -0.6072 +vn 0.3845 -0.0596 0.9212 +vn 0.1233 0.2387 0.9632 +vn 0.5033 -0.7301 0.4623 +vn 0.9089 -0.0592 0.4127 +vn 0.2628 0.2694 0.9265 +vn -0.1928 0.3665 0.9102 +vn -0.5084 0.4923 0.7065 +vn -0.3641 -0.8937 -0.2623 +vn 0.5107 0.8597 -0.0118 +vn -0.3801 -0.8971 0.2251 +vn 0.3778 0.9258 0.0063 +vn -0.6089 -0.7677 0.1996 +vn 0.4177 0.0126 0.9085 +vn 0.8440 0.3912 -0.3670 +vn 0.0285 -0.4643 -0.8852 +vn 0.7876 0.3005 0.5380 +vn 0.9585 0.0976 0.2679 +vn 0.9153 -0.2151 -0.3404 +vn 0.7108 0.2735 0.6480 +vn 0.8270 -0.2982 0.4766 +vn 0.6412 -0.7544 -0.1402 +vn -0.2832 -0.6903 -0.6658 +vn 0.3077 -0.8121 -0.4958 +vn -0.2385 -0.9546 0.1787 +vn -0.0026 -0.8706 0.4919 +vn 0.1942 -0.4381 0.8777 +vn 0.4036 0.8322 0.3801 +vn -0.0203 -0.0770 0.9968 +vn -0.0986 0.0769 -0.9922 +vn -0.7024 -0.6885 -0.1803 +vn -0.2500 0.4307 0.8672 +vn -0.8130 0.3362 -0.4754 +vn -0.3444 -0.4509 0.8235 +vn 0.1643 0.2956 0.9411 +vn -0.0504 -0.4360 -0.8985 +vn 0.2247 0.1264 -0.9662 +vn 0.4787 0.2416 0.8441 +vn -0.0352 -0.8932 -0.4484 +vn 0.5928 0.7019 0.3949 +vn 0.1078 -0.6416 0.7594 +vn -0.2361 0.7161 0.6569 +vn -0.3978 0.7874 0.4709 +vn -0.0443 0.0849 -0.9954 +vn 0.0597 -0.8254 -0.5613 +vn -0.1073 -0.9862 0.1262 +vn 0.0882 0.9960 -0.0112 +vn 0.2887 0.0871 0.9534 +vn 0.4636 0.7454 -0.4790 +vn 0.3063 0.6186 0.7235 +vn 0.2758 0.3023 0.9125 +vn -0.0315 0.4058 -0.9134 +vn 0.2399 -0.9689 0.0600 +vn -0.1931 0.9144 -0.3559 +vn -0.0358 0.9993 0.0121 +vn 0.0226 -0.8559 0.5167 +vn -0.0223 -0.2222 0.9747 +vn -0.3781 0.4913 -0.7846 +vn 0.0277 0.2631 0.9644 +vn 0.4618 0.4339 -0.7737 +vn 0.9125 0.1247 0.3897 +vn -0.2785 0.1403 0.9501 +vn 0.0012 0.1809 -0.9835 +vn -0.0179 -0.3774 -0.9259 +vn -0.4375 0.5237 -0.7310 +vn 0.3496 0.8195 -0.4541 +vn -0.4266 0.9044 -0.0100 +vn 0.5404 0.7697 -0.3399 +vn -0.5713 0.6284 -0.5279 +vn -0.8789 0.4730 -0.0620 +vn 0.5530 0.8327 0.0266 +vn -0.1200 -0.0555 0.9912 +vn 0.7246 -0.6002 0.3386 +vn -0.3413 0.0876 0.9359 +vn 0.4179 0.5978 0.6840 +vn 0.8112 0.2510 0.5282 +vn 0.7770 0.1601 0.6088 +vn -0.2716 0.1932 0.9428 +vn -0.2936 0.4043 0.8662 +vn 0.1859 0.1724 0.9673 +vn 0.0619 -0.1274 0.9899 +vn 0.1047 -0.1289 0.9861 +vn 0.0205 -0.1051 0.9943 +vn 0.6737 0.7386 -0.0238 +vn 0.6086 -0.4048 0.6825 +vn 0.7109 0.2015 0.6738 +vn 0.3472 0.0917 0.9333 +vn 0.1669 0.3986 0.9018 +vn 0.0610 -0.3787 0.9235 +vn -0.4314 -0.0100 0.9021 +vn 0.4111 0.0453 0.9105 +vn 0.2534 -0.0559 0.9658 +vn -0.1965 -0.1503 0.9689 +vn 0.1543 -0.1246 0.9801 +vn -0.1256 -0.1994 0.9718 +vn -0.1735 -0.2964 0.9392 +vn -0.7734 0.1267 0.6211 +vn -0.0461 -0.2775 0.9596 +vn -0.7258 0.3186 0.6097 +vn 0.4846 -0.2957 0.8232 +vn 0.2750 0.1077 0.9554 +vn 0.1257 0.2185 0.9677 +vn 0.1254 0.2416 0.9622 +vn -0.4352 0.3601 0.8252 +vn 0.4587 0.8575 0.2331 +vn 0.1140 0.9674 0.2262 +vn -0.7303 0.6804 -0.0619 +vn 0.3552 0.6412 0.6803 +vn 0.7102 0.3827 0.5908 +vn -0.3902 0.9175 -0.0775 +vn 0.4364 0.8736 -0.2155 +vn -0.4094 0.0095 -0.9123 +vn 0.1501 -0.0346 -0.9881 +vn 0.8222 0.0931 -0.5615 +vn 0.7283 0.2841 -0.6236 +vn 0.5540 0.6255 -0.5494 +vn -0.6339 0.6346 -0.4421 +vn 0.2975 -0.8919 -0.3405 +vn -0.0764 0.2229 -0.9718 +vn 0.4676 0.3211 -0.8235 +vn 0.6929 -0.2151 -0.6882 +vn -0.1043 0.2210 -0.9697 +vn -0.1217 -0.0220 -0.9923 +vn 0.6522 0.7120 -0.2602 +vn -0.1605 0.1706 -0.9722 +vn 0.6142 0.7703 -0.1714 +vn -0.0902 -0.6777 -0.7298 +vn 0.1552 0.0718 -0.9853 +vn 0.7642 0.4631 -0.4489 +vn -0.4853 0.1297 -0.8647 +vn -0.3025 0.0012 -0.9531 +vn -0.2655 -0.0517 -0.9627 +vn -0.1935 -0.1438 -0.9705 +vn 0.2031 -0.1146 -0.9724 +vn 0.8369 0.2426 -0.4906 +vn 0.7025 -0.0271 -0.7112 +vn 0.1642 -0.9825 -0.0882 +vn 0.4465 -0.8900 -0.0922 +vn 0.9024 -0.4232 -0.0815 +vn 0.1232 0.1862 -0.9748 +vn 0.2452 0.1234 -0.9616 +vn 0.3757 0.0778 -0.9235 +vn 0.7486 0.0980 -0.6557 +vn 0.8838 -0.3091 -0.3513 +vn 0.2805 0.1844 -0.9420 +vn -0.2140 0.2682 -0.9393 +vn 0.1597 0.1464 -0.9763 +vn -0.0301 0.2040 -0.9785 +vn 0.4469 0.3647 -0.8169 +vn 0.8448 -0.5329 -0.0471 +vn -0.2843 -0.3423 0.8955 +vn 0.1538 -0.0796 0.9849 +vn 0.1655 0.6061 0.7779 +vn 0.4970 -0.2503 0.8309 +vn -0.5077 0.0707 0.8586 +vn 0.7949 -0.0062 0.6067 +vn -0.5828 0.6850 0.4371 +vn -0.1821 -0.8675 -0.4629 +vn -0.4633 0.8853 -0.0394 +vn -0.6735 0.7391 0.0098 +vn 0.3614 -0.8914 0.2736 +vn -0.7561 0.5703 0.3210 +vn 0.0212 -0.4219 0.9064 +vn 0.1352 -0.8799 -0.4555 +vn -0.7749 0.6034 -0.1882 +vn -0.8368 -0.3298 -0.4371 +vn -0.8575 0.0759 -0.5088 +vn -0.4479 0.4520 -0.7714 +vn -0.9502 0.2762 0.1440 +vn -0.9481 -0.3142 -0.0484 +vn -0.9179 0.0067 0.3967 +vn 0.4880 -0.8676 -0.0959 +vn 0.1885 -0.9391 -0.2875 +vn 0.0020 -0.7701 -0.6380 +vn 0.0590 -0.9412 0.3326 +vn 0.6093 -0.3630 0.7050 +vn -0.2399 -0.8572 0.4556 +vn 0.2424 -0.7338 0.6346 +vn -0.2180 -0.0467 0.9748 +vn -0.4459 -0.8211 0.3562 +vn 0.0886 -0.2538 0.9632 +vn -0.1373 -0.8149 0.5632 +vn 0.1149 -0.9779 0.1745 +vn 0.1181 -0.3784 0.9181 +vn -0.1379 -0.2151 0.9668 +vn 0.1297 -0.2476 0.9601 +vn 0.9940 0.1092 0.0028 +vn -0.0938 -0.0867 0.9918 +vn 0.2345 -0.9031 0.3597 +vn 0.1307 -0.2446 0.9608 +vn -0.1014 -0.2330 0.9672 +vn -0.2262 0.0759 0.9711 +vn 0.0349 -0.1177 0.9924 +vn 0.0892 -0.1341 0.9869 +vn -0.2711 -0.2090 0.9396 +vn -0.1345 0.2351 0.9626 +vn -0.2919 -0.0277 0.9560 +vn -0.0451 0.2242 0.9735 +vn 0.0029 0.3892 0.9211 +vn 0.3209 0.8375 0.4423 +vn -0.3020 -0.1895 0.9343 +vn 0.1111 -0.1851 0.9764 +vn -0.1828 -0.4980 0.8477 +vn 0.2790 0.5216 0.8063 +vn 0.3817 -0.0822 0.9206 +vn 0.4926 -0.6946 0.5242 +vn 0.5979 -0.0622 0.7991 +vn -0.3611 -0.7967 0.4846 +vn -0.1823 -0.2502 0.9509 +vn 0.2726 -0.1978 0.9416 +vn 0.0959 -0.2966 0.9502 +vn -0.0329 0.0984 0.9946 +vn -0.1036 -0.2985 0.9488 +vn -0.5320 -0.1792 0.8276 +vn -0.5007 -0.3951 0.7702 +vn -0.7518 -0.5282 0.3947 +vn 0.0855 0.1917 0.9777 +vn -0.0932 -0.3333 0.9382 +vn -0.1877 0.1243 0.9743 +vn 0.0956 0.0267 0.9951 +vn 0.1742 0.2043 0.9633 +vn -0.2534 -0.2141 0.9434 +vn 0.9656 0.1175 0.2320 +vn -0.1768 -0.0050 0.9842 +vn 0.0680 -0.0082 0.9977 +vn 0.1367 0.0992 0.9856 +vn -0.2133 -0.0261 0.9766 +vn 0.0840 -0.3066 0.9481 +vn -0.0484 -0.0252 0.9985 +vn 0.1761 -0.0659 0.9822 +vn -0.3010 -0.4574 0.8367 +vn 0.9819 0.0759 0.1736 +vn 0.9034 0.2452 0.3517 +vn 0.3961 0.0961 0.9132 +vn -0.3874 0.0849 0.9180 +vn -0.0544 -0.4673 0.8824 +vn 0.1293 -0.0536 0.9902 +vn -0.1580 0.2311 0.9600 +vn 0.3677 0.3171 0.8742 +vn 0.1461 -0.1309 0.9806 +vn 0.2090 -0.2289 0.9507 +vn 0.6316 -0.4372 0.6402 +vn 0.1856 -0.0387 0.9819 +vn -0.2675 0.2035 0.9418 +vn -0.2824 0.2431 0.9280 +vn -0.7433 0.3301 0.5818 +vn -0.3950 -0.3268 0.8586 +vn 0.0201 0.1592 0.9870 +vn -0.0964 0.2167 0.9715 +vn -0.0941 0.2215 0.9706 +vn 0.0866 0.0904 0.9921 +vn 0.0809 -0.0590 0.9950 +vn 0.6354 -0.4746 0.6091 +vn 0.0179 0.1383 0.9902 +vn 0.0188 0.1377 0.9903 +vn 0.2809 0.2255 0.9329 +vn -0.2212 0.2367 0.9461 +vn 0.1646 0.0126 0.9863 +vn -0.0709 0.3320 0.9406 +vn 0.1032 0.2965 0.9494 +vn 0.6982 -0.1155 0.7066 +vn -0.8867 0.4232 0.1859 +vn 0.0645 0.3376 0.9391 +vn 0.1202 -0.2745 0.9540 +vn 0.8607 0.1519 -0.4859 +vn 0.9910 0.1335 0.0063 +vn 0.4792 0.4236 -0.7688 +vn 0.4639 0.2086 -0.8610 +vn 0.5573 0.1554 -0.8156 +vn -0.3350 0.6450 -0.6869 +vn 0.2180 0.1564 -0.9633 +vn 0.5137 -0.2576 -0.8184 +vn 0.3056 -0.4433 -0.8427 +vn 0.5050 0.0260 -0.8627 +vn 0.3054 0.5968 -0.7420 +vn 0.3339 0.3870 0.8595 +vn 0.6618 -0.5542 -0.5048 +vn 0.3080 0.4743 0.8247 +vn 0.4556 0.0413 -0.8892 +vn -0.0189 -0.2862 0.9580 +vn 0.6191 -0.6502 -0.4404 +vn 0.2239 0.9746 0.0008 +vn 0.3395 -0.8409 -0.4214 +vn -0.3522 0.9193 0.1755 +vn -0.0102 0.5953 -0.8035 +vn 0.2001 -0.0579 -0.9781 +vn 0.2057 -0.4181 0.8848 +vn -0.0001 0.9756 -0.2197 +vn 0.0706 -0.9772 0.2003 +vn 0.1062 0.9910 0.0819 +vn -0.0692 0.0929 -0.9933 +vn 0.4019 -0.8510 0.3381 +vn -0.6921 0.2184 -0.6880 +vn 0.5992 0.0351 -0.7998 +vn -0.1590 -0.0818 -0.9839 +vn 0.7903 0.2161 -0.5734 +vn 0.6341 -0.4776 -0.6081 +vn -0.7388 -0.0708 -0.6702 +vn -0.1128 -0.5505 -0.8272 +vn -0.6821 -0.1856 -0.7074 +vn 0.1224 -0.4476 -0.8858 +vn 0.2659 -0.5242 -0.8090 +vn -0.0787 -0.2083 -0.9749 +vn 0.2173 -0.6951 -0.6853 +vn -0.1027 -0.9664 -0.2357 +vn 0.0217 -0.2220 -0.9748 +vn 0.1596 -0.2736 -0.9485 +vn 0.0599 -0.3155 -0.9470 +vn -0.0548 -0.0974 -0.9937 +vn -0.0240 0.2767 -0.9607 +vn 0.0436 -0.0812 -0.9957 +vn -0.4396 -0.8762 -0.1975 +vn -0.5168 -0.7608 -0.3926 +vn -0.5726 -0.5425 -0.6147 +vn 0.0869 -0.0681 -0.9939 +vn -0.9677 0.1916 -0.1640 +vn 0.1321 -0.1734 -0.9759 +vn 0.0456 -0.1098 -0.9929 +vn -0.1281 0.2400 -0.9623 +vn 0.3297 0.8525 -0.4055 +vn 0.0467 0.2430 -0.9689 +vn 0.0012 0.3869 -0.9221 +vn 0.1511 0.1748 -0.9729 +vn 0.4570 -0.2214 -0.8615 +vn 0.0593 -0.2074 -0.9765 +vn -0.0268 -0.2528 -0.9672 +vn -0.5700 -0.3517 -0.7426 +vn -0.0596 0.1388 -0.9885 +vn 0.0677 0.1783 -0.9817 +vn -0.0051 0.2162 -0.9763 +vn 0.4986 -0.3979 -0.7702 +vn 0.1152 0.0339 -0.9928 +vn 0.2903 -0.8769 -0.3832 +vn -0.6270 -0.0343 -0.7783 +vn -0.4251 -0.6846 -0.5921 +vn -0.1022 0.2073 -0.9729 +vn -0.0587 0.0339 -0.9977 +vn 0.2069 0.0655 -0.9762 +vn -0.1668 0.1009 -0.9808 +vn -0.1493 0.0666 -0.9865 +vn -0.0585 0.0161 -0.9982 +vn 0.0615 -0.0836 -0.9946 +vn 0.2425 -0.0812 -0.9668 +vn 0.1264 -0.0726 -0.9893 +vn -0.2565 -0.3680 -0.8938 +vn -0.2652 -0.5414 -0.7978 +vn -0.1338 -0.0497 -0.9898 +vn 0.0552 -0.0799 -0.9953 +vn -0.0263 0.0338 -0.9991 +vn -0.1624 -0.0408 -0.9859 +vn 0.1762 -0.0610 -0.9825 +vn 0.2068 -0.2201 -0.9533 +vn 0.1526 -0.0496 -0.9870 +vn -0.0703 -0.1510 -0.9860 +vn -0.5424 0.0464 -0.8388 +vn 0.1018 0.0717 -0.9922 +vn 0.0123 -0.0537 -0.9985 +vn -0.6192 0.4082 -0.6708 +vn -0.0927 -0.1273 -0.9875 +vn -0.7382 0.5661 -0.3669 +vn -0.1248 0.2625 -0.9568 +vn -0.9588 0.0437 -0.2809 +vn -0.1900 0.4632 -0.8656 +vn -0.0361 0.2159 -0.9757 +vn 0.5274 0.7179 -0.4544 +vn -0.0000 -0.0789 -0.9969 +vn -0.8369 0.2970 -0.4597 +vn -0.2765 -0.8843 -0.3762 +vn -0.0167 -0.1193 -0.9927 +vn -0.0732 -0.0773 -0.9943 +vn -0.1817 -0.1581 -0.9706 +vn -0.5440 -0.6275 -0.5571 +vn 0.0283 0.4296 -0.9026 +vn 0.0536 0.8342 -0.5488 +vn -0.5763 0.7991 -0.1712 +vn -0.5733 0.8085 0.1327 +vn 0.0489 0.2611 0.9641 +vn -0.9191 -0.3708 0.1336 +vn 0.0737 0.7525 0.6545 +vn -0.3658 0.4672 0.8049 +vn -0.4884 0.2158 0.8455 +vn -0.0737 -0.5201 0.8509 +vn -0.7008 0.2274 0.6761 +vn -0.6234 -0.5063 0.5958 +vn 0.7405 -0.4566 0.4931 +vn -0.4781 -0.8584 -0.1856 +vn 0.3922 -0.5958 -0.7008 +vn -0.7233 -0.6343 -0.2730 +vn -0.4440 -0.5616 -0.6982 +vn 0.7532 -0.6573 -0.0233 +vn -0.7492 -0.6609 0.0435 +vn -0.2860 -0.5063 -0.8135 +vn -0.2119 -0.7585 -0.6163 +vn -0.8288 -0.5347 0.1648 +vn -0.5070 -0.8184 0.2705 +vn -0.4571 -0.8753 -0.1576 +vn -0.7138 -0.6891 0.1246 +vn 0.6794 -0.5753 0.4555 +vn -0.3246 -0.9456 -0.0193 +vn -0.0640 -0.8552 0.5144 +vn 0.6671 -0.7427 0.0583 +vn -0.8822 -0.1967 0.4278 +vn -0.8241 -0.5398 0.1715 +vn 0.6225 -0.7800 0.0640 +vn 0.2200 -0.9744 -0.0458 +vn 0.7538 -0.3838 0.5334 +vn 0.1357 0.9561 0.2597 +vn -0.0279 0.9151 -0.4022 +vn 0.6940 -0.6653 -0.2751 +vn 0.8128 -0.3732 -0.4473 +vn 0.9811 -0.1787 -0.0736 +vn 0.7653 0.0062 0.6437 +vn 0.6040 -0.4245 -0.6745 +vn -0.1476 0.9271 0.3445 +vn 0.1280 0.9892 -0.0718 +vn 0.3416 0.7314 -0.5902 +vn -0.2748 -0.9604 0.0466 +vn -0.6207 -0.7809 -0.0695 +vn -0.1031 0.7178 0.6886 +vn -0.6514 -0.7210 0.2363 +vn -0.7384 -0.4003 -0.5427 +vn -0.0328 0.9653 -0.2590 +vn -0.7904 -0.5465 0.2768 +vn -0.9965 -0.0794 0.0247 +vn -0.6028 -0.4654 0.6481 +vn -0.7168 0.0213 -0.6969 +vn -0.2688 0.8414 -0.4688 +vn -0.1016 0.9799 -0.1718 +vn 0.0738 0.8805 -0.4682 +vn -0.5044 0.3662 0.7820 +vn 0.1858 -0.6030 -0.7758 +vn 0.1127 -0.5021 -0.8574 +vn -0.1894 -0.5860 -0.7879 +vn -0.0724 -0.6007 -0.7962 +vn 0.2244 0.5437 -0.8087 +vn 0.1474 0.5825 -0.7993 +vn -0.1189 0.5125 -0.8504 +vn -0.1956 0.6015 -0.7745 +vn 0.4825 0.2664 -0.8344 +vn 0.4708 -0.2433 -0.8480 +vn 0.1716 0.2086 -0.9628 +vn 0.1358 -0.2351 -0.9625 +vn 0.7480 0.0875 -0.6579 +vn 0.7320 -0.1259 -0.6696 +vn 0.7339 0.1375 -0.6652 +vn 0.6890 -0.1489 -0.7093 +vn 0.4040 -0.3233 -0.8557 +vn 0.4509 0.3405 -0.8251 +vn -0.1504 -0.2002 -0.9681 +vn -0.4631 0.2586 -0.8477 +vn -0.1602 0.2272 -0.9606 +vn -0.4841 -0.2367 -0.8424 +vn -0.7333 -0.1000 -0.6726 +vn -0.7191 0.1457 -0.6795 +vn -0.6290 0.1415 -0.7644 +vn -0.7561 -0.0787 -0.6497 +vn -0.5123 -0.2705 -0.8151 +vn -0.3799 -0.4374 -0.8151 +vn -0.3958 0.3972 -0.8280 +vn 0.5200 0.0570 -0.8523 +vn -0.5803 -0.0463 -0.8131 +vn -0.5694 0.0118 -0.8220 +vn -0.2085 0.5475 0.8104 +vn 0.1131 0.6053 0.7879 +vn 0.1383 0.2182 0.9661 +vn -0.2220 0.1295 0.9664 +vn 0.1798 -0.1396 0.9737 +vn -0.2181 -0.0969 0.9711 +vn 0.1461 -0.6233 0.7682 +vn -0.1291 -0.6261 0.7690 +vn -0.6356 0.1565 0.7560 +vn -0.5104 -0.1145 0.8523 +vn -0.7463 -0.1538 0.6477 +vn -0.6763 -0.2680 0.6862 +vn -0.4676 0.3706 0.8025 +vn -0.0939 0.3430 0.9346 +vn -0.1578 -0.3588 0.9200 +vn -0.5264 -0.3899 0.7556 +vn 0.1433 -0.3877 0.9106 +vn 0.5471 -0.1311 0.8267 +vn 0.4301 0.1600 0.8885 +vn 0.7097 0.1451 0.6894 +vn 0.7904 -0.1041 0.6037 +vn 0.4128 0.4516 0.7910 +vn 0.4093 -0.4425 0.7979 +vn 0.6479 -0.3236 0.6896 +vn -0.1954 -0.1141 0.9741 +vn -0.1145 -0.9585 0.2610 +vn 0.0704 -0.4778 0.8757 +vn 0.0833 -0.2408 0.9670 +vn -0.1374 -0.8142 0.5642 +vn 0.1148 -0.9828 0.1449 +vn 0.0817 -0.3858 0.9190 +vn -0.1416 -0.2102 0.9673 +vn 0.1367 -0.2722 0.9525 +vn 0.9516 0.3049 0.0386 +vn -0.0929 -0.0723 0.9931 +vn 0.1137 -0.8732 0.4739 +vn 0.1230 -0.2294 0.9655 +vn -0.1022 -0.2327 0.9672 +vn 0.0103 0.3251 0.9456 +vn 0.0585 -0.0946 0.9938 +vn 0.0908 -0.1276 0.9877 +vn -0.1570 -0.2062 0.9658 +vn -0.1381 0.2309 0.9631 +vn -0.2938 -0.0320 0.9553 +vn -0.0724 0.2063 0.9758 +vn -0.0096 0.3876 0.9218 +vn 0.3362 0.8297 0.4456 +vn -0.2092 -0.3788 0.9015 +vn 0.1120 -0.2012 0.9731 +vn 0.0524 -0.1006 0.9935 +vn 0.2792 0.5220 0.8059 +vn 0.3880 -0.0880 0.9174 +vn 0.3175 -0.7436 0.5884 +vn 0.5712 -0.1070 0.8138 +vn -0.3848 -0.6513 0.6540 +vn -0.1822 -0.2495 0.9511 +vn 0.2469 -0.2203 0.9437 +vn 0.0876 -0.2979 0.9506 +vn -0.0362 0.1017 0.9942 +vn -0.0696 -0.3238 0.9436 +vn -0.4912 0.0540 0.8694 +vn -0.5437 -0.1647 0.8229 +vn -0.5358 -0.3987 0.7443 +vn -0.7382 -0.4259 0.5232 +vn 0.0953 0.2166 0.9716 +vn -0.1889 0.1006 0.9768 +vn 0.0820 0.0432 0.9957 +vn 0.1907 0.1851 0.9640 +vn -0.2089 -0.2658 0.9411 +vn 0.9508 0.1861 0.2479 +vn 0.0666 -0.0147 0.9977 +vn 0.1519 0.0555 0.9868 +vn -0.3405 -0.1713 0.9245 +vn -0.1698 -0.0335 0.9849 +vn -0.4232 -0.0544 0.9044 +vn 0.1714 -0.0624 0.9832 +vn -0.1300 -0.3104 0.9417 +vn -0.1043 -0.0253 0.9942 +vn -0.0560 -0.0163 0.9983 +vn 0.5945 0.6416 0.4847 +vn 0.7940 -0.4725 0.3825 +vn 0.3394 0.1273 0.9320 +vn -0.3965 0.0912 0.9135 +vn -0.2423 -0.4733 0.8469 +vn -0.2135 -0.5737 0.7907 +vn -0.0354 -0.4850 0.8738 +vn 0.3484 0.2039 0.9149 +vn 0.0521 -0.0161 0.9985 +vn 0.1112 -0.1405 0.9838 +vn -0.2576 0.2144 0.9422 +vn 0.1304 -0.1090 0.9854 +vn 0.0927 -0.1271 0.9875 +vn 0.1811 -0.0467 0.9824 +vn -0.2696 0.2033 0.9413 +vn -0.3285 0.2989 0.8960 +vn -0.1555 0.7141 0.6826 +vn -0.1880 -0.1785 0.9658 +vn 0.0176 0.1597 0.9870 +vn -0.0988 0.2161 0.9714 +vn -0.1342 0.2324 0.9633 +vn 0.1018 0.0426 0.9939 +vn 0.5033 0.2108 0.8380 +vn 0.6531 -0.3103 0.6907 +vn 0.0330 0.1493 0.9882 +vn -0.0035 0.1746 0.9846 +vn 0.2310 0.2492 0.9405 +vn -0.2601 0.2303 0.9377 +vn -0.0941 0.3059 0.9474 +vn 0.1566 0.0413 0.9868 +vn -0.8303 0.2365 0.5047 +vn 0.0852 0.3178 0.9443 +vn 0.7815 -0.0647 0.6206 +vn 0.1288 -0.2674 0.9549 +vn 0.1212 0.2034 0.9716 +vn 0.0294 0.4907 0.8708 +vn 0.8639 0.3518 -0.3603 +vn 0.9922 0.1235 0.0139 +vn 0.6928 0.2033 -0.6919 +vn 0.1386 0.6737 -0.7259 +vn 0.0172 0.2734 -0.9618 +vn -0.4725 0.5078 -0.7203 +vn 0.4500 -0.5310 -0.7180 +vn 0.6216 0.0674 -0.7804 +vn 0.4501 0.0224 -0.8927 +vn 0.3030 0.5970 -0.7428 +vn 0.6206 0.4965 0.6069 +vn 0.5774 -0.5817 -0.5730 +vn 0.3073 0.4744 0.8249 +vn 0.4555 0.0414 -0.8893 +vn 0.3397 -0.8410 -0.4211 +vn -0.3546 0.9185 0.1752 +vn -0.0052 0.5938 -0.8046 +vn 0.1995 -0.0582 -0.9782 +vn 0.2384 -0.5624 0.7917 +vn -0.0743 0.8943 -0.4412 +vn -0.0806 -0.9957 0.0462 +vn 0.0893 0.9931 0.0763 +vn -0.0671 0.0913 -0.9936 +vn 0.4011 -0.8510 0.3390 +vn -0.6950 0.2168 -0.6855 +vn 0.5256 0.0095 -0.8507 +vn -0.1027 -0.0989 -0.9898 +vn 0.7995 0.2082 -0.5634 +vn 0.5202 -0.5066 -0.6876 +vn -0.5287 0.0864 -0.8444 +vn -0.2072 -0.5258 -0.8250 +vn 0.2374 -0.9005 -0.3642 +vn -0.3690 -0.1612 -0.9154 +vn 0.2705 -0.7553 -0.5970 +vn -0.0777 -0.2088 -0.9749 +vn 0.2166 -0.6953 -0.6853 +vn -0.1041 -0.9572 -0.2701 +vn 0.1825 -0.3529 -0.9177 +vn 0.0546 -0.2835 -0.9574 +vn 0.0613 -0.3088 -0.9491 +vn -0.0629 -0.0894 -0.9940 +vn -0.0202 0.3089 -0.9509 +vn 0.0688 -0.0785 -0.9945 +vn -0.4407 -0.8754 -0.1986 +vn -0.4554 -0.8062 -0.3777 +vn -0.9892 -0.1326 -0.0619 +vn 0.0992 -0.0820 -0.9917 +vn 0.1351 -0.1746 -0.9753 +vn 0.0272 -0.1318 -0.9909 +vn -0.1316 0.2357 -0.9629 +vn -0.0087 0.4979 -0.8672 +vn 0.0695 0.2084 -0.9756 +vn 0.0062 0.3863 -0.9223 +vn 0.1503 0.1690 -0.9741 +vn 0.3768 -0.2316 -0.8969 +vn -0.4761 -0.3139 -0.8214 +vn 0.0673 0.0946 -0.9932 +vn -0.0067 -0.2521 -0.9677 +vn -0.0581 0.1445 -0.9878 +vn 0.0400 0.1301 -0.9907 +vn -0.0033 0.2162 -0.9763 +vn 0.6741 -0.4721 -0.5681 +vn 0.1326 0.0641 -0.9891 +vn 0.2151 -0.7129 -0.6674 +vn -0.6713 -0.1839 -0.7180 +vn -0.8873 -0.1645 -0.4308 +vn -0.1020 0.2056 -0.9733 +vn -0.0585 0.0334 -0.9977 +vn 0.2023 0.0675 -0.9770 +vn -0.1388 0.1077 -0.9844 +vn -0.1575 0.0790 -0.9844 +vn -0.0603 0.0168 -0.9980 +vn 0.0708 -0.1151 -0.9908 +vn 0.2372 -0.0818 -0.9680 +vn 0.1702 -0.0189 -0.9852 +vn -0.5740 -0.5475 -0.6089 +vn -0.7781 -0.5164 -0.3576 +vn 0.1506 -0.2808 -0.9479 +vn -0.1505 -0.0568 -0.9870 +vn 0.0740 -0.0811 -0.9940 +vn -0.9811 0.0025 -0.1935 +vn -0.1379 -0.0352 -0.9898 +vn -0.0384 -0.1785 -0.9832 +vn 0.1456 -0.1068 -0.9836 +vn -0.0702 -0.1483 -0.9865 +vn -0.0072 -0.0731 -0.9973 +vn -0.3920 0.3805 -0.8376 +vn 0.0898 0.0799 -0.9928 +vn -0.9528 -0.1727 -0.2497 +vn -0.2801 -0.7916 -0.5431 +vn -0.3211 -0.1902 -0.9277 +vn -0.7442 0.5581 -0.3671 +vn -0.1452 0.2542 -0.9562 +vn -0.8915 0.3517 -0.2855 +vn -0.0595 0.2121 -0.9754 +vn 0.5334 0.7021 -0.4718 +vn -0.0075 -0.0940 -0.9955 +vn -0.8603 -0.1793 -0.4771 +vn -0.8748 0.3233 -0.3609 +vn -0.0114 -0.1189 -0.9928 +vn -0.0768 -0.0868 -0.9933 +vn -0.1752 -0.1588 -0.9716 +vn -0.5257 -0.6322 -0.5692 +vn 0.0468 0.4292 -0.9020 +vn 0.0508 0.8351 -0.5478 +vn -0.6042 0.7594 -0.2412 +vn -0.5726 0.8091 0.1325 +vn 0.0489 0.2612 0.9641 +vn -0.3691 0.4596 0.8078 +vn -0.5948 0.2165 0.7742 +vn -0.0731 -0.4351 0.8974 +vn -0.7720 0.2332 0.5913 +vn 0.8245 -0.4588 0.3312 +vn -0.6177 -0.7219 -0.3120 +vn 0.1556 -0.6929 -0.7040 +vn -0.7237 -0.6349 -0.2706 +vn -0.4915 -0.7342 -0.4684 +vn 0.6843 -0.7149 0.1433 +vn -0.2860 -0.5062 -0.8136 +vn -0.2119 -0.7584 -0.6164 +vn -0.8290 -0.5346 0.1643 +vn -0.1245 -0.9368 0.3271 +vn -0.2020 -0.6076 0.7681 +vn -0.7158 -0.6878 0.1205 +vn 0.6769 -0.5798 0.4535 +vn -0.3171 -0.9484 0.0019 +vn -0.4684 -0.7032 0.5349 +vn 0.6491 -0.7573 0.0717 +vn -0.9501 -0.1353 0.2811 +vn 0.6220 -0.7804 0.0643 +vn 0.2735 -0.9608 -0.0446 +vn 0.7307 -0.4009 0.5525 +vn -0.3520 0.9117 0.2120 +vn -0.3034 0.8278 -0.4720 +vn 0.7010 -0.6791 -0.2176 +vn 0.7907 -0.5485 -0.2720 +vn 0.9960 -0.0894 0.0064 +vn 0.5452 0.1594 0.8230 +vn 0.5696 -0.3444 -0.7463 +vn 0.2242 0.7713 0.5957 +vn 0.3525 0.9354 0.0280 +vn -0.3330 0.7133 0.6167 +vn 0.3802 0.4962 -0.7805 +vn -0.2731 -0.9610 0.0441 +vn -0.6221 -0.7802 -0.0658 +vn 0.0051 0.6870 0.7267 +vn -0.6274 -0.7261 0.2815 +vn -0.7853 -0.3101 -0.5358 +vn -0.3999 0.7929 -0.4597 +vn -0.8273 -0.2389 0.5084 +vn -0.9850 -0.1657 0.0491 +vn -0.5273 -0.4796 0.7014 +vn 0.1687 0.9346 -0.3130 +vn -0.0105 0.9937 0.1118 +vn -0.3991 0.4258 0.8120 +vn 0.2050 -0.5984 -0.7745 +vn 0.1724 -0.5011 -0.8481 +vn -0.1884 -0.5870 -0.7873 +vn -0.0740 -0.5993 -0.7971 +vn 0.1730 0.4950 -0.8515 +vn 0.1451 0.5769 -0.8038 +vn -0.2094 0.4939 -0.8439 +vn -0.2029 0.6021 -0.7722 +vn 0.4867 0.2689 -0.8312 +vn 0.4937 -0.2195 -0.8415 +vn 0.1706 0.2094 -0.9628 +vn 0.1391 -0.2366 -0.9616 +vn 0.7468 0.1006 -0.6574 +vn 0.7446 -0.1311 -0.6545 +vn 0.7266 0.1747 -0.6645 +vn 0.7146 -0.1078 -0.6912 +vn 0.4779 -0.3399 -0.8100 +vn 0.4378 0.4611 -0.7718 +vn -0.1506 -0.2005 -0.9681 +vn -0.4827 0.2465 -0.8404 +vn -0.1610 0.2337 -0.9589 +vn -0.4836 -0.2390 -0.8420 +vn -0.7285 -0.1036 -0.6771 +vn -0.7381 0.1533 -0.6570 +vn -0.7258 0.0806 -0.6831 +vn -0.6696 -0.0607 -0.7402 +vn -0.5007 -0.2900 -0.8156 +vn -0.3791 -0.4366 -0.8159 +vn -0.4503 0.3589 -0.8176 +vn 0.5811 0.0680 -0.8110 +vn -0.1221 0.6447 0.7546 +vn 0.0977 0.6095 0.7868 +vn 0.1519 0.2116 0.9655 +vn -0.2002 0.1318 0.9708 +vn 0.1732 -0.1419 0.9746 +vn -0.2139 -0.1019 0.9715 +vn 0.1565 -0.6187 0.7698 +vn -0.1427 -0.6189 0.7724 +vn -0.5048 0.1681 0.8467 +vn -0.5185 -0.1145 0.8474 +vn -0.7332 -0.1441 0.6646 +vn -0.7179 0.1598 0.6775 +vn -0.4140 0.4448 0.7942 +vn -0.0978 0.3770 0.9211 +vn -0.1576 -0.3589 0.9200 +vn -0.5055 -0.4032 0.7628 +vn 0.1500 -0.3948 0.9064 +vn 0.5188 -0.1171 0.8468 +vn 0.4883 0.1148 0.8651 +vn 0.7490 -0.1454 0.6465 +vn 0.7701 0.0927 0.6311 +vn 0.8433 -0.0034 0.5375 +vn 0.5576 0.3439 0.7556 +vn 0.3136 0.4850 0.8163 +vn 0.4770 -0.4030 0.7811 +# UV coordinates: 1 'general' dummy, 4 for the backplate +vt 0 1 0 +vt 0.997862 1.79999 0 +vt 0.00213805 1.79999 0 +vt 1 0.799992 0 +vt 0 0.799992 0 +f 1/1/1 2/1/2 3/1/3 +f 4/1/4 1/1/1 3/1/3 +f 5/1/5 4/1/4 3/1/3 +f 6/1/6 5/1/5 3/1/3 +f 324/1/7 6/1/6 3/1/3 +f 331/1/8 324/1/7 3/1/3 +f 7/1/9 331/1/8 3/1/3 +f 8/1/10 7/1/9 3/1/3 +f 1/1/1 9/1/11 2/1/2 +f 9/1/11 10/1/12 2/1/2 +f 4/1/4 11/1/13 1/1/1 +f 10/1/12 12/1/14 2/1/2 +f 10/1/12 13/1/15 12/1/14 +f 10/1/12 14/1/16 13/1/15 +f 10/1/12 214/1/17 14/1/16 +f 8/1/10 15/1/18 7/1/9 +f 15/1/18 16/1/19 7/1/9 +f 15/1/18 17/1/20 16/1/19 +f 20/1/21 21/1/22 19/1/23 +f 22/1/24 20/1/21 19/1/23 +f 21/1/22 23/1/25 19/1/23 +f 24/1/26 22/1/24 19/1/23 +f 23/1/25 18/1/27 19/1/23 +f 25/1/28 22/1/24 24/1/26 +f 26/1/29 25/1/28 24/1/26 +f 27/1/30 26/1/29 24/1/26 +f 28/1/31 27/1/30 24/1/26 +f 29/1/32 18/1/27 23/1/25 +f 30/1/33 18/1/27 29/1/32 +f 31/1/34 32/1/35 33/1/36 +f 32/1/35 34/1/37 33/1/36 +f 34/1/37 35/1/38 33/1/36 +f 35/1/38 36/1/39 33/1/36 +f 36/1/39 37/1/40 33/1/36 +f 37/1/40 38/1/41 33/1/36 +f 39/1/42 32/1/35 31/1/34 +f 40/1/43 39/1/42 31/1/34 +f 464/1/44 34/1/37 32/1/35 +f 41/1/45 40/1/43 31/1/34 +f 42/1/46 40/1/43 41/1/45 +f 43/1/47 40/1/43 42/1/46 +f 500/1/48 38/1/41 37/1/40 +f 516/1/49 38/1/41 500/1/48 +f 504/1/50 516/1/49 500/1/48 +f 44/1/51 516/1/49 504/1/50 +f 47/1/52 45/1/53 46/1/54 +f 45/1/53 48/1/55 46/1/54 +f 49/1/56 47/1/52 46/1/54 +f 48/1/55 50/1/57 46/1/54 +f 51/1/58 49/1/56 46/1/54 +f 48/1/55 52/1/59 50/1/57 +f 52/1/59 53/1/60 50/1/57 +f 53/1/60 54/1/61 50/1/57 +f 51/1/58 55/1/62 49/1/56 +f 58/1/63 59/1/64 56/1/65 +f 60/1/66 61/1/67 57/1/68 +f 61/1/67 62/1/69 57/1/68 +f 63/1/70 59/1/64 58/1/63 +f 61/1/67 64/1/71 62/1/69 +f 65/1/72 63/1/70 58/1/63 +f 66/1/73 65/1/72 58/1/63 +f 64/1/71 67/1/74 62/1/69 +f 68/1/75 65/1/72 66/1/73 +f 64/1/71 69/1/76 67/1/74 +f 69/1/76 70/1/77 67/1/74 +f 71/1/78 65/1/72 68/1/75 +f 72/1/79 71/1/78 68/1/75 +f 69/1/76 73/1/80 70/1/77 +f 73/1/80 74/1/81 70/1/77 +f 75/1/82 71/1/78 72/1/79 +f 76/1/83 75/1/82 72/1/79 +f 73/1/80 77/1/84 74/1/81 +f 77/1/84 78/1/85 74/1/81 +f 79/1/86 75/1/82 76/1/83 +f 80/1/87 79/1/86 76/1/83 +f 77/1/84 81/1/88 78/1/85 +f 81/1/88 82/1/89 78/1/85 +f 83/1/90 79/1/86 80/1/87 +f 84/1/91 83/1/90 80/1/87 +f 81/1/88 85/1/92 82/1/89 +f 85/1/92 84/1/91 82/1/89 +f 85/1/92 83/1/90 84/1/91 +f 86/1/93 87/1/94 88/1/95 +f 89/1/96 87/1/94 86/1/93 +f 90/1/97 91/1/98 92/1/99 +f 87/1/94 91/1/98 90/1/97 +f 97/1/100 95/1/101 96/1/102 +f 95/1/101 98/1/103 96/1/102 +f 99/1/104 95/1/101 97/1/100 +f 100/1/105 94/1/106 93/1/107 +f 95/1/101 101/1/108 98/1/103 +f 102/1/109 95/1/101 99/1/104 +f 103/1/110 94/1/106 100/1/105 +f 104/1/111 94/1/106 103/1/110 +f 105/1/112 106/1/113 101/1/108 +f 95/1/101 105/1/112 101/1/108 +f 107/1/114 95/1/101 102/1/109 +f 108/1/115 109/1/116 107/1/114 +f 109/1/116 95/1/101 107/1/114 +f 110/1/117 106/1/113 105/1/112 +f 111/1/118 94/1/106 104/1/111 +f 110/1/117 112/1/119 106/1/113 +f 113/1/120 94/1/106 111/1/118 +f 114/1/121 113/1/120 111/1/118 +f 110/1/117 115/1/122 112/1/119 +f 110/1/117 113/1/120 114/1/121 +f 115/1/122 110/1/117 114/1/121 +f 118/1/123 119/1/124 120/1/125 +f 121/1/126 118/1/123 120/1/125 +f 118/1/123 122/1/127 119/1/124 +f 116/1/128 123/1/129 117/1/130 +f 118/1/123 124/1/131 122/1/127 +f 125/1/132 118/1/123 121/1/126 +f 116/1/128 126/1/133 123/1/129 +f 127/1/134 118/1/123 125/1/132 +f 128/1/135 127/1/134 125/1/132 +f 118/1/123 129/1/136 124/1/131 +f 118/1/123 130/1/137 129/1/136 +f 128/1/135 131/1/138 127/1/134 +f 132/1/139 130/1/137 118/1/123 +f 116/1/128 133/1/140 126/1/133 +f 134/1/141 131/1/138 128/1/135 +f 135/1/142 136/1/143 133/1/140 +f 116/1/128 135/1/142 133/1/140 +f 137/1/144 131/1/138 134/1/141 +f 135/1/142 137/1/144 136/1/143 +f 135/1/142 131/1/138 137/1/144 +f 138/1/145 139/1/146 140/1/147 +f 56/1/65 141/1/148 142/1/149 +f 143/1/150 139/1/146 138/1/145 +f 141/1/148 144/1/151 142/1/149 +f 145/1/152 146/1/153 144/1/151 +f 141/1/148 145/1/152 144/1/151 +f 147/1/154 139/1/146 143/1/150 +f 148/1/155 146/1/153 145/1/152 +f 56/1/65 149/1/156 141/1/148 +f 150/1/157 139/1/146 147/1/154 +f 148/1/155 151/1/158 146/1/153 +f 59/1/64 149/1/156 56/1/65 +f 152/1/159 139/1/146 150/1/157 +f 148/1/155 153/1/160 151/1/158 +f 154/1/161 139/1/146 152/1/159 +f 148/1/155 154/1/161 152/1/159 +f 153/1/160 148/1/155 152/1/159 +f 154/1/161 155/1/162 139/1/146 +f 155/1/162 156/1/163 139/1/146 +f 156/1/163 157/1/164 139/1/146 +f 157/1/164 158/1/165 139/1/146 +f 158/1/165 159/1/166 139/1/146 +f 159/1/166 160/1/167 139/1/146 +f 160/1/167 161/1/168 139/1/146 +f 162/1/169 161/1/168 160/1/167 +f 163/1/170 161/1/168 162/1/169 +f 164/1/171 163/1/170 162/1/169 +f 165/1/172 163/1/170 164/1/171 +f 166/1/173 163/1/170 165/1/172 +f 167/1/174 163/1/170 166/1/173 +f 113/1/120 168/1/175 94/1/106 +f 168/1/175 169/1/176 94/1/106 +f 169/1/176 170/1/177 94/1/106 +f 170/1/177 171/1/178 94/1/106 +f 171/1/178 172/1/179 94/1/106 +f 172/1/179 173/1/180 94/1/106 +f 173/1/180 174/1/181 94/1/106 +f 175/1/182 174/1/181 173/1/180 +f 176/1/183 174/1/181 175/1/182 +f 177/1/184 176/1/183 175/1/182 +f 178/1/185 176/1/183 177/1/184 +f 179/1/186 176/1/183 178/1/185 +f 180/1/187 176/1/183 179/1/186 +f 181/1/188 176/1/183 180/1/187 +f 174/1/181 176/1/183 293/1/189 +f 176/1/183 295/1/190 293/1/189 +f 161/1/168 163/1/170 182/1/191 +f 163/1/170 183/1/192 182/1/191 +f 184/1/193 185/1/194 116/1/128 +f 185/1/194 135/1/142 116/1/128 +f 186/1/195 184/1/193 116/1/128 +f 187/1/196 186/1/195 116/1/128 +f 188/1/197 187/1/196 116/1/128 +f 189/1/198 188/1/197 116/1/128 +f 182/1/191 189/1/198 116/1/128 +f 182/1/191 183/1/192 189/1/198 +f 183/1/192 190/1/199 189/1/198 +f 183/1/192 191/1/200 190/1/199 +f 183/1/192 192/1/201 191/1/200 +f 183/1/192 193/1/202 192/1/201 +f 194/1/203 205/1/204 132/1/139 +f 149/1/156 194/1/203 132/1/139 +f 205/1/204 202/1/205 132/1/139 +f 202/1/205 130/1/137 132/1/139 +f 59/1/64 63/1/70 149/1/156 +f 63/1/70 194/1/203 149/1/156 +f 61/1/67 60/1/66 195/1/206 +f 196/1/207 200/1/208 195/1/206 +f 200/1/208 64/1/71 195/1/206 +f 64/1/71 61/1/67 195/1/206 +f 197/1/209 198/1/210 196/1/207 +f 198/1/210 557/1/211 196/1/207 +f 557/1/211 200/1/208 196/1/207 +f 65/1/72 194/1/203 63/1/70 +f 71/1/78 194/1/203 65/1/72 +f 200/1/208 69/1/76 64/1/71 +f 199/1/212 194/1/203 71/1/78 +f 88/1/95 291/1/213 71/1/78 +f 291/1/213 199/1/212 71/1/78 +f 200/1/208 73/1/80 69/1/76 +f 75/1/82 88/1/95 71/1/78 +f 200/1/208 77/1/84 73/1/80 +f 201/1/214 202/1/205 205/1/204 +f 198/1/210 203/1/215 557/1/211 +f 203/1/215 204/1/216 557/1/211 +f 79/1/86 88/1/95 75/1/82 +f 81/1/88 77/1/84 200/1/208 +f 88/1/95 85/1/92 200/1/208 +f 85/1/92 81/1/88 200/1/208 +f 204/1/216 556/1/217 557/1/211 +f 206/1/218 88/1/95 200/1/208 +f 207/1/219 201/1/214 205/1/204 +f 204/1/216 555/1/220 556/1/217 +f 83/1/90 88/1/95 79/1/86 +f 204/1/216 552/1/221 555/1/220 +f 204/1/216 208/1/222 552/1/221 +f 211/1/223 201/1/214 207/1/219 +f 85/1/92 88/1/95 83/1/90 +f 210/1/224 209/1/225 207/1/219 +f 209/1/225 211/1/223 207/1/219 +f 86/1/93 88/1/95 206/1/218 +f 213/1/226 212/1/227 552/1/221 +f 208/1/222 213/1/226 552/1/221 +f 154/1/161 148/1/155 135/1/142 +f 148/1/155 131/1/138 135/1/142 +f 262/1/228 316/1/229 113/1/120 +f 110/1/117 262/1/228 113/1/120 +f 189/1/198 160/1/167 188/1/197 +f 189/1/198 162/1/169 160/1/167 +f 214/1/17 215/1/230 25/1/28 +f 216/1/231 215/1/230 214/1/17 +f 217/1/232 216/1/231 214/1/17 +f 218/1/233 217/1/232 214/1/17 +f 219/1/234 217/1/232 218/1/233 +f 220/1/235 219/1/234 218/1/233 +f 245/1/236 220/1/235 218/1/233 +f 221/1/237 220/1/235 245/1/236 +f 91/1/98 239/1/238 210/1/224 +f 239/1/238 209/1/225 210/1/224 +f 223/1/239 222/1/240 690/1/241 +f 220/1/235 223/1/239 690/1/241 +f 222/1/240 224/1/242 690/1/241 +f 225/5/243 589/2/244 690/3/241 +f 224/1/242 225/1/243 690/1/241 +f 226/1/245 448/1/246 589/1/244 +f 227/1/247 226/1/245 589/1/244 +f 225/5/243 228/4/248 589/2/244 +f 228/1/248 229/1/249 589/1/244 +f 229/1/249 227/1/247 589/1/244 +f 230/1/250 228/1/248 225/1/243 +f 87/1/94 89/1/96 225/1/243 +f 89/1/96 232/1/251 225/1/243 +f 232/1/251 231/1/252 225/1/243 +f 231/1/252 230/1/250 225/1/243 +f 233/1/253 91/1/98 225/1/243 +f 91/1/98 87/1/94 225/1/243 +f 234/1/254 448/1/246 226/1/245 +f 220/1/235 235/1/255 223/1/239 +f 236/1/256 91/1/98 233/1/253 +f 221/1/237 237/1/257 235/1/255 +f 220/1/235 221/1/237 235/1/255 +f 238/1/258 448/1/246 234/1/254 +f 239/1/238 91/1/98 236/1/256 +f 89/1/96 240/1/259 232/1/251 +f 243/1/260 241/1/261 242/1/262 +f 241/1/261 244/1/263 242/1/262 +f 244/1/263 218/1/233 242/1/262 +f 109/1/116 108/1/115 242/1/262 +f 108/1/115 243/1/260 242/1/262 +f 245/1/236 218/1/233 244/1/263 +f 3/1/3 24/1/26 19/1/23 +f 2/1/2 24/1/26 3/1/3 +f 568/1/264 246/1/265 247/1/266 +f 626/1/267 246/1/265 568/1/264 +f 581/1/268 582/1/269 781/1/270 +f 582/1/269 684/1/271 781/1/270 +f 248/1/272 175/1/182 249/1/273 +f 175/1/182 173/1/180 249/1/273 +f 108/1/115 224/1/242 243/1/260 +f 225/1/243 224/1/242 108/1/115 +f 130/1/137 225/1/243 108/1/115 +f 202/1/205 225/1/243 130/1/137 +f 129/1/136 130/1/137 107/1/114 +f 130/1/137 108/1/115 107/1/114 +f 116/1/128 93/1/107 94/1/106 +f 117/1/130 93/1/107 116/1/128 +f 123/1/129 126/1/133 103/1/110 +f 126/1/133 104/1/111 103/1/110 +f 136/1/143 137/1/144 114/1/121 +f 137/1/144 115/1/122 114/1/121 +f 106/1/113 125/1/132 101/1/108 +f 106/1/113 128/1/135 125/1/132 +f 120/1/125 119/1/124 96/1/102 +f 119/1/124 97/1/100 96/1/102 +f 250/1/274 341/1/275 144/1/151 +f 146/1/153 250/1/274 144/1/151 +f 337/1/276 339/1/277 152/1/159 +f 339/1/277 153/1/160 152/1/159 +f 340/1/278 147/1/154 143/1/150 +f 251/1/279 147/1/154 340/1/278 +f 252/1/280 138/1/145 140/1/147 +f 253/1/281 138/1/145 252/1/280 +f 254/1/282 56/1/65 142/1/149 +f 57/1/68 56/1/65 254/1/282 +f 57/1/68 68/1/75 56/1/65 +f 72/1/79 68/1/75 57/1/68 +f 68/1/75 58/1/63 56/1/65 +f 80/1/87 76/1/83 57/1/68 +f 62/1/69 82/1/89 57/1/68 +f 82/1/89 84/1/91 57/1/68 +f 84/1/91 80/1/87 57/1/68 +f 76/1/83 72/1/79 57/1/68 +f 74/1/81 78/1/85 62/1/69 +f 78/1/85 82/1/89 62/1/69 +f 68/1/75 66/1/73 58/1/63 +f 67/1/74 74/1/81 62/1/69 +f 70/1/77 74/1/81 67/1/74 +f 255/1/283 256/1/284 105/1/112 +f 95/1/101 255/1/283 105/1/112 +f 257/1/285 266/1/286 261/1/287 +f 265/1/288 266/1/286 257/1/285 +f 256/1/284 110/1/117 105/1/112 +f 258/1/289 110/1/117 256/1/284 +f 259/1/290 110/1/117 258/1/289 +f 260/1/291 110/1/117 259/1/290 +f 11/1/13 261/1/287 1/1/1 +f 257/1/285 110/1/117 260/1/291 +f 11/1/13 262/1/228 261/1/287 +f 262/1/228 257/1/285 261/1/287 +f 262/1/228 110/1/117 257/1/285 +f 109/1/116 255/1/283 95/1/101 +f 109/1/116 263/1/292 255/1/283 +f 109/1/116 264/1/293 263/1/292 +f 109/1/116 265/1/288 264/1/293 +f 266/1/286 10/1/12 9/1/11 +f 242/1/262 10/1/12 266/1/286 +f 265/1/288 109/1/116 266/1/286 +f 109/1/116 242/1/262 266/1/286 +f 267/1/294 268/1/295 145/1/152 +f 141/1/148 267/1/294 145/1/152 +f 282/1/296 273/1/297 270/1/298 +f 269/1/299 273/1/297 282/1/296 +f 270/1/298 271/1/300 272/1/301 +f 270/1/298 273/1/297 271/1/300 +f 272/1/301 274/1/302 279/1/303 +f 271/1/300 274/1/302 272/1/301 +f 275/1/304 118/1/123 127/1/134 +f 275/1/304 276/1/305 118/1/123 +f 268/1/295 148/1/155 145/1/152 +f 131/1/138 275/1/304 127/1/134 +f 131/1/138 277/1/306 275/1/304 +f 131/1/138 278/1/307 277/1/306 +f 131/1/138 279/1/303 278/1/307 +f 131/1/138 270/1/298 279/1/303 +f 270/1/298 272/1/301 279/1/303 +f 280/1/308 148/1/155 268/1/295 +f 281/1/309 148/1/155 280/1/308 +f 282/1/296 148/1/155 281/1/309 +f 148/1/155 282/1/296 270/1/298 +f 131/1/138 148/1/155 270/1/298 +f 149/1/156 267/1/294 141/1/148 +f 276/1/305 132/1/139 118/1/123 +f 283/1/310 132/1/139 276/1/305 +f 284/1/311 132/1/139 283/1/310 +f 285/1/312 132/1/139 284/1/311 +f 274/1/302 132/1/139 285/1/312 +f 271/1/300 132/1/139 274/1/302 +f 273/1/297 132/1/139 271/1/300 +f 149/1/156 286/1/313 267/1/294 +f 149/1/156 287/1/314 286/1/313 +f 149/1/156 288/1/315 287/1/314 +f 149/1/156 269/1/299 288/1/315 +f 149/1/156 132/1/139 273/1/297 +f 269/1/299 149/1/156 273/1/297 +f 351/1/316 344/1/317 289/1/318 +f 344/1/317 290/1/319 289/1/318 +f 92/1/99 348/1/320 353/1/321 +f 91/1/98 210/1/224 92/1/99 +f 210/1/224 348/1/320 92/1/99 +f 210/1/224 207/1/219 348/1/320 +f 88/1/95 90/1/97 347/1/322 +f 342/1/323 88/1/95 347/1/322 +f 88/1/95 87/1/94 90/1/97 +f 291/1/213 88/1/95 342/1/323 +f 190/1/199 162/1/169 189/1/198 +f 190/1/199 164/1/171 162/1/169 +f 191/1/200 164/1/171 190/1/199 +f 191/1/200 165/1/172 164/1/171 +f 192/1/201 165/1/172 191/1/200 +f 192/1/201 166/1/173 165/1/172 +f 193/1/202 166/1/173 192/1/201 +f 193/1/202 167/1/174 166/1/173 +f 183/1/192 167/1/174 193/1/202 +f 183/1/192 163/1/170 167/1/174 +f 299/1/324 175/1/182 248/1/272 +f 299/1/324 177/1/184 175/1/182 +f 301/1/325 177/1/184 299/1/324 +f 301/1/325 178/1/185 177/1/184 +f 304/1/326 178/1/185 301/1/325 +f 304/1/326 179/1/186 178/1/185 +f 306/1/327 179/1/186 304/1/326 +f 309/1/328 179/1/186 306/1/327 +f 309/1/328 180/1/187 179/1/186 +f 181/1/188 180/1/187 309/1/328 +f 312/1/329 181/1/188 309/1/328 +f 176/1/183 181/1/188 312/1/329 +f 295/1/190 176/1/183 312/1/329 +f 135/1/142 155/1/162 154/1/161 +f 185/1/194 155/1/162 135/1/142 +f 185/1/194 156/1/163 155/1/162 +f 184/1/193 156/1/163 185/1/194 +f 184/1/193 157/1/164 156/1/163 +f 186/1/195 157/1/164 184/1/193 +f 186/1/195 158/1/165 157/1/164 +f 187/1/196 158/1/165 186/1/195 +f 187/1/196 159/1/166 158/1/165 +f 188/1/197 159/1/166 187/1/196 +f 188/1/197 160/1/167 159/1/166 +f 316/1/229 168/1/175 113/1/120 +f 317/1/330 168/1/175 316/1/229 +f 319/1/331 168/1/175 317/1/330 +f 319/1/331 169/1/176 168/1/175 +f 321/1/332 169/1/176 319/1/331 +f 321/1/332 170/1/177 169/1/176 +f 322/1/333 170/1/177 321/1/332 +f 322/1/333 171/1/178 170/1/177 +f 326/1/334 171/1/178 322/1/333 +f 327/1/335 171/1/178 326/1/334 +f 327/1/335 172/1/179 171/1/178 +f 330/1/336 172/1/179 327/1/335 +f 330/1/336 173/1/180 172/1/179 +f 333/1/337 173/1/180 330/1/336 +f 249/1/273 173/1/180 333/1/337 +f 8/1/10 292/1/338 15/1/18 +f 293/1/189 292/1/338 8/1/10 +f 293/1/189 294/1/339 292/1/338 +f 293/1/189 295/1/190 294/1/339 +f 298/1/340 297/1/341 296/1/342 +f 298/1/340 299/1/324 297/1/341 +f 299/1/324 248/1/272 297/1/341 +f 16/1/19 296/1/342 7/1/9 +f 16/1/19 300/1/343 296/1/342 +f 300/1/343 298/1/340 296/1/342 +f 300/1/343 299/1/324 298/1/340 +f 300/1/343 301/1/325 299/1/324 +f 303/1/344 300/1/343 16/1/19 +f 303/1/344 301/1/325 300/1/343 +f 302/1/345 303/1/344 16/1/19 +f 304/1/326 301/1/325 303/1/344 +f 17/1/20 302/1/345 16/1/19 +f 17/1/20 305/1/346 302/1/345 +f 305/1/346 303/1/344 302/1/345 +f 305/1/346 304/1/326 303/1/344 +f 306/1/327 304/1/326 305/1/346 +f 307/1/347 305/1/346 17/1/20 +f 307/1/347 308/1/348 305/1/346 +f 308/1/348 306/1/327 305/1/346 +f 308/1/348 309/1/328 306/1/327 +f 15/1/18 307/1/347 17/1/20 +f 15/1/18 310/1/349 307/1/347 +f 310/1/349 308/1/348 307/1/347 +f 310/1/349 311/1/350 308/1/348 +f 311/1/350 309/1/328 308/1/348 +f 292/1/338 310/1/349 15/1/18 +f 311/1/350 312/1/329 309/1/328 +f 292/1/338 294/1/339 310/1/349 +f 294/1/339 311/1/350 310/1/349 +f 294/1/339 312/1/329 311/1/350 +f 294/1/339 295/1/190 312/1/329 +f 313/1/351 297/1/341 249/1/273 +f 297/1/341 248/1/272 249/1/273 +f 7/1/9 296/1/342 331/1/8 +f 296/1/342 332/1/352 331/1/8 +f 296/1/342 313/1/351 332/1/352 +f 296/1/342 297/1/341 313/1/351 +f 5/1/5 314/1/353 4/1/4 +f 314/1/353 315/1/354 4/1/4 +f 314/1/353 317/1/330 315/1/354 +f 317/1/330 316/1/229 315/1/354 +f 318/1/355 317/1/330 314/1/353 +f 5/1/5 318/1/355 314/1/353 +f 318/1/355 319/1/331 317/1/330 +f 5/1/5 320/1/356 318/1/355 +f 321/1/332 319/1/331 318/1/355 +f 320/1/356 321/1/332 318/1/355 +f 6/1/6 320/1/356 5/1/5 +f 322/1/333 321/1/332 320/1/356 +f 323/1/357 320/1/356 6/1/6 +f 323/1/357 322/1/333 320/1/356 +f 324/1/7 325/1/358 6/1/6 +f 325/1/358 323/1/357 6/1/6 +f 325/1/358 326/1/334 323/1/357 +f 326/1/334 322/1/333 323/1/357 +f 327/1/335 326/1/334 325/1/358 +f 328/1/359 325/1/358 324/1/7 +f 328/1/359 329/1/360 325/1/358 +f 329/1/360 327/1/335 325/1/358 +f 329/1/360 330/1/336 327/1/335 +f 331/1/8 328/1/359 324/1/7 +f 331/1/8 332/1/352 328/1/359 +f 332/1/352 329/1/360 328/1/359 +f 332/1/352 333/1/337 329/1/360 +f 333/1/337 330/1/336 329/1/360 +f 313/1/351 333/1/337 332/1/352 +f 313/1/351 249/1/273 333/1/337 +f 315/1/354 11/1/13 4/1/4 +f 262/1/228 11/1/13 315/1/354 +f 316/1/229 262/1/228 315/1/354 +f 242/1/262 214/1/17 10/1/12 +f 242/1/262 218/1/233 214/1/17 +f 2/1/2 28/1/31 24/1/26 +f 2/1/2 12/1/14 28/1/31 +f 12/1/14 27/1/30 28/1/31 +f 12/1/14 13/1/15 27/1/30 +f 13/1/15 26/1/29 27/1/30 +f 13/1/15 14/1/16 26/1/29 +f 14/1/16 25/1/28 26/1/29 +f 214/1/17 25/1/28 14/1/16 +f 286/1/313 280/1/308 268/1/295 +f 267/1/294 286/1/313 268/1/295 +f 286/1/313 287/1/314 280/1/308 +f 287/1/314 281/1/309 280/1/308 +f 287/1/314 288/1/315 281/1/309 +f 288/1/315 282/1/296 281/1/309 +f 288/1/315 269/1/299 282/1/296 +f 275/1/304 283/1/310 276/1/305 +f 277/1/306 283/1/310 275/1/304 +f 277/1/306 284/1/311 283/1/310 +f 278/1/307 284/1/311 277/1/306 +f 278/1/307 285/1/312 284/1/311 +f 279/1/303 285/1/312 278/1/307 +f 279/1/303 274/1/302 285/1/312 +f 263/1/292 258/1/289 256/1/284 +f 255/1/283 263/1/292 256/1/284 +f 263/1/292 259/1/290 258/1/289 +f 263/1/292 264/1/293 259/1/290 +f 264/1/293 260/1/291 259/1/290 +f 264/1/293 265/1/288 260/1/291 +f 265/1/288 257/1/285 260/1/291 +f 351/1/316 345/1/361 344/1/317 +f 352/1/362 345/1/361 351/1/316 +f 334/1/363 345/1/361 352/1/362 +f 335/1/364 345/1/361 334/1/363 +f 205/1/204 335/1/364 334/1/363 +f 194/1/203 335/1/364 205/1/204 +f 336/1/365 150/1/157 147/1/154 +f 251/1/279 336/1/365 147/1/154 +f 337/1/276 152/1/159 150/1/157 +f 336/1/365 337/1/276 150/1/157 +f 151/1/158 250/1/274 146/1/153 +f 151/1/158 338/1/366 250/1/274 +f 153/1/160 338/1/366 151/1/158 +f 153/1/160 339/1/277 338/1/366 +f 253/1/281 143/1/150 138/1/145 +f 253/1/281 340/1/278 143/1/150 +f 117/1/130 100/1/105 93/1/107 +f 117/1/130 123/1/129 100/1/105 +f 123/1/129 103/1/110 100/1/105 +f 126/1/133 133/1/140 104/1/111 +f 133/1/140 111/1/118 104/1/111 +f 133/1/140 136/1/143 111/1/118 +f 136/1/143 114/1/121 111/1/118 +f 112/1/119 128/1/135 106/1/113 +f 112/1/119 134/1/141 128/1/135 +f 115/1/122 134/1/141 112/1/119 +f 115/1/122 137/1/144 134/1/141 +f 98/1/103 120/1/125 96/1/102 +f 98/1/103 121/1/126 120/1/125 +f 101/1/108 121/1/126 98/1/103 +f 101/1/108 125/1/132 121/1/126 +f 119/1/124 99/1/104 97/1/100 +f 119/1/124 122/1/127 99/1/104 +f 122/1/127 124/1/131 99/1/104 +f 124/1/131 102/1/109 99/1/104 +f 124/1/131 129/1/136 102/1/109 +f 129/1/136 107/1/114 102/1/109 +f 142/1/149 341/1/275 254/1/282 +f 144/1/151 341/1/275 142/1/149 +f 201/1/214 225/1/243 202/1/205 +f 233/1/253 225/1/243 201/1/214 +f 211/1/223 233/1/253 201/1/214 +f 236/1/256 233/1/253 211/1/223 +f 222/1/240 241/1/261 243/1/260 +f 224/1/242 222/1/240 243/1/260 +f 222/1/240 223/1/239 241/1/261 +f 223/1/239 244/1/263 241/1/261 +f 223/1/239 235/1/255 244/1/263 +f 239/1/238 236/1/256 209/1/225 +f 236/1/256 211/1/223 209/1/225 +f 237/1/257 245/1/236 244/1/263 +f 237/1/257 221/1/237 245/1/236 +f 235/1/255 237/1/257 244/1/263 +f 1/1/1 266/1/286 9/1/11 +f 261/1/287 266/1/286 1/1/1 +f 345/1/361 343/1/367 344/1/317 +f 345/1/361 346/1/368 343/1/367 +f 346/1/368 342/1/323 343/1/367 +f 346/1/368 291/1/213 342/1/323 +f 335/1/364 346/1/368 345/1/361 +f 346/1/368 199/1/212 291/1/213 +f 335/1/364 194/1/203 346/1/368 +f 194/1/203 199/1/212 346/1/368 +f 344/1/317 343/1/367 290/1/319 +f 343/1/367 347/1/322 290/1/319 +f 343/1/367 342/1/323 347/1/322 +f 352/1/362 351/1/316 350/1/369 +f 349/1/370 352/1/362 350/1/369 +f 207/1/219 352/1/362 349/1/370 +f 348/1/320 207/1/219 349/1/370 +f 352/1/362 205/1/204 334/1/363 +f 207/1/219 205/1/204 352/1/362 +f 350/1/369 351/1/316 289/1/318 +f 349/1/370 350/1/369 289/1/318 +f 353/1/321 349/1/370 289/1/318 +f 348/1/320 349/1/370 353/1/321 +f 354/1/371 89/1/96 355/1/372 +f 240/1/259 89/1/96 354/1/371 +f 358/1/373 359/1/124 360/1/125 +f 361/1/126 358/1/373 360/1/125 +f 358/1/373 362/1/127 359/1/124 +f 356/1/374 363/1/129 357/1/130 +f 358/1/373 364/1/131 362/1/127 +f 365/1/132 358/1/373 361/1/126 +f 356/1/374 366/1/375 363/1/129 +f 367/1/376 358/1/373 365/1/132 +f 368/1/135 367/1/376 365/1/132 +f 358/1/373 369/1/136 364/1/131 +f 358/1/373 370/1/377 369/1/136 +f 368/1/135 371/1/378 367/1/376 +f 372/1/379 370/1/377 358/1/373 +f 356/1/374 373/1/380 366/1/375 +f 374/1/141 371/1/378 368/1/135 +f 375/1/381 376/1/382 373/1/380 +f 356/1/374 375/1/381 373/1/380 +f 377/1/383 371/1/378 374/1/141 +f 375/1/381 377/1/383 376/1/382 +f 375/1/381 371/1/378 377/1/383 +f 382/1/100 380/1/384 381/1/385 +f 380/1/384 383/1/103 381/1/385 +f 384/1/104 380/1/384 382/1/100 +f 385/1/105 379/1/386 378/1/387 +f 380/1/384 386/1/108 383/1/103 +f 387/1/109 380/1/384 384/1/104 +f 388/1/110 379/1/386 385/1/105 +f 389/1/111 379/1/386 388/1/110 +f 390/1/388 391/1/389 386/1/108 +f 380/1/384 390/1/388 386/1/108 +f 392/1/390 380/1/384 387/1/109 +f 197/1/209 196/1/207 392/1/390 +f 196/1/207 380/1/384 392/1/390 +f 393/1/391 391/1/389 390/1/388 +f 394/1/392 379/1/386 389/1/111 +f 393/1/391 395/1/393 391/1/389 +f 396/1/394 379/1/386 394/1/392 +f 397/1/395 396/1/394 394/1/392 +f 393/1/391 398/1/122 395/1/393 +f 393/1/391 396/1/394 397/1/395 +f 398/1/122 393/1/391 397/1/395 +f 399/1/396 253/1/281 252/1/280 +f 400/1/397 57/1/68 254/1/282 +f 341/1/275 400/1/397 254/1/282 +f 399/1/396 340/1/278 253/1/281 +f 401/1/398 400/1/397 341/1/275 +f 250/1/274 401/1/398 341/1/275 +f 399/1/396 251/1/279 340/1/278 +f 250/1/274 402/1/399 401/1/398 +f 195/1/206 57/1/68 400/1/397 +f 399/1/396 336/1/365 251/1/279 +f 338/1/366 402/1/399 250/1/274 +f 195/1/206 60/1/66 57/1/68 +f 399/1/396 337/1/276 336/1/365 +f 339/1/277 402/1/399 338/1/366 +f 399/1/396 403/1/400 337/1/276 +f 403/1/400 339/1/277 337/1/276 +f 403/1/400 402/1/399 339/1/277 +f 404/1/401 405/1/402 399/1/396 +f 405/1/402 403/1/400 399/1/396 +f 406/1/403 404/1/401 399/1/396 +f 407/1/404 406/1/403 399/1/396 +f 408/1/405 407/1/404 399/1/396 +f 409/1/406 408/1/405 399/1/396 +f 410/1/407 409/1/406 399/1/396 +f 410/1/407 411/1/408 409/1/406 +f 411/1/408 412/1/409 409/1/406 +f 411/1/408 413/1/410 412/1/409 +f 411/1/408 414/1/411 413/1/410 +f 411/1/408 415/1/412 414/1/411 +f 416/1/413 375/1/381 356/1/374 +f 417/1/414 416/1/413 356/1/374 +f 418/1/415 417/1/414 356/1/374 +f 419/1/416 420/1/417 356/1/374 +f 420/1/417 418/1/415 356/1/374 +f 421/1/418 419/1/416 356/1/374 +f 422/1/419 421/1/418 356/1/374 +f 423/1/420 422/1/419 356/1/374 +f 423/1/420 424/1/421 422/1/419 +f 424/1/421 425/1/422 422/1/419 +f 424/1/421 426/1/423 425/1/422 +f 424/1/421 427/1/424 426/1/423 +f 424/1/421 428/1/425 427/1/424 +f 498/1/426 499/1/427 423/1/420 +f 499/1/427 424/1/421 423/1/420 +f 429/1/428 430/1/429 410/1/407 +f 430/1/429 411/1/408 410/1/407 +f 396/1/394 431/1/430 379/1/386 +f 431/1/430 432/1/431 379/1/386 +f 432/1/431 433/1/432 379/1/386 +f 433/1/432 434/1/433 379/1/386 +f 434/1/433 435/1/434 379/1/386 +f 435/1/434 436/1/435 379/1/386 +f 436/1/435 429/1/428 379/1/386 +f 437/1/169 429/1/428 436/1/435 +f 430/1/429 429/1/428 437/1/169 +f 438/1/436 430/1/429 437/1/169 +f 439/1/437 430/1/429 438/1/436 +f 440/1/438 430/1/429 439/1/437 +f 441/1/174 430/1/429 440/1/438 +f 393/1/391 402/1/399 403/1/400 +f 396/1/394 393/1/391 403/1/400 +f 525/1/439 371/1/378 375/1/381 +f 442/1/440 371/1/378 525/1/439 +f 409/1/406 436/1/435 408/1/405 +f 409/1/406 437/1/169 436/1/435 +f 52/1/59 443/1/441 43/1/47 +f 443/1/441 444/1/442 43/1/47 +f 444/1/442 445/1/443 43/1/47 +f 445/1/443 446/1/444 43/1/47 +f 445/1/443 447/1/445 446/1/444 +f 447/1/445 448/1/246 446/1/444 +f 446/1/444 238/1/258 449/1/446 +f 448/1/246 238/1/258 446/1/444 +f 213/1/226 240/1/259 212/1/227 +f 232/1/251 240/1/259 213/1/226 +f 452/1/447 370/1/377 372/1/379 +f 450/1/448 452/1/447 372/1/379 +f 451/1/449 452/1/447 450/1/448 +f 453/1/450 451/1/449 450/1/448 +f 446/1/444 453/1/450 450/1/448 +f 446/1/444 449/1/446 453/1/450 +f 449/1/446 454/1/451 453/1/450 +f 50/1/57 31/1/34 46/1/54 +f 31/1/34 33/1/36 46/1/54 +f 422/1/419 455/1/452 421/1/418 +f 455/1/452 456/1/453 421/1/418 +f 197/1/209 229/1/249 198/1/210 +f 370/1/377 229/1/249 197/1/209 +f 452/1/447 227/1/247 370/1/377 +f 227/1/247 229/1/249 370/1/377 +f 370/1/377 197/1/209 392/1/390 +f 369/1/136 370/1/377 392/1/390 +f 356/1/374 378/1/387 379/1/386 +f 357/1/130 378/1/387 356/1/374 +f 366/1/375 389/1/111 388/1/110 +f 363/1/129 366/1/375 388/1/110 +f 377/1/383 398/1/122 397/1/395 +f 376/1/382 377/1/383 397/1/395 +f 391/1/389 365/1/132 386/1/108 +f 391/1/389 368/1/135 365/1/132 +f 359/1/124 382/1/100 381/1/385 +f 360/1/125 359/1/124 381/1/385 +f 457/1/454 358/1/373 367/1/376 +f 457/1/454 458/1/455 358/1/373 +f 463/1/456 459/1/457 462/1/458 +f 468/1/459 459/1/457 463/1/456 +f 371/1/378 457/1/454 367/1/376 +f 371/1/378 460/1/460 457/1/454 +f 371/1/378 461/1/461 460/1/460 +f 371/1/378 462/1/458 461/1/461 +f 463/1/456 464/1/44 32/1/35 +f 442/1/440 464/1/44 463/1/456 +f 371/1/378 463/1/456 462/1/458 +f 371/1/378 442/1/440 463/1/456 +f 458/1/455 372/1/379 358/1/373 +f 465/1/462 372/1/379 458/1/455 +f 466/1/463 372/1/379 465/1/462 +f 467/1/464 372/1/379 466/1/463 +f 40/1/43 468/1/459 39/1/42 +f 459/1/457 372/1/379 467/1/464 +f 40/1/43 469/1/465 468/1/459 +f 450/1/448 372/1/379 459/1/457 +f 468/1/459 450/1/448 459/1/457 +f 469/1/465 450/1/448 468/1/459 +f 470/1/466 400/1/397 401/1/398 +f 470/1/466 471/1/467 400/1/397 +f 476/1/468 491/1/469 472/1/470 +f 474/1/471 491/1/469 476/1/468 +f 473/1/472 474/1/471 475/1/473 +f 474/1/471 476/1/468 475/1/473 +f 477/1/474 473/1/472 475/1/473 +f 488/1/475 473/1/472 477/1/474 +f 380/1/384 478/1/476 390/1/388 +f 478/1/476 479/1/477 390/1/388 +f 402/1/399 470/1/466 401/1/398 +f 479/1/477 393/1/391 390/1/388 +f 480/1/478 393/1/391 479/1/477 +f 481/1/479 393/1/391 480/1/478 +f 482/1/480 393/1/391 481/1/479 +f 477/1/474 393/1/391 482/1/480 +f 393/1/391 477/1/474 475/1/473 +f 476/1/468 393/1/391 475/1/473 +f 402/1/399 483/1/481 470/1/466 +f 402/1/399 484/1/482 483/1/481 +f 402/1/399 485/1/483 484/1/482 +f 402/1/399 472/1/470 485/1/483 +f 402/1/399 476/1/468 472/1/470 +f 402/1/399 393/1/391 476/1/468 +f 471/1/467 195/1/206 400/1/397 +f 196/1/207 478/1/476 380/1/384 +f 196/1/207 486/1/484 478/1/476 +f 196/1/207 487/1/485 486/1/484 +f 196/1/207 488/1/475 487/1/485 +f 196/1/207 474/1/471 488/1/475 +f 474/1/471 473/1/472 488/1/475 +f 489/1/486 195/1/206 471/1/467 +f 490/1/487 195/1/206 489/1/486 +f 491/1/469 195/1/206 490/1/487 +f 474/1/471 195/1/206 491/1/469 +f 196/1/207 195/1/206 474/1/471 +f 547/1/488 554/1/489 492/1/490 +f 554/1/489 493/1/491 492/1/490 +f 212/1/227 354/1/371 559/1/492 +f 552/1/221 212/1/227 559/1/492 +f 212/1/227 240/1/259 354/1/371 +f 355/1/372 544/1/493 550/1/494 +f 89/1/96 86/1/93 355/1/372 +f 86/1/93 544/1/493 355/1/372 +f 86/1/93 206/1/218 544/1/493 +f 412/1/409 437/1/169 409/1/406 +f 412/1/409 438/1/436 437/1/169 +f 413/1/410 438/1/436 412/1/409 +f 413/1/410 439/1/437 438/1/436 +f 414/1/411 439/1/437 413/1/410 +f 414/1/411 440/1/438 439/1/437 +f 415/1/412 440/1/438 414/1/411 +f 415/1/412 441/1/174 440/1/438 +f 411/1/408 441/1/174 415/1/412 +f 411/1/408 430/1/429 441/1/174 +f 422/1/419 494/1/495 455/1/452 +f 425/1/422 494/1/495 422/1/419 +f 425/1/422 506/1/496 494/1/495 +f 426/1/423 506/1/496 425/1/422 +f 426/1/423 507/1/497 506/1/496 +f 426/1/423 510/1/498 507/1/497 +f 427/1/424 510/1/498 426/1/423 +f 427/1/424 512/1/499 510/1/498 +f 427/1/424 515/1/500 512/1/499 +f 428/1/425 515/1/500 427/1/424 +f 428/1/425 518/1/501 515/1/500 +f 424/1/421 518/1/501 428/1/425 +f 424/1/421 499/1/427 518/1/501 +f 403/1/400 431/1/430 396/1/394 +f 405/1/402 431/1/430 403/1/400 +f 405/1/402 432/1/431 431/1/430 +f 404/1/401 432/1/431 405/1/402 +f 404/1/401 433/1/432 432/1/431 +f 406/1/403 433/1/432 404/1/401 +f 406/1/403 434/1/433 433/1/432 +f 407/1/404 434/1/433 406/1/403 +f 407/1/404 435/1/434 434/1/433 +f 408/1/405 435/1/434 407/1/404 +f 408/1/405 436/1/435 435/1/434 +f 416/1/413 525/1/439 375/1/381 +f 416/1/413 526/1/502 525/1/439 +f 416/1/413 527/1/503 526/1/502 +f 417/1/414 527/1/503 416/1/413 +f 417/1/414 529/1/504 527/1/503 +f 417/1/414 532/1/505 529/1/504 +f 418/1/415 532/1/505 417/1/414 +f 418/1/415 534/1/506 532/1/505 +f 420/1/417 534/1/506 418/1/415 +f 420/1/417 536/1/507 534/1/506 +f 420/1/417 538/1/508 536/1/507 +f 419/1/416 538/1/508 420/1/417 +f 419/1/416 540/1/509 538/1/508 +f 421/1/418 540/1/509 419/1/416 +f 421/1/418 456/1/453 540/1/509 +f 495/1/510 38/1/41 516/1/49 +f 495/1/510 496/1/511 38/1/41 +f 497/1/512 496/1/511 495/1/510 +f 497/1/512 498/1/426 496/1/511 +f 499/1/427 498/1/426 497/1/512 +f 502/1/513 500/1/48 501/1/514 +f 455/1/452 502/1/513 501/1/514 +f 503/1/515 502/1/513 455/1/452 +f 494/1/495 503/1/515 455/1/452 +f 502/1/513 504/1/50 500/1/48 +f 505/1/516 504/1/50 502/1/513 +f 503/1/515 505/1/516 502/1/513 +f 506/1/496 505/1/516 503/1/515 +f 494/1/495 506/1/496 503/1/515 +f 507/1/497 505/1/516 506/1/496 +f 508/1/517 44/1/51 504/1/50 +f 505/1/516 508/1/517 504/1/50 +f 509/1/518 508/1/517 505/1/516 +f 507/1/497 509/1/518 505/1/516 +f 510/1/498 509/1/518 507/1/497 +f 511/1/519 44/1/51 508/1/517 +f 509/1/518 511/1/519 508/1/517 +f 512/1/499 511/1/519 509/1/518 +f 510/1/498 512/1/499 509/1/518 +f 513/1/520 511/1/519 512/1/499 +f 511/1/519 514/1/521 44/1/51 +f 514/1/521 516/1/49 44/1/51 +f 513/1/520 514/1/521 511/1/519 +f 515/1/500 513/1/520 512/1/499 +f 517/1/522 514/1/521 513/1/520 +f 515/1/500 517/1/522 513/1/520 +f 517/1/522 516/1/49 514/1/521 +f 517/1/522 495/1/510 516/1/49 +f 515/1/500 518/1/501 517/1/522 +f 497/1/512 495/1/510 517/1/522 +f 518/1/501 497/1/512 517/1/522 +f 499/1/427 497/1/512 518/1/501 +f 501/1/514 500/1/48 37/1/40 +f 455/1/452 519/1/523 456/1/453 +f 520/1/524 501/1/514 37/1/40 +f 455/1/452 520/1/524 519/1/523 +f 455/1/452 501/1/514 520/1/524 +f 522/1/525 34/1/37 521/1/526 +f 523/1/527 522/1/525 521/1/526 +f 524/1/528 35/1/38 34/1/37 +f 522/1/525 524/1/528 34/1/37 +f 526/1/502 522/1/525 523/1/527 +f 525/1/439 526/1/502 523/1/527 +f 526/1/502 527/1/503 522/1/525 +f 528/1/529 524/1/528 522/1/525 +f 527/1/503 528/1/529 522/1/525 +f 529/1/504 528/1/529 527/1/503 +f 530/1/530 35/1/38 524/1/528 +f 528/1/529 530/1/530 524/1/528 +f 531/1/531 530/1/530 528/1/529 +f 529/1/504 531/1/531 528/1/529 +f 532/1/505 531/1/531 529/1/504 +f 533/1/532 35/1/38 530/1/530 +f 531/1/531 533/1/532 530/1/530 +f 533/1/532 36/1/39 35/1/38 +f 534/1/506 533/1/532 531/1/531 +f 532/1/505 534/1/506 531/1/531 +f 535/1/533 36/1/39 533/1/532 +f 534/1/506 535/1/533 533/1/532 +f 536/1/507 535/1/533 534/1/506 +f 537/1/534 535/1/533 536/1/507 +f 538/1/508 537/1/534 536/1/507 +f 535/1/533 37/1/40 36/1/39 +f 539/1/535 37/1/40 535/1/533 +f 537/1/534 539/1/535 535/1/533 +f 537/1/534 540/1/509 539/1/535 +f 538/1/508 540/1/509 537/1/534 +f 520/1/524 37/1/40 539/1/535 +f 540/1/509 520/1/524 539/1/535 +f 519/1/523 520/1/524 540/1/509 +f 456/1/453 519/1/523 540/1/509 +f 464/1/44 521/1/526 34/1/37 +f 442/1/440 523/1/527 464/1/44 +f 523/1/527 521/1/526 464/1/44 +f 442/1/440 525/1/439 523/1/527 +f 43/1/47 469/1/465 40/1/43 +f 43/1/47 446/1/444 469/1/465 +f 446/1/444 450/1/448 469/1/465 +f 50/1/57 41/1/45 31/1/34 +f 50/1/57 54/1/61 41/1/45 +f 54/1/61 53/1/60 41/1/45 +f 53/1/60 42/1/46 41/1/45 +f 53/1/60 52/1/59 42/1/46 +f 52/1/59 43/1/47 42/1/46 +f 483/1/481 471/1/467 470/1/466 +f 483/1/481 489/1/486 471/1/467 +f 484/1/482 489/1/486 483/1/481 +f 484/1/482 490/1/487 489/1/486 +f 485/1/483 490/1/487 484/1/482 +f 485/1/483 491/1/469 490/1/487 +f 472/1/470 491/1/469 485/1/483 +f 478/1/476 480/1/478 479/1/477 +f 478/1/476 486/1/484 480/1/478 +f 486/1/484 481/1/479 480/1/478 +f 486/1/484 487/1/485 481/1/479 +f 487/1/485 482/1/480 481/1/479 +f 487/1/485 488/1/475 482/1/480 +f 488/1/475 477/1/474 482/1/480 +f 460/1/460 458/1/455 457/1/454 +f 460/1/460 465/1/462 458/1/455 +f 460/1/460 466/1/463 465/1/462 +f 461/1/461 466/1/463 460/1/460 +f 461/1/461 467/1/464 466/1/463 +f 462/1/458 467/1/464 461/1/461 +f 462/1/458 459/1/457 467/1/464 +f 541/1/536 554/1/489 547/1/488 +f 541/1/536 542/1/537 554/1/489 +f 541/1/536 543/1/538 542/1/537 +f 543/1/538 557/1/211 542/1/537 +f 200/1/208 557/1/211 543/1/538 +f 357/1/130 385/1/105 378/1/387 +f 357/1/130 363/1/129 385/1/105 +f 363/1/129 388/1/110 385/1/105 +f 373/1/380 394/1/392 389/1/111 +f 366/1/375 373/1/380 389/1/111 +f 376/1/382 397/1/395 394/1/392 +f 373/1/380 376/1/382 394/1/392 +f 395/1/393 368/1/135 391/1/389 +f 395/1/393 374/1/141 368/1/135 +f 398/1/122 374/1/141 395/1/393 +f 398/1/122 377/1/383 374/1/141 +f 383/1/103 360/1/125 381/1/385 +f 383/1/103 361/1/126 360/1/125 +f 386/1/108 361/1/126 383/1/103 +f 386/1/108 365/1/132 361/1/126 +f 359/1/124 384/1/104 382/1/100 +f 359/1/124 362/1/127 384/1/104 +f 364/1/131 387/1/109 384/1/104 +f 362/1/127 364/1/131 384/1/104 +f 369/1/136 392/1/390 387/1/109 +f 364/1/131 369/1/136 387/1/109 +f 228/1/248 203/1/215 198/1/210 +f 229/1/249 228/1/248 198/1/210 +f 228/1/248 204/1/216 203/1/215 +f 228/1/248 230/1/250 204/1/216 +f 230/1/250 208/1/222 204/1/216 +f 230/1/250 231/1/252 208/1/222 +f 451/1/449 227/1/247 452/1/447 +f 226/1/245 227/1/247 451/1/449 +f 453/1/450 226/1/245 451/1/449 +f 234/1/254 226/1/245 453/1/450 +f 208/1/222 231/1/252 213/1/226 +f 231/1/252 232/1/251 213/1/226 +f 238/1/258 454/1/451 449/1/446 +f 238/1/258 234/1/254 454/1/451 +f 234/1/254 453/1/450 454/1/451 +f 39/1/42 468/1/459 32/1/35 +f 468/1/459 463/1/456 32/1/35 +f 548/1/539 547/1/488 546/1/540 +f 548/1/539 541/1/536 547/1/488 +f 546/1/540 549/1/541 548/1/539 +f 545/1/542 549/1/541 546/1/540 +f 544/1/493 206/1/218 545/1/542 +f 549/1/541 541/1/536 548/1/539 +f 545/1/542 206/1/218 549/1/541 +f 549/1/541 206/1/218 541/1/536 +f 200/1/208 543/1/538 541/1/536 +f 206/1/218 200/1/208 541/1/536 +f 546/1/540 547/1/488 492/1/490 +f 550/1/494 546/1/540 492/1/490 +f 545/1/542 546/1/540 550/1/494 +f 544/1/493 545/1/542 550/1/494 +f 542/1/537 553/1/543 554/1/489 +f 555/1/220 551/1/544 553/1/543 +f 555/1/220 552/1/221 551/1/544 +f 542/1/537 556/1/217 553/1/543 +f 556/1/217 555/1/220 553/1/543 +f 557/1/211 556/1/217 542/1/537 +f 554/1/489 558/1/545 493/1/491 +f 554/1/489 553/1/543 558/1/545 +f 553/1/543 551/1/544 558/1/545 +f 551/1/544 559/1/492 558/1/545 +f 551/1/544 552/1/221 559/1/492 +f 589/1/244 560/1/546 690/1/241 +f 607/1/547 560/1/546 589/1/244 +f 607/1/547 561/1/548 560/1/546 +f 562/1/549 561/1/548 607/1/547 +f 563/1/550 564/1/551 562/1/549 +f 564/1/551 561/1/548 562/1/549 +f 565/1/552 564/1/551 563/1/550 +f 566/1/553 564/1/551 565/1/552 +f 567/1/554 566/1/553 565/1/552 +f 720/1/555 566/1/553 567/1/554 +f 247/1/266 720/1/555 567/1/554 +f 568/1/264 247/1/266 567/1/554 +f 569/1/556 246/1/265 626/1/267 +f 570/1/557 246/1/265 569/1/556 +f 571/1/558 570/1/557 569/1/556 +f 642/1/559 572/1/560 571/1/558 +f 572/1/560 570/1/557 571/1/558 +f 573/1/561 572/1/560 642/1/559 +f 573/1/561 574/1/562 572/1/560 +f 575/1/563 574/1/562 573/1/561 +f 575/1/563 755/1/564 574/1/562 +f 657/1/565 755/1/564 575/1/563 +f 576/1/566 755/1/564 657/1/565 +f 576/1/566 763/1/567 755/1/564 +f 769/1/568 763/1/567 576/1/566 +f 577/1/569 769/1/568 576/1/566 +f 578/1/570 769/1/568 577/1/569 +f 675/1/571 578/1/570 577/1/569 +f 579/1/572 578/1/570 675/1/571 +f 580/1/573 579/1/572 675/1/571 +f 581/1/268 579/1/572 580/1/573 +f 582/1/269 581/1/268 580/1/573 +f 48/1/55 443/1/441 52/1/59 +f 583/1/574 443/1/441 48/1/55 +f 584/1/575 443/1/441 583/1/574 +f 584/1/575 444/1/442 443/1/441 +f 585/1/576 444/1/442 584/1/575 +f 585/1/576 445/1/443 444/1/442 +f 586/1/577 445/1/443 585/1/576 +f 587/1/578 445/1/443 586/1/577 +f 587/1/578 447/1/445 445/1/443 +f 588/1/579 447/1/445 587/1/578 +f 588/1/579 448/1/246 447/1/445 +f 589/1/244 448/1/246 588/1/579 +f 45/1/53 583/1/574 48/1/55 +f 591/1/580 583/1/574 45/1/53 +f 590/1/581 584/1/575 583/1/574 +f 591/1/580 590/1/581 583/1/574 +f 592/1/582 590/1/581 591/1/580 +f 590/1/581 585/1/576 584/1/575 +f 593/1/583 585/1/576 590/1/581 +f 592/1/582 593/1/583 590/1/581 +f 594/1/584 593/1/583 592/1/582 +f 593/1/583 586/1/577 585/1/576 +f 595/1/585 592/1/582 591/1/580 +f 596/1/586 586/1/577 593/1/583 +f 598/1/587 591/1/580 45/1/53 +f 597/1/588 595/1/585 591/1/580 +f 594/1/584 596/1/586 593/1/583 +f 599/1/589 596/1/586 594/1/584 +f 595/1/585 600/1/590 592/1/582 +f 600/1/590 594/1/584 592/1/582 +f 598/1/587 597/1/588 591/1/580 +f 596/1/586 587/1/578 586/1/577 +f 601/1/591 587/1/578 596/1/586 +f 47/1/52 598/1/587 45/1/53 +f 599/1/589 601/1/591 596/1/586 +f 600/1/590 599/1/589 594/1/584 +f 602/1/592 599/1/589 600/1/590 +f 601/1/591 588/1/579 587/1/578 +f 603/1/593 588/1/579 601/1/591 +f 604/1/594 601/1/591 599/1/589 +f 597/1/588 605/1/595 595/1/585 +f 605/1/595 600/1/590 595/1/585 +f 604/1/594 603/1/593 601/1/591 +f 603/1/593 589/1/244 588/1/579 +f 607/1/547 589/1/244 603/1/593 +f 606/1/596 599/1/589 602/1/592 +f 607/1/547 603/1/593 604/1/594 +f 605/1/595 602/1/592 600/1/590 +f 606/1/596 604/1/594 599/1/589 +f 608/1/597 607/1/547 604/1/594 +f 598/1/587 609/1/598 597/1/588 +f 606/1/596 608/1/597 604/1/594 +f 610/1/599 602/1/592 605/1/595 +f 608/1/597 562/1/549 607/1/547 +f 611/1/600 609/1/598 598/1/587 +f 610/1/599 606/1/596 602/1/592 +f 606/1/596 612/1/601 608/1/597 +f 609/1/598 613/1/602 597/1/588 +f 613/1/602 605/1/595 597/1/588 +f 610/1/599 614/1/603 606/1/596 +f 608/1/597 563/1/550 562/1/549 +f 612/1/601 563/1/550 608/1/597 +f 614/1/603 612/1/601 606/1/596 +f 613/1/602 615/1/604 605/1/595 +f 615/1/604 610/1/599 605/1/595 +f 614/1/603 616/1/605 612/1/601 +f 616/1/605 563/1/550 612/1/601 +f 616/1/605 565/1/552 563/1/550 +f 47/1/52 611/1/600 598/1/587 +f 615/1/604 617/1/606 610/1/599 +f 617/1/606 614/1/603 610/1/599 +f 617/1/606 618/1/607 614/1/603 +f 618/1/607 616/1/605 614/1/603 +f 618/1/607 619/1/608 616/1/605 +f 619/1/608 565/1/552 616/1/605 +f 619/1/608 567/1/554 565/1/552 +f 613/1/602 620/1/609 615/1/604 +f 621/1/610 613/1/602 609/1/598 +f 620/1/609 617/1/606 615/1/604 +f 617/1/606 622/1/611 618/1/607 +f 622/1/611 619/1/608 618/1/607 +f 611/1/600 621/1/610 609/1/598 +f 621/1/610 620/1/609 613/1/602 +f 620/1/609 623/1/612 617/1/606 +f 623/1/612 624/1/613 617/1/606 +f 624/1/613 622/1/611 617/1/606 +f 622/1/611 625/1/614 619/1/608 +f 619/1/608 625/1/614 567/1/554 +f 625/1/614 568/1/264 567/1/554 +f 49/1/56 611/1/600 47/1/52 +f 625/1/614 627/1/615 568/1/264 +f 627/1/615 626/1/267 568/1/264 +f 49/1/56 628/1/616 611/1/600 +f 628/1/616 621/1/610 611/1/600 +f 622/1/611 632/1/617 625/1/614 +f 632/1/617 627/1/615 625/1/614 +f 628/1/616 629/1/618 621/1/610 +f 624/1/613 630/1/619 622/1/611 +f 630/1/619 632/1/617 622/1/611 +f 629/1/618 620/1/609 621/1/610 +f 629/1/618 631/1/620 620/1/609 +f 631/1/620 623/1/612 620/1/609 +f 623/1/612 631/1/620 624/1/613 +f 631/1/620 630/1/619 624/1/613 +f 632/1/617 569/1/556 626/1/267 +f 627/1/615 632/1/617 626/1/267 +f 49/1/56 633/1/621 628/1/616 +f 634/1/622 629/1/618 628/1/616 +f 633/1/621 634/1/622 628/1/616 +f 635/1/623 631/1/620 629/1/618 +f 634/1/622 635/1/623 629/1/618 +f 635/1/623 636/1/624 631/1/620 +f 636/1/624 630/1/619 631/1/620 +f 636/1/624 637/1/625 630/1/619 +f 637/1/625 632/1/617 630/1/619 +f 638/1/626 571/1/558 569/1/556 +f 632/1/617 638/1/626 569/1/556 +f 637/1/625 638/1/626 632/1/617 +f 635/1/623 639/1/627 636/1/624 +f 636/1/624 640/1/628 637/1/625 +f 639/1/627 640/1/628 636/1/624 +f 641/1/629 638/1/626 637/1/625 +f 640/1/628 641/1/629 637/1/625 +f 642/1/559 571/1/558 638/1/626 +f 641/1/629 642/1/559 638/1/626 +f 634/1/622 643/1/630 635/1/623 +f 49/1/56 648/1/631 633/1/621 +f 643/1/630 639/1/627 635/1/623 +f 644/1/632 634/1/622 633/1/621 +f 648/1/631 644/1/632 633/1/621 +f 643/1/630 645/1/633 639/1/627 +f 644/1/632 646/1/634 634/1/622 +f 646/1/634 643/1/630 634/1/622 +f 645/1/633 647/1/635 639/1/627 +f 647/1/635 640/1/628 639/1/627 +f 647/1/635 649/1/636 640/1/628 +f 649/1/636 641/1/629 640/1/628 +f 649/1/636 650/1/637 641/1/629 +f 650/1/637 642/1/559 641/1/629 +f 55/1/62 648/1/631 49/1/56 +f 650/1/637 573/1/561 642/1/559 +f 55/1/62 651/1/638 648/1/631 +f 646/1/634 645/1/633 643/1/630 +f 650/1/637 575/1/563 573/1/561 +f 651/1/638 644/1/632 648/1/631 +f 646/1/634 652/1/639 645/1/633 +f 652/1/639 647/1/635 645/1/633 +f 653/1/640 646/1/634 644/1/632 +f 654/1/641 649/1/636 647/1/635 +f 652/1/639 654/1/641 647/1/635 +f 51/1/58 655/1/642 55/1/62 +f 653/1/640 652/1/639 646/1/634 +f 656/1/643 650/1/637 649/1/636 +f 654/1/641 656/1/643 649/1/636 +f 651/1/638 653/1/640 644/1/632 +f 657/1/565 575/1/563 650/1/637 +f 656/1/643 657/1/565 650/1/637 +f 653/1/640 658/1/644 652/1/639 +f 659/1/645 651/1/638 55/1/62 +f 660/1/646 653/1/640 651/1/638 +f 658/1/644 654/1/641 652/1/639 +f 655/1/642 659/1/645 55/1/62 +f 660/1/646 658/1/644 653/1/640 +f 661/1/647 659/1/645 655/1/642 +f 662/1/648 658/1/644 660/1/646 +f 659/1/645 660/1/646 651/1/638 +f 658/1/644 663/1/649 654/1/641 +f 663/1/649 656/1/643 654/1/641 +f 664/1/650 660/1/646 659/1/645 +f 663/1/649 665/1/651 656/1/643 +f 665/1/651 657/1/565 656/1/643 +f 665/1/651 576/1/566 657/1/565 +f 666/1/652 663/1/649 658/1/644 +f 662/1/648 666/1/652 658/1/644 +f 667/1/653 664/1/650 659/1/645 +f 661/1/647 667/1/653 659/1/645 +f 668/1/654 662/1/648 660/1/646 +f 664/1/650 668/1/654 660/1/646 +f 669/1/655 668/1/654 664/1/650 +f 663/1/649 670/1/656 665/1/651 +f 668/1/654 666/1/652 662/1/648 +f 670/1/656 576/1/566 665/1/651 +f 666/1/652 670/1/656 663/1/649 +f 667/1/653 669/1/655 664/1/650 +f 671/1/657 666/1/652 668/1/654 +f 672/1/658 669/1/655 667/1/653 +f 669/1/655 671/1/657 668/1/654 +f 670/1/656 577/1/569 576/1/566 +f 673/1/659 672/1/658 667/1/653 +f 674/1/660 670/1/656 666/1/652 +f 671/1/657 674/1/660 666/1/652 +f 672/1/658 671/1/657 669/1/655 +f 675/1/571 577/1/569 670/1/656 +f 674/1/660 675/1/571 670/1/656 +f 676/1/661 674/1/660 671/1/657 +f 677/1/662 671/1/657 672/1/658 +f 676/1/661 675/1/571 674/1/660 +f 677/1/662 676/1/661 671/1/657 +f 673/1/659 677/1/662 672/1/658 +f 676/1/661 678/1/663 675/1/571 +f 679/1/664 677/1/662 673/1/659 +f 678/1/663 676/1/661 677/1/662 +f 678/1/663 580/1/573 675/1/571 +f 680/1/665 678/1/663 677/1/662 +f 679/1/664 680/1/665 677/1/662 +f 680/1/665 580/1/573 678/1/663 +f 681/1/666 680/1/665 679/1/664 +f 680/1/665 582/1/269 580/1/573 +f 681/1/666 582/1/269 680/1/665 +f 661/1/647 655/1/642 51/1/58 +f 682/1/667 661/1/647 51/1/58 +f 667/1/653 661/1/647 682/1/667 +f 673/1/659 667/1/653 682/1/667 +f 683/1/668 673/1/659 682/1/667 +f 683/1/668 679/1/664 673/1/659 +f 683/1/668 681/1/666 679/1/664 +f 684/1/271 681/1/666 683/1/668 +f 684/1/271 582/1/269 681/1/666 +f 215/1/230 22/1/24 25/1/28 +f 215/1/230 685/1/669 22/1/24 +f 216/1/231 685/1/669 215/1/230 +f 216/1/231 686/1/670 685/1/669 +f 217/1/232 686/1/670 216/1/231 +f 217/1/232 687/1/671 686/1/670 +f 217/1/232 688/1/672 687/1/671 +f 219/1/234 688/1/672 217/1/232 +f 219/1/234 689/1/673 688/1/672 +f 219/1/234 690/1/241 689/1/673 +f 220/1/235 690/1/241 219/1/234 +f 685/1/669 691/1/674 22/1/24 +f 691/1/674 20/1/21 22/1/24 +f 685/1/669 692/1/675 691/1/674 +f 693/1/676 20/1/21 691/1/674 +f 686/1/670 692/1/675 685/1/669 +f 692/1/675 694/1/677 691/1/674 +f 694/1/677 693/1/676 691/1/674 +f 686/1/670 695/1/678 692/1/675 +f 693/1/676 21/1/22 20/1/21 +f 696/1/679 694/1/677 692/1/675 +f 695/1/678 696/1/679 692/1/675 +f 687/1/671 695/1/678 686/1/670 +f 697/1/680 695/1/678 687/1/671 +f 693/1/676 700/1/681 21/1/22 +f 698/1/682 693/1/676 694/1/677 +f 696/1/679 698/1/682 694/1/677 +f 699/1/683 696/1/679 695/1/678 +f 697/1/680 699/1/683 695/1/678 +f 688/1/672 697/1/680 687/1/671 +f 701/1/684 697/1/680 688/1/672 +f 689/1/673 702/1/685 688/1/672 +f 699/1/683 698/1/682 696/1/679 +f 702/1/685 701/1/684 688/1/672 +f 703/1/686 699/1/683 697/1/680 +f 701/1/684 703/1/686 697/1/680 +f 693/1/676 704/1/687 700/1/681 +f 698/1/682 704/1/687 693/1/676 +f 705/1/688 698/1/682 699/1/683 +f 690/1/241 702/1/685 689/1/673 +f 702/1/685 706/1/689 701/1/684 +f 707/1/690 704/1/687 698/1/682 +f 560/1/546 702/1/685 690/1/241 +f 706/1/689 703/1/686 701/1/684 +f 703/1/686 705/1/688 699/1/683 +f 700/1/681 708/1/691 21/1/22 +f 560/1/546 706/1/689 702/1/685 +f 709/1/692 705/1/688 703/1/686 +f 560/1/546 561/1/548 706/1/689 +f 706/1/689 709/1/692 703/1/686 +f 705/1/688 707/1/690 698/1/682 +f 561/1/548 709/1/692 706/1/689 +f 704/1/687 710/1/693 700/1/681 +f 711/1/694 707/1/690 705/1/688 +f 710/1/693 708/1/691 700/1/681 +f 709/1/692 711/1/694 705/1/688 +f 713/1/695 710/1/693 704/1/687 +f 561/1/548 712/1/696 709/1/692 +f 712/1/696 711/1/694 709/1/692 +f 561/1/548 564/1/551 712/1/696 +f 707/1/690 713/1/695 704/1/687 +f 714/1/697 713/1/695 707/1/690 +f 712/1/696 715/1/698 711/1/694 +f 708/1/691 23/1/25 21/1/22 +f 564/1/551 715/1/698 712/1/696 +f 716/1/699 714/1/697 707/1/690 +f 711/1/694 716/1/699 707/1/690 +f 715/1/698 716/1/699 711/1/694 +f 710/1/693 717/1/700 708/1/691 +f 564/1/551 566/1/553 715/1/698 +f 713/1/695 717/1/700 710/1/693 +f 718/1/701 717/1/700 713/1/695 +f 714/1/697 718/1/701 713/1/695 +f 719/1/702 718/1/701 714/1/697 +f 716/1/699 719/1/702 714/1/697 +f 720/1/555 716/1/699 715/1/698 +f 566/1/553 720/1/555 715/1/698 +f 716/1/699 721/1/703 719/1/702 +f 722/1/704 721/1/703 716/1/699 +f 720/1/555 722/1/704 716/1/699 +f 247/1/266 722/1/704 720/1/555 +f 723/1/705 29/1/32 23/1/25 +f 246/1/265 722/1/704 247/1/266 +f 246/1/265 724/1/706 722/1/704 +f 708/1/691 723/1/705 23/1/25 +f 725/1/707 723/1/705 708/1/691 +f 724/1/706 721/1/703 722/1/704 +f 724/1/706 726/1/708 721/1/703 +f 717/1/700 725/1/707 708/1/691 +f 727/1/709 725/1/707 717/1/700 +f 726/1/708 719/1/702 721/1/703 +f 726/1/708 728/1/710 719/1/702 +f 718/1/701 727/1/709 717/1/700 +f 728/1/710 718/1/701 719/1/702 +f 728/1/710 727/1/709 718/1/701 +f 726/1/708 729/1/711 728/1/710 +f 246/1/265 730/1/712 724/1/706 +f 730/1/712 726/1/708 724/1/706 +f 730/1/712 729/1/711 726/1/708 +f 570/1/557 730/1/712 246/1/265 +f 723/1/705 731/1/713 29/1/32 +f 725/1/707 731/1/713 723/1/705 +f 732/1/714 731/1/713 725/1/707 +f 727/1/709 732/1/714 725/1/707 +f 733/1/715 732/1/714 727/1/709 +f 728/1/710 733/1/715 727/1/709 +f 734/1/716 733/1/715 728/1/710 +f 729/1/711 734/1/716 728/1/710 +f 735/1/717 734/1/716 729/1/711 +f 730/1/712 735/1/717 729/1/711 +f 736/1/718 735/1/717 730/1/712 +f 570/1/557 736/1/718 730/1/712 +f 731/1/713 737/1/719 29/1/32 +f 738/1/720 737/1/719 731/1/713 +f 739/1/721 738/1/720 731/1/713 +f 732/1/714 739/1/721 731/1/713 +f 570/1/557 572/1/560 736/1/718 +f 740/1/722 739/1/721 732/1/714 +f 733/1/715 740/1/722 732/1/714 +f 741/1/723 740/1/722 733/1/715 +f 734/1/716 741/1/723 733/1/715 +f 742/1/724 741/1/723 734/1/716 +f 735/1/717 742/1/724 734/1/716 +f 572/1/560 742/1/724 735/1/717 +f 736/1/718 572/1/560 735/1/717 +f 740/1/722 743/1/725 739/1/721 +f 741/1/723 743/1/725 740/1/722 +f 737/1/719 744/1/726 29/1/32 +f 744/1/726 30/1/33 29/1/32 +f 745/1/727 743/1/725 741/1/723 +f 742/1/724 745/1/727 741/1/723 +f 746/1/728 745/1/727 742/1/724 +f 572/1/560 746/1/728 742/1/724 +f 574/1/562 746/1/728 572/1/560 +f 738/1/720 744/1/726 737/1/719 +f 739/1/721 747/1/729 738/1/720 +f 748/1/730 744/1/726 738/1/720 +f 749/1/731 747/1/729 739/1/721 +f 743/1/725 749/1/731 739/1/721 +f 744/1/726 750/1/732 30/1/33 +f 747/1/729 748/1/730 738/1/720 +f 752/1/733 749/1/731 743/1/725 +f 745/1/727 752/1/733 743/1/725 +f 751/1/734 748/1/730 747/1/729 +f 749/1/731 751/1/734 747/1/729 +f 753/1/735 752/1/733 745/1/727 +f 750/1/732 18/1/27 30/1/33 +f 746/1/728 753/1/735 745/1/727 +f 748/1/730 754/1/736 744/1/726 +f 754/1/736 750/1/732 744/1/726 +f 755/1/564 753/1/735 746/1/728 +f 574/1/562 755/1/564 746/1/728 +f 751/1/734 756/1/737 748/1/730 +f 757/1/738 751/1/734 749/1/731 +f 752/1/733 757/1/738 749/1/731 +f 758/1/739 18/1/27 750/1/732 +f 759/1/740 757/1/738 752/1/733 +f 753/1/735 759/1/740 752/1/733 +f 756/1/737 760/1/741 748/1/730 +f 760/1/741 754/1/736 748/1/730 +f 754/1/736 758/1/739 750/1/732 +f 761/1/742 756/1/737 751/1/734 +f 755/1/564 759/1/740 753/1/735 +f 760/1/741 762/1/743 754/1/736 +f 757/1/738 761/1/742 751/1/734 +f 762/1/743 758/1/739 754/1/736 +f 755/1/564 763/1/567 759/1/740 +f 756/1/737 764/1/744 760/1/741 +f 765/1/745 756/1/737 761/1/742 +f 766/1/746 761/1/742 757/1/738 +f 759/1/740 766/1/746 757/1/738 +f 764/1/744 768/1/747 760/1/741 +f 768/1/747 762/1/743 760/1/741 +f 769/1/568 766/1/746 759/1/740 +f 763/1/567 769/1/568 759/1/740 +f 770/1/748 764/1/744 756/1/737 +f 765/1/745 770/1/748 756/1/737 +f 768/1/747 767/1/749 762/1/743 +f 771/1/750 765/1/745 761/1/742 +f 766/1/746 771/1/750 761/1/742 +f 769/1/568 771/1/750 766/1/746 +f 770/1/748 768/1/747 764/1/744 +f 578/1/570 771/1/750 769/1/568 +f 771/1/750 770/1/748 765/1/745 +f 773/1/751 767/1/749 768/1/747 +f 774/1/752 770/1/748 771/1/750 +f 772/1/753 768/1/747 770/1/748 +f 578/1/570 774/1/752 771/1/750 +f 772/1/753 775/1/754 768/1/747 +f 775/1/754 773/1/751 768/1/747 +f 774/1/752 776/1/755 770/1/748 +f 776/1/755 772/1/753 770/1/748 +f 578/1/570 579/1/572 774/1/752 +f 579/1/572 776/1/755 774/1/752 +f 776/1/755 777/1/756 772/1/753 +f 777/1/756 775/1/754 772/1/753 +f 579/1/572 581/1/268 776/1/755 +f 581/1/268 777/1/756 776/1/755 +f 758/1/739 778/1/757 18/1/27 +f 758/1/739 762/1/743 778/1/757 +f 762/1/743 767/1/749 778/1/757 +f 767/1/749 779/1/758 778/1/757 +f 773/1/751 779/1/758 767/1/749 +f 773/1/751 780/1/759 779/1/758 +f 775/1/754 780/1/759 773/1/751 +f 775/1/754 777/1/756 780/1/759 +f 777/1/756 781/1/270 780/1/759 +f 581/1/268 781/1/270 777/1/756 +f 139/1/146 399/1/396 140/1/147 +f 399/1/396 252/1/280 140/1/147 +f 18/1/27 3/1/3 19/1/23 +f 33/1/36 51/1/58 46/1/54 +f 18/1/27 8/1/10 3/1/3 +f 38/1/41 51/1/58 33/1/36 +f 182/1/191 116/1/128 94/1/106 +f 174/1/181 182/1/191 94/1/106 +f 161/1/168 410/1/407 139/1/146 +f 410/1/407 399/1/396 139/1/146 +f 423/1/420 356/1/374 379/1/386 +f 429/1/428 423/1/420 379/1/386 +f 18/1/27 778/1/757 8/1/10 +f 496/1/511 682/1/667 38/1/41 +f 682/1/667 51/1/58 38/1/41 +f 778/1/757 779/1/758 8/1/10 +f 779/1/758 293/1/189 8/1/10 +f 683/1/668 682/1/667 496/1/511 +f 779/1/758 780/1/759 293/1/189 +f 498/1/426 683/1/668 496/1/511 +f 684/1/271 683/1/668 498/1/426 +f 780/1/759 781/1/270 293/1/189 +f 781/1/270 174/1/181 293/1/189 +f 781/1/270 182/1/191 174/1/181 +f 781/1/270 161/1/168 182/1/191 +f 781/1/270 410/1/407 161/1/168 +f 781/1/270 684/1/271 410/1/407 +f 684/1/271 429/1/428 410/1/407 +f 684/1/271 423/1/420 429/1/428 +f 684/1/271 498/1/426 423/1/420 +f 355/1/372 550/1/494 492/1/490 +f 354/1/371 355/1/372 492/1/490 +f 493/1/491 354/1/371 492/1/490 +f 559/1/492 354/1/371 493/1/491 +f 558/1/545 559/1/492 493/1/491 +f 92/1/99 353/1/321 289/1/318 +f 90/1/97 92/1/99 289/1/318 +f 290/1/319 90/1/97 289/1/318 +f 347/1/322 90/1/97 290/1/319 +f 784/1/760 783/1/761 782/1/762 +f 785/1/763 783/1/761 784/1/760 +f 786/1/764 785/1/763 784/1/760 +f 787/1/765 785/1/763 786/1/764 +f 788/1/766 787/1/765 786/1/764 +f 789/1/767 787/1/765 788/1/766 +f 790/1/768 789/1/767 788/1/766 +f 791/1/769 790/1/768 788/1/766 +f 792/1/770 790/1/768 791/1/769 +f 793/1/771 792/1/770 791/1/769 +f 794/1/772 792/1/770 793/1/771 +f 795/1/773 794/1/772 793/1/771 +f 796/1/774 794/1/772 795/1/773 +f 797/1/775 796/1/774 795/1/773 +f 798/1/776 796/1/774 797/1/775 +f 799/1/777 798/1/776 797/1/775 +f 800/1/778 798/1/776 799/1/777 +f 801/1/779 800/1/778 799/1/777 +f 802/1/780 800/1/778 801/1/779 +f 803/1/781 802/1/780 801/1/779 +f 804/1/782 802/1/780 803/1/781 +f 805/1/783 804/1/782 803/1/781 +f 806/1/784 804/1/782 805/1/783 +f 807/1/785 804/1/782 806/1/784 +f 808/1/786 807/1/785 806/1/784 +f 809/1/787 807/1/785 808/1/786 +f 810/1/788 809/1/787 808/1/786 +f 811/1/789 809/1/787 810/1/788 +f 812/1/790 811/1/789 810/1/788 +f 813/1/791 811/1/789 812/1/790 +f 816/1/792 817/1/793 815/1/794 +f 814/1/795 816/1/792 815/1/794 +f 818/1/796 819/1/797 817/1/793 +f 816/1/792 818/1/796 817/1/793 +f 818/1/796 820/1/798 819/1/797 +f 820/1/798 821/1/799 819/1/797 +f 820/1/798 822/1/800 821/1/799 +f 823/1/801 824/1/802 821/1/799 +f 822/1/800 823/1/801 821/1/799 +f 825/1/803 826/1/804 824/1/802 +f 823/1/801 825/1/803 824/1/802 +f 813/1/791 812/1/790 826/1/804 +f 825/1/803 813/1/791 826/1/804 +f 827/1/805 814/1/795 828/1/806 +f 814/1/795 815/1/794 828/1/806 +f 831/1/807 832/1/808 830/1/809 +f 829/1/810 831/1/807 830/1/809 +f 833/1/811 834/1/812 832/1/808 +f 831/1/807 833/1/811 832/1/808 +f 835/1/813 836/1/814 834/1/812 +f 833/1/811 835/1/813 834/1/812 +f 835/1/813 837/1/815 836/1/814 +f 835/1/813 838/1/816 837/1/815 +f 838/1/816 839/1/817 837/1/815 +f 840/1/818 841/1/819 839/1/817 +f 838/1/816 840/1/818 839/1/817 +f 827/1/805 828/1/806 841/1/819 +f 840/1/818 827/1/805 841/1/819 +f 783/1/761 829/1/810 782/1/762 +f 829/1/810 830/1/809 782/1/762 +f 796/1/774 798/1/776 783/1/761 +f 798/1/776 829/1/810 783/1/761 +f 794/1/772 796/1/774 783/1/761 +f 792/1/770 794/1/772 783/1/761 +f 827/1/805 840/1/818 829/1/810 +f 840/1/818 838/1/816 829/1/810 +f 814/1/795 827/1/805 829/1/810 +f 798/1/776 814/1/795 829/1/810 +f 838/1/816 835/1/813 829/1/810 +f 835/1/813 833/1/811 829/1/810 +f 785/1/763 792/1/770 783/1/761 +f 833/1/811 831/1/807 829/1/810 +f 787/1/765 792/1/770 785/1/763 +f 790/1/768 792/1/770 787/1/765 +f 789/1/767 790/1/768 787/1/765 +f 811/1/789 814/1/795 798/1/776 +f 811/1/789 813/1/791 814/1/795 +f 800/1/778 811/1/789 798/1/776 +f 813/1/791 816/1/792 814/1/795 +f 802/1/780 811/1/789 800/1/778 +f 813/1/791 818/1/796 816/1/792 +f 813/1/791 820/1/798 818/1/796 +f 804/1/782 811/1/789 802/1/780 +f 807/1/785 809/1/787 804/1/782 +f 809/1/787 811/1/789 804/1/782 +f 813/1/791 825/1/803 820/1/798 +f 825/1/803 823/1/801 820/1/798 +f 823/1/801 822/1/800 820/1/798 +f 830/1/809 815/1/794 782/1/762 +f 797/1/775 795/1/773 782/1/762 +f 815/1/794 797/1/775 782/1/762 +f 795/1/773 793/1/771 782/1/762 +f 793/1/771 791/1/769 782/1/762 +f 834/1/812 836/1/814 830/1/809 +f 837/1/815 839/1/817 830/1/809 +f 839/1/817 841/1/819 830/1/809 +f 841/1/819 828/1/806 830/1/809 +f 828/1/806 815/1/794 830/1/809 +f 836/1/814 837/1/815 830/1/809 +f 791/1/769 784/1/760 782/1/762 +f 832/1/808 834/1/812 830/1/809 +f 791/1/769 786/1/764 784/1/760 +f 791/1/769 788/1/766 786/1/764 +f 812/1/790 810/1/788 797/1/775 +f 815/1/794 812/1/790 797/1/775 +f 810/1/788 799/1/777 797/1/775 +f 817/1/793 812/1/790 815/1/794 +f 810/1/788 801/1/779 799/1/777 +f 819/1/797 812/1/790 817/1/793 +f 810/1/788 803/1/781 801/1/779 +f 821/1/799 812/1/790 819/1/797 +f 810/1/788 808/1/786 803/1/781 +f 808/1/786 806/1/784 803/1/781 +f 806/1/784 805/1/783 803/1/781 +f 824/1/802 826/1/804 821/1/799 +f 826/1/804 812/1/790 821/1/799 +f 842/1/820 843/1/821 857/1/822 +f 842/1/820 844/1/823 843/1/821 +f 845/1/824 846/1/825 847/1/826 +f 848/1/827 845/1/824 847/1/826 +f 845/1/824 849/1/828 846/1/825 +f 845/1/824 850/1/829 849/1/828 +f 845/1/824 851/1/830 850/1/829 +f 851/1/830 852/1/831 850/1/829 +f 851/1/830 853/1/832 852/1/831 +f 854/1/833 855/1/834 853/1/832 +f 851/1/830 854/1/833 853/1/832 +f 854/1/833 856/1/835 855/1/834 +f 857/1/822 843/1/821 856/1/835 +f 854/1/833 857/1/822 856/1/835 +f 858/1/836 940/1/837 859/1/838 +f 858/1/836 860/1/839 940/1/837 +f 861/1/840 865/1/841 848/1/827 +f 865/1/841 862/1/842 848/1/827 +f 863/1/843 845/1/824 848/1/827 +f 862/1/842 863/1/843 848/1/827 +f 863/1/843 864/1/844 845/1/824 +f 866/1/845 865/1/841 861/1/840 +f 868/1/846 867/1/847 866/1/845 +f 869/1/848 865/1/841 866/1/845 +f 870/1/849 868/1/846 866/1/845 +f 867/1/847 869/1/848 866/1/845 +f 871/1/850 870/1/849 866/1/845 +f 872/1/851 870/1/849 871/1/850 +f 873/1/852 870/1/849 872/1/851 +f 874/1/853 870/1/849 873/1/852 +f 875/1/854 870/1/849 874/1/853 +f 876/1/855 870/1/849 875/1/854 +f 877/1/856 876/1/855 875/1/854 +f 876/1/855 877/1/856 878/1/857 +f 879/1/858 876/1/855 878/1/857 +f 870/1/849 880/1/859 868/1/846 +f 870/1/849 881/1/860 880/1/859 +f 881/1/860 882/1/861 880/1/859 +f 882/1/861 883/1/862 880/1/859 +f 883/1/862 884/1/863 880/1/859 +f 885/1/864 879/1/858 878/1/857 +f 883/1/862 886/1/865 884/1/863 +f 887/1/866 879/1/858 885/1/864 +f 883/1/862 888/1/867 886/1/865 +f 889/1/868 879/1/858 887/1/866 +f 890/1/869 889/1/868 887/1/866 +f 891/1/870 890/1/869 887/1/866 +f 892/1/871 893/1/872 888/1/867 +f 883/1/862 892/1/871 888/1/867 +f 894/1/873 890/1/869 891/1/870 +f 846/1/825 896/1/874 847/1/826 +f 896/1/874 895/1/875 847/1/826 +f 897/1/876 898/1/877 846/1/825 +f 898/1/877 899/1/878 846/1/825 +f 901/1/879 896/1/874 846/1/825 +f 899/1/878 900/1/880 846/1/825 +f 900/1/880 901/1/879 846/1/825 +f 902/1/881 903/1/882 897/1/876 +f 903/1/882 898/1/877 897/1/876 +f 904/1/883 902/1/881 897/1/876 +f 905/1/884 902/1/881 904/1/883 +f 906/1/885 902/1/881 905/1/884 +f 907/1/886 902/1/881 906/1/885 +f 908/1/887 902/1/881 907/1/886 +f 909/1/888 908/1/887 907/1/886 +f 910/1/889 908/1/887 909/1/888 +f 903/1/882 902/1/881 911/1/890 +f 902/1/881 921/1/891 911/1/890 +f 912/1/892 908/1/887 910/1/889 +f 913/1/893 914/1/894 912/1/892 +f 914/1/894 908/1/887 912/1/892 +f 915/1/895 913/1/893 912/1/892 +f 921/1/891 916/1/896 911/1/890 +f 917/1/897 915/1/895 912/1/892 +f 921/1/891 918/1/898 916/1/896 +f 921/1/891 919/1/899 918/1/898 +f 920/1/900 915/1/895 917/1/897 +f 921/1/891 922/1/901 919/1/899 +f 922/1/901 923/1/902 919/1/899 +f 924/1/903 925/1/904 920/1/900 +f 925/1/904 915/1/895 920/1/900 +f 923/1/902 926/1/905 919/1/899 +f 923/1/902 927/1/906 926/1/905 +f 866/1/845 861/1/840 895/1/875 +f 896/1/874 866/1/845 895/1/875 +f 871/1/850 866/1/845 896/1/874 +f 901/1/879 871/1/850 896/1/874 +f 872/1/851 871/1/850 901/1/879 +f 873/1/852 872/1/851 901/1/879 +f 900/1/880 873/1/852 901/1/879 +f 874/1/853 873/1/852 900/1/880 +f 899/1/878 874/1/853 900/1/880 +f 875/1/854 874/1/853 899/1/878 +f 898/1/877 875/1/854 899/1/878 +f 877/1/856 875/1/854 898/1/877 +f 903/1/882 877/1/856 898/1/877 +f 878/1/857 877/1/856 911/1/890 +f 877/1/856 903/1/882 911/1/890 +f 902/1/881 879/1/858 921/1/891 +f 876/1/855 879/1/858 902/1/881 +f 916/1/896 878/1/857 911/1/890 +f 885/1/864 878/1/857 916/1/896 +f 918/1/898 885/1/864 916/1/896 +f 919/1/899 885/1/864 918/1/898 +f 887/1/866 885/1/864 919/1/899 +f 891/1/870 887/1/866 919/1/899 +f 926/1/905 891/1/870 919/1/899 +f 927/1/906 891/1/870 926/1/905 +f 894/1/873 891/1/870 927/1/906 +f 923/1/902 894/1/873 927/1/906 +f 890/1/869 894/1/873 923/1/902 +f 922/1/901 890/1/869 923/1/902 +f 889/1/868 890/1/869 922/1/901 +f 921/1/891 889/1/868 922/1/901 +f 879/1/858 889/1/868 921/1/891 +f 864/1/844 863/1/843 897/1/876 +f 863/1/843 904/1/883 897/1/876 +f 862/1/842 905/1/884 904/1/883 +f 863/1/843 862/1/842 904/1/883 +f 862/1/842 906/1/885 905/1/884 +f 862/1/842 865/1/841 906/1/885 +f 865/1/841 907/1/886 906/1/885 +f 865/1/841 869/1/848 907/1/886 +f 867/1/847 909/1/888 907/1/886 +f 869/1/848 867/1/847 907/1/886 +f 867/1/847 910/1/889 909/1/888 +f 867/1/847 868/1/846 910/1/889 +f 868/1/846 880/1/859 910/1/889 +f 880/1/859 912/1/892 910/1/889 +f 870/1/849 908/1/887 914/1/894 +f 881/1/860 870/1/849 914/1/894 +f 880/1/859 884/1/863 912/1/892 +f 884/1/863 917/1/897 912/1/892 +f 884/1/863 886/1/865 917/1/897 +f 888/1/867 920/1/900 917/1/897 +f 886/1/865 888/1/867 917/1/897 +f 888/1/867 924/1/903 920/1/900 +f 888/1/867 893/1/872 924/1/903 +f 892/1/871 925/1/904 924/1/903 +f 893/1/872 892/1/871 924/1/903 +f 883/1/862 915/1/895 925/1/904 +f 892/1/871 883/1/862 925/1/904 +f 882/1/861 913/1/893 915/1/895 +f 883/1/862 882/1/861 915/1/895 +f 881/1/860 914/1/894 913/1/893 +f 882/1/861 881/1/860 913/1/893 +f 861/1/840 928/1/907 895/1/875 +f 861/1/840 929/1/908 928/1/907 +f 861/1/840 930/1/909 929/1/908 +f 930/1/909 931/1/910 929/1/908 +f 932/1/911 933/1/912 931/1/910 +f 930/1/909 932/1/911 931/1/910 +f 932/1/911 934/1/913 933/1/912 +f 935/1/914 936/1/915 934/1/913 +f 932/1/911 935/1/914 934/1/913 +f 935/1/914 937/1/916 936/1/915 +f 938/1/917 930/1/909 848/1/827 +f 930/1/909 861/1/840 848/1/827 +f 939/1/918 932/1/911 938/1/917 +f 932/1/911 930/1/909 938/1/917 +f 940/1/837 935/1/914 939/1/918 +f 935/1/914 932/1/911 939/1/918 +f 895/1/875 928/1/907 847/1/826 +f 928/1/907 941/1/919 847/1/826 +f 928/1/907 929/1/908 941/1/919 +f 929/1/908 942/1/920 941/1/919 +f 929/1/908 931/1/910 942/1/920 +f 931/1/910 943/1/921 942/1/920 +f 931/1/910 933/1/912 943/1/921 +f 933/1/912 934/1/913 943/1/921 +f 934/1/913 944/1/922 943/1/921 +f 934/1/913 936/1/915 944/1/922 +f 936/1/915 945/1/923 944/1/922 +f 936/1/915 937/1/916 945/1/923 +f 937/1/916 859/1/838 945/1/923 +f 946/1/924 948/1/925 947/1/926 +f 946/1/924 949/1/927 948/1/925 +f 949/1/927 950/1/928 948/1/925 +f 949/1/927 951/1/929 950/1/928 +f 951/1/929 952/1/930 950/1/928 +f 952/1/930 953/1/931 950/1/928 +f 952/1/930 954/1/932 953/1/931 +f 954/1/932 955/1/933 953/1/931 +f 954/1/932 956/1/934 955/1/933 +f 954/1/932 957/1/935 956/1/934 +f 957/1/935 958/1/936 956/1/934 +f 957/1/935 959/1/937 958/1/936 +f 959/1/937 960/1/938 958/1/936 +f 959/1/937 961/1/939 960/1/938 +f 960/1/938 860/1/839 858/1/836 +f 960/1/938 961/1/939 860/1/839 +f 946/1/924 935/1/914 940/1/837 +f 860/1/839 946/1/924 940/1/837 +f 860/1/839 961/1/939 946/1/924 +f 961/1/939 949/1/927 946/1/924 +f 961/1/939 951/1/929 949/1/927 +f 961/1/939 952/1/930 951/1/929 +f 961/1/939 954/1/932 952/1/930 +f 961/1/939 957/1/935 954/1/932 +f 961/1/939 959/1/937 957/1/935 +f 960/1/938 858/1/836 859/1/838 +f 937/1/916 947/1/926 859/1/838 +f 947/1/926 960/1/938 859/1/838 +f 948/1/925 960/1/938 947/1/926 +f 950/1/928 960/1/938 948/1/925 +f 953/1/931 960/1/938 950/1/928 +f 955/1/933 960/1/938 953/1/931 +f 956/1/934 960/1/938 955/1/933 +f 958/1/936 960/1/938 956/1/934 +f 946/1/924 947/1/926 937/1/916 +f 935/1/914 946/1/924 937/1/916 +f 962/1/940 864/1/844 897/1/876 +f 963/1/941 864/1/844 962/1/940 +f 964/1/942 963/1/941 962/1/940 +f 965/1/943 963/1/941 964/1/942 +f 966/1/944 963/1/941 965/1/943 +f 967/1/945 966/1/944 965/1/943 +f 968/1/946 966/1/944 967/1/945 +f 969/1/947 966/1/944 968/1/946 +f 970/1/948 969/1/947 968/1/946 +f 971/1/949 969/1/947 970/1/948 +f 963/1/941 845/1/824 864/1/844 +f 963/1/941 851/1/830 845/1/824 +f 966/1/944 851/1/830 963/1/941 +f 966/1/944 854/1/833 851/1/830 +f 969/1/947 854/1/833 966/1/944 +f 969/1/947 857/1/822 854/1/833 +f 846/1/825 962/1/940 897/1/876 +f 849/1/828 962/1/940 846/1/825 +f 849/1/828 964/1/942 962/1/940 +f 850/1/829 964/1/942 849/1/828 +f 850/1/829 965/1/943 964/1/942 +f 852/1/831 965/1/943 850/1/829 +f 852/1/831 967/1/945 965/1/943 +f 853/1/832 967/1/945 852/1/831 +f 855/1/834 967/1/945 853/1/832 +f 855/1/834 968/1/946 967/1/945 +f 856/1/835 968/1/946 855/1/834 +f 856/1/835 970/1/948 968/1/946 +f 843/1/821 970/1/948 856/1/835 +f 843/1/821 971/1/949 970/1/948 +f 987/1/950 844/1/823 842/1/820 +f 987/1/950 972/1/951 844/1/823 +f 973/1/952 975/1/953 974/1/954 +f 973/1/952 976/1/955 975/1/953 +f 976/1/955 977/1/956 975/1/953 +f 976/1/955 978/1/957 977/1/956 +f 979/1/958 980/1/959 977/1/956 +f 978/1/957 979/1/958 977/1/956 +f 981/1/960 982/1/961 980/1/959 +f 979/1/958 981/1/960 980/1/959 +f 981/1/960 983/1/962 982/1/961 +f 981/1/960 984/1/963 983/1/962 +f 984/1/963 985/1/964 983/1/962 +f 984/1/963 986/1/965 985/1/964 +f 986/1/965 987/1/950 985/1/964 +f 986/1/965 972/1/951 987/1/950 +f 969/1/947 974/1/954 857/1/822 +f 987/1/950 842/1/820 857/1/822 +f 974/1/954 987/1/950 857/1/822 +f 975/1/953 987/1/950 974/1/954 +f 977/1/956 987/1/950 975/1/953 +f 980/1/959 987/1/950 977/1/956 +f 982/1/961 987/1/950 980/1/959 +f 983/1/962 987/1/950 982/1/961 +f 985/1/964 987/1/950 983/1/962 +f 971/1/949 973/1/952 969/1/947 +f 973/1/952 974/1/954 969/1/947 +f 973/1/952 971/1/949 843/1/821 +f 844/1/823 973/1/952 843/1/821 +f 844/1/823 972/1/951 973/1/952 +f 972/1/951 976/1/955 973/1/952 +f 972/1/951 978/1/957 976/1/955 +f 972/1/951 979/1/958 978/1/957 +f 972/1/951 981/1/960 979/1/958 +f 972/1/951 984/1/963 981/1/960 +f 972/1/951 986/1/965 984/1/963 +f 870/1/849 988/1/966 908/1/887 +f 989/1/967 990/1/968 988/1/966 +f 870/1/849 989/1/967 988/1/966 +f 991/1/969 992/1/970 990/1/968 +f 989/1/967 991/1/969 990/1/968 +f 991/1/969 993/1/971 992/1/970 +f 991/1/969 994/1/972 993/1/971 +f 994/1/972 995/1/973 993/1/971 +f 996/1/974 997/1/975 995/1/973 +f 994/1/972 996/1/974 995/1/973 +f 998/1/976 999/1/977 997/1/975 +f 996/1/974 998/1/976 997/1/975 +f 1000/1/978 876/1/855 902/1/881 +f 1001/1/979 1000/1/978 902/1/881 +f 1002/1/980 1000/1/978 1001/1/979 +f 1003/1/981 1002/1/980 1001/1/979 +f 1004/1/982 1002/1/980 1003/1/981 +f 1005/1/983 1002/1/980 1004/1/982 +f 1006/1/984 1005/1/983 1004/1/982 +f 1007/1/985 1005/1/983 1006/1/984 +f 1008/1/986 1007/1/985 1006/1/984 +f 1009/1/987 1007/1/985 1008/1/986 +f 1010/1/988 1009/1/987 1008/1/986 +f 1011/1/989 1009/1/987 1010/1/988 +f 1012/1/990 1011/1/989 1010/1/988 +f 1013/1/991 1011/1/989 1012/1/990 +f 1014/1/992 1013/1/991 1012/1/990 +f 1000/1/978 870/1/849 876/1/855 +f 989/1/967 870/1/849 1000/1/978 +f 1002/1/980 989/1/967 1000/1/978 +f 991/1/969 989/1/967 1002/1/980 +f 1005/1/983 991/1/969 1002/1/980 +f 1007/1/985 994/1/972 1005/1/983 +f 994/1/972 991/1/969 1005/1/983 +f 1009/1/987 994/1/972 1007/1/985 +f 996/1/974 994/1/972 1009/1/987 +f 1011/1/989 996/1/974 1009/1/987 +f 998/1/976 996/1/974 1011/1/989 +f 1013/1/991 998/1/976 1011/1/989 +f 908/1/887 988/1/966 902/1/881 +f 988/1/966 1001/1/979 902/1/881 +f 988/1/966 990/1/968 1001/1/979 +f 990/1/968 1003/1/981 1001/1/979 +f 990/1/968 1004/1/982 1003/1/981 +f 990/1/968 992/1/970 1004/1/982 +f 992/1/970 1006/1/984 1004/1/982 +f 992/1/970 993/1/971 1006/1/984 +f 993/1/971 1008/1/986 1006/1/984 +f 993/1/971 995/1/973 1008/1/986 +f 995/1/973 1010/1/988 1008/1/986 +f 995/1/973 997/1/975 1010/1/988 +f 997/1/975 1012/1/990 1010/1/988 +f 997/1/975 999/1/977 1012/1/990 +f 999/1/977 1014/1/992 1012/1/990 +f 1017/1/993 1016/1/994 1015/1/995 +f 1017/1/993 1018/1/996 1016/1/994 +f 1019/1/997 1018/1/996 1017/1/993 +f 1019/1/997 1020/1/998 1018/1/996 +f 1021/1/999 1020/1/998 1019/1/997 +f 1021/1/999 1022/1/1000 1020/1/998 +f 1023/1/1001 1022/1/1000 1021/1/999 +f 1023/1/1001 1024/1/1002 1022/1/1000 +f 1023/1/1001 1025/1/1003 1024/1/1002 +f 1026/1/1004 1025/1/1003 1023/1/1001 +f 1027/1/1005 1025/1/1003 1026/1/1004 +f 1027/1/1005 1028/1/1006 1025/1/1003 +f 1029/1/1007 1028/1/1006 1027/1/1005 +f 1029/1/1007 1030/1/1008 1028/1/1006 +f 1031/1/1009 1030/1/1008 1032/1/1010 +f 1030/1/1008 1029/1/1007 1032/1/1010 +f 1033/1/1011 1031/1/1009 1032/1/1010 +f 1034/1/1012 1033/1/1011 1032/1/1010 +f 1035/1/1013 1033/1/1011 1034/1/1012 +f 1035/1/1013 1036/1/1014 1033/1/1011 +f 1035/1/1013 1037/1/1015 1036/1/1014 +f 1038/1/1016 1037/1/1015 1035/1/1013 +f 1038/1/1016 1039/1/1017 1037/1/1015 +f 1040/1/1018 1039/1/1017 1038/1/1016 +f 1040/1/1018 1041/1/1019 1039/1/1017 +f 1042/1/1020 1041/1/1019 1040/1/1018 +f 1042/1/1020 1043/1/1021 1041/1/1019 +f 1044/1/1022 1043/1/1021 1045/1/1023 +f 1043/1/1021 1042/1/1020 1045/1/1023 +f 1046/1/1024 1047/1/1025 1055/1/1026 +f 1056/1/1027 1046/1/1024 1055/1/1026 +f 1046/1/1024 1048/1/1028 1047/1/1025 +f 1046/1/1024 1049/1/1029 1048/1/1028 +f 1049/1/1029 1050/1/1030 1048/1/1028 +f 1049/1/1029 1051/1/1031 1050/1/1030 +f 1051/1/1031 1052/1/1032 1050/1/1030 +f 1044/1/1022 1045/1/1023 1052/1/1032 +f 1051/1/1031 1044/1/1022 1052/1/1032 +f 1053/1/1033 1055/1/1026 1054/1/1034 +f 1056/1/1027 1055/1/1026 1053/1/1033 +f 1071/1/1035 1053/1/1033 1072/1/1036 +f 1053/1/1033 1054/1/1034 1072/1/1036 +f 1057/1/1037 1059/1/1038 1058/1/1039 +f 1059/1/1038 1060/1/1040 1058/1/1039 +f 1059/1/1038 1061/1/1041 1060/1/1040 +f 1061/1/1041 1062/1/1042 1060/1/1040 +f 1063/1/1043 1064/1/1044 1062/1/1042 +f 1061/1/1041 1063/1/1043 1062/1/1042 +f 1065/1/1045 1066/1/1046 1064/1/1044 +f 1063/1/1043 1065/1/1045 1064/1/1044 +f 1065/1/1045 1067/1/1047 1066/1/1046 +f 1065/1/1045 1068/1/1048 1067/1/1047 +f 1069/1/1049 1070/1/1050 1067/1/1047 +f 1068/1/1048 1069/1/1049 1067/1/1047 +f 1071/1/1035 1072/1/1036 1070/1/1050 +f 1069/1/1049 1071/1/1035 1070/1/1050 +f 1054/1/1034 998/1/976 1013/1/991 +f 1072/1/1036 1054/1/1034 1013/1/991 +f 1058/1/1039 1072/1/1036 1013/1/991 +f 1054/1/1034 1055/1/1026 998/1/976 +f 1055/1/1026 1034/1/1012 998/1/976 +f 1034/1/1012 1032/1/1010 998/1/976 +f 1032/1/1010 1015/1/995 998/1/976 +f 1032/1/1010 1017/1/993 1015/1/995 +f 1060/1/1040 1062/1/1042 1058/1/1039 +f 1062/1/1042 1064/1/1044 1058/1/1039 +f 1064/1/1044 1066/1/1046 1058/1/1039 +f 1066/1/1046 1067/1/1047 1058/1/1039 +f 1067/1/1047 1070/1/1050 1058/1/1039 +f 1070/1/1050 1072/1/1036 1058/1/1039 +f 1032/1/1010 1019/1/997 1017/1/993 +f 1032/1/1010 1021/1/999 1019/1/997 +f 1032/1/1010 1023/1/1001 1021/1/999 +f 1032/1/1010 1026/1/1004 1023/1/1001 +f 1032/1/1010 1027/1/1005 1026/1/1004 +f 1032/1/1010 1029/1/1007 1027/1/1005 +f 1045/1/1023 1042/1/1020 1055/1/1026 +f 1042/1/1020 1034/1/1012 1055/1/1026 +f 1047/1/1025 1048/1/1028 1055/1/1026 +f 1048/1/1028 1050/1/1030 1055/1/1026 +f 1050/1/1030 1052/1/1032 1055/1/1026 +f 1052/1/1032 1045/1/1023 1055/1/1026 +f 1042/1/1020 1035/1/1013 1034/1/1012 +f 1042/1/1020 1038/1/1016 1035/1/1013 +f 1042/1/1020 1040/1/1018 1038/1/1016 +f 1057/1/1037 1058/1/1039 1013/1/991 +f 1014/1/992 1057/1/1037 1013/1/991 +f 999/1/977 1031/1/1009 1014/1/992 +f 1031/1/1009 1053/1/1033 1014/1/992 +f 1053/1/1033 1057/1/1037 1014/1/992 +f 1016/1/994 1031/1/1009 999/1/977 +f 1030/1/1008 1031/1/1009 1016/1/994 +f 1053/1/1033 1059/1/1038 1057/1/1037 +f 1018/1/996 1030/1/1008 1016/1/994 +f 1053/1/1033 1061/1/1041 1059/1/1038 +f 1020/1/998 1030/1/1008 1018/1/996 +f 1053/1/1033 1063/1/1043 1061/1/1041 +f 1022/1/1000 1030/1/1008 1020/1/998 +f 1053/1/1033 1065/1/1045 1063/1/1043 +f 1024/1/1002 1030/1/1008 1022/1/1000 +f 1025/1/1003 1030/1/1008 1024/1/1002 +f 1053/1/1033 1068/1/1048 1065/1/1045 +f 1053/1/1033 1069/1/1049 1068/1/1048 +f 1028/1/1006 1030/1/1008 1025/1/1003 +f 1053/1/1033 1071/1/1035 1069/1/1049 +f 1031/1/1009 1056/1/1027 1053/1/1033 +f 1033/1/1011 1056/1/1027 1031/1/1009 +f 1044/1/1022 1056/1/1027 1033/1/1011 +f 1043/1/1021 1044/1/1022 1033/1/1011 +f 1037/1/1015 1039/1/1017 1033/1/1011 +f 1039/1/1017 1041/1/1019 1033/1/1011 +f 1041/1/1019 1043/1/1021 1033/1/1011 +f 1044/1/1022 1051/1/1031 1056/1/1027 +f 1051/1/1031 1046/1/1024 1056/1/1027 +f 1036/1/1014 1037/1/1015 1033/1/1011 +f 1051/1/1031 1049/1/1029 1046/1/1024 +f 1015/1/995 999/1/977 998/1/976 +f 1015/1/995 1016/1/994 999/1/977 +f 941/1/919 848/1/827 847/1/826 +f 938/1/917 848/1/827 941/1/919 +f 942/1/920 938/1/917 941/1/919 +f 939/1/918 938/1/917 942/1/920 +f 943/1/921 939/1/918 942/1/920 +f 944/1/922 939/1/918 943/1/921 +f 940/1/837 939/1/918 944/1/922 +f 945/1/923 940/1/837 944/1/922 +f 859/1/838 940/1/837 945/1/923 +f 1073/1/1051 1074/1/1052 1075/1/1051 +f 1074/1/1052 1076/1/1052 1075/1/1051 +f 1076/1/1052 1077/1/1053 1075/1/1051 +f 1078/1/1054 1079/1/1055 1073/1/1051 +f 1079/1/1055 1074/1/1052 1073/1/1051 +f 1076/1/1052 1080/1/1056 1077/1/1053 +f 1081/1/1057 1082/1/1058 1083/1/1059 +f 1084/1/1060 1082/1/1058 1081/1/1057 +f 1084/1/1060 1085/1/1061 1082/1/1058 +f 1086/1/1062 1085/1/1061 1084/1/1060 +f 1077/1/1053 1083/1/1059 1075/1/1051 +f 1081/1/1057 1083/1/1059 1077/1/1053 +f 1085/1/1061 1087/1/1061 1082/1/1058 +f 1087/1/1061 1088/1/1063 1082/1/1058 +f 1083/1/1059 1089/1/1064 1075/1/1051 +f 1089/1/1064 1073/1/1051 1075/1/1051 +f 1090/1/1065 1086/1/1062 1084/1/1060 +f 1091/1/1066 1086/1/1062 1090/1/1065 +f 1092/1/1067 1081/1/1057 1080/1/1056 +f 1081/1/1057 1077/1/1053 1080/1/1056 +f 1088/1/1063 1093/1/1068 1089/1/1064 +f 1093/1/1068 1094/1/1069 1089/1/1064 +f 1087/1/1061 1095/1/1070 1088/1/1063 +f 1095/1/1070 1093/1/1068 1088/1/1063 +f 1089/1/1064 1094/1/1069 1073/1/1051 +f 1094/1/1069 1078/1/1054 1073/1/1051 +f 1096/1/1071 1090/1/1065 1092/1/1067 +f 1097/1/1072 1090/1/1065 1096/1/1071 +f 1097/1/1072 1091/1/1066 1090/1/1065 +f 1098/1/1073 1091/1/1066 1097/1/1072 +f 1096/1/1071 1092/1/1067 1076/1/1052 +f 1092/1/1067 1080/1/1056 1076/1/1052 +f 1095/1/1070 1099/1/1074 1093/1/1068 +f 1099/1/1074 1100/1/1075 1093/1/1068 +f 1078/1/1054 1101/1/1076 1079/1/1055 +f 1094/1/1069 1101/1/1076 1078/1/1054 +f 1102/1/1077 1098/1/1073 1097/1/1072 +f 1103/1/1073 1098/1/1073 1102/1/1077 +f 1104/1/1078 1096/1/1071 1074/1/1052 +f 1096/1/1071 1076/1/1052 1074/1/1052 +f 1100/1/1075 1104/1/1078 1101/1/1076 +f 1100/1/1075 1102/1/1077 1104/1/1078 +f 1099/1/1074 1102/1/1077 1100/1/1075 +f 1099/1/1074 1103/1/1073 1102/1/1077 +f 1101/1/1076 1104/1/1078 1074/1/1052 +f 1079/1/1055 1101/1/1076 1074/1/1052 +f 1086/1/1062 1091/1/1066 1085/1/1061 +f 1091/1/1066 1098/1/1073 1085/1/1061 +f 1098/1/1073 1087/1/1061 1085/1/1061 +f 1098/1/1073 1103/1/1073 1087/1/1061 +f 1103/1/1073 1095/1/1070 1087/1/1061 +f 1103/1/1073 1099/1/1074 1095/1/1070 +f 1082/1/1058 1088/1/1063 1083/1/1059 +f 1088/1/1063 1089/1/1064 1083/1/1059 +f 1093/1/1068 1100/1/1075 1094/1/1069 +f 1100/1/1075 1101/1/1076 1094/1/1069 +f 1104/1/1078 1097/1/1072 1096/1/1071 +f 1102/1/1077 1097/1/1072 1104/1/1078 +f 1092/1/1067 1084/1/1060 1081/1/1057 +f 1090/1/1065 1084/1/1060 1092/1/1067 +f 1107/1/1079 1106/1/1080 1105/1/1081 +f 1182/1/1082 1108/1/1083 1192/1/1084 +f 1108/1/1083 1109/1/1085 1192/1/1084 +f 1112/1/1086 1110/1/1087 1111/1/1088 +f 1113/1/1089 1112/1/1086 1111/1/1088 +f 1114/1/1090 1112/1/1086 1113/1/1089 +f 1115/1/1091 1114/1/1090 1113/1/1089 +f 1115/1/1091 1116/1/1092 1114/1/1090 +f 1116/1/1092 1117/1/1093 1114/1/1090 +f 1118/1/1094 1120/1/1095 1119/1/1096 +f 1118/1/1094 1121/1/1097 1120/1/1095 +f 1121/1/1097 1122/1/1098 1120/1/1095 +f 1123/1/1099 1122/1/1098 1121/1/1097 +f 1118/1/1094 1119/1/1096 1109/1/1085 +f 1108/1/1083 1118/1/1094 1109/1/1085 +f 1116/1/1092 1124/1/1100 1117/1/1093 +f 1124/1/1100 1125/1/1101 1117/1/1093 +f 1124/1/1100 1126/1/1102 1125/1/1101 +f 1125/1/1101 1134/1/1103 1135/1/1104 +f 1125/1/1101 1126/1/1102 1134/1/1103 +f 1129/1/1105 1128/1/1106 1127/1/1107 +f 1130/1/1108 1129/1/1105 1127/1/1107 +f 1131/1/1109 1129/1/1105 1130/1/1108 +f 1132/1/1110 1131/1/1109 1130/1/1108 +f 1133/1/1111 1132/1/1110 1130/1/1108 +f 1136/1/1112 1137/1/1113 1135/1/1104 +f 1134/1/1103 1136/1/1112 1135/1/1104 +f 1138/1/1114 1132/1/1110 1139/1/1115 +f 1132/1/1110 1133/1/1111 1139/1/1115 +f 1137/1/1113 1139/1/1115 1135/1/1104 +f 1140/1/1116 1141/1/1117 1139/1/1115 +f 1142/1/1118 1140/1/1116 1139/1/1115 +f 1137/1/1113 1142/1/1118 1139/1/1115 +f 1140/1/1116 1143/1/1119 1141/1/1117 +f 1143/1/1119 1144/1/1120 1141/1/1117 +f 1146/1/1121 1142/1/1118 1137/1/1113 +f 1145/1/1122 1146/1/1121 1137/1/1113 +f 1133/1/1111 1125/1/1101 1135/1/1104 +f 1139/1/1115 1133/1/1111 1135/1/1104 +f 1130/1/1108 1127/1/1107 1117/1/1093 +f 1125/1/1101 1130/1/1108 1117/1/1093 +f 1133/1/1111 1130/1/1108 1125/1/1101 +f 1117/1/1093 1123/1/1099 1114/1/1090 +f 1117/1/1093 1127/1/1107 1123/1/1099 +f 1112/1/1086 1118/1/1094 1110/1/1087 +f 1121/1/1097 1118/1/1094 1112/1/1086 +f 1114/1/1090 1121/1/1097 1112/1/1086 +f 1123/1/1099 1121/1/1097 1114/1/1090 +f 1110/1/1087 1107/1/1079 1148/1/1123 +f 1107/1/1079 1147/1/1124 1148/1/1123 +f 1147/1/1124 1151/1/1125 1148/1/1123 +f 1150/1/1126 1149/1/1127 1148/1/1123 +f 1151/1/1125 1153/1/1128 1148/1/1123 +f 1149/1/1127 1154/1/1129 1148/1/1123 +f 1154/1/1129 1169/1/1130 1148/1/1123 +f 1153/1/1128 1152/1/1131 1148/1/1123 +f 1152/1/1131 1150/1/1126 1148/1/1123 +f 1118/1/1094 1108/1/1083 1110/1/1087 +f 1108/1/1083 1107/1/1079 1110/1/1087 +f 1169/1/1130 1155/1/1132 1148/1/1123 +f 1169/1/1130 1156/1/1133 1155/1/1132 +f 1169/1/1130 1157/1/1134 1156/1/1133 +f 1169/1/1130 1158/1/1135 1157/1/1134 +f 1158/1/1135 1159/1/1136 1157/1/1134 +f 1159/1/1136 1160/1/1137 1157/1/1134 +f 1160/1/1137 1161/1/1138 1157/1/1134 +f 1161/1/1138 1162/1/1139 1157/1/1134 +f 1163/1/1140 1169/1/1130 1154/1/1129 +f 1147/1/1124 1164/1/1141 1151/1/1125 +f 1147/1/1124 1165/1/1142 1164/1/1141 +f 1166/1/1143 1169/1/1130 1163/1/1140 +f 1167/1/1144 1169/1/1130 1166/1/1143 +f 1147/1/1124 1168/1/1145 1165/1/1142 +f 1170/1/1146 1171/1/1147 1167/1/1144 +f 1171/1/1147 1169/1/1130 1167/1/1144 +f 1147/1/1124 1172/1/1148 1168/1/1145 +f 1172/1/1148 1173/1/1149 1168/1/1145 +f 1174/1/1150 1171/1/1147 1170/1/1146 +f 1172/1/1148 1175/1/1151 1173/1/1149 +f 1176/1/1152 1174/1/1150 1170/1/1146 +f 1178/1/1153 1174/1/1150 1176/1/1152 +f 1175/1/1151 1176/1/1152 1173/1/1149 +f 1175/1/1151 1177/1/1154 1176/1/1152 +f 1177/1/1154 1178/1/1153 1176/1/1152 +f 1107/1/1079 1108/1/1083 1106/1/1080 +f 1185/1/1155 1179/1/1156 1180/1/1157 +f 1182/1/1082 1181/1/1158 1179/1/1156 +f 1185/1/1155 1182/1/1082 1179/1/1156 +f 1181/1/1158 1183/1/1159 1179/1/1156 +f 1184/1/1160 1185/1/1155 1180/1/1157 +f 1186/1/1161 1185/1/1155 1184/1/1160 +f 1106/1/1080 1108/1/1083 1185/1/1155 +f 1108/1/1083 1182/1/1082 1185/1/1155 +f 1180/1/1157 1179/1/1156 1187/1/1162 +f 1179/1/1156 1188/1/1163 1187/1/1162 +f 1192/1/1084 1193/1/1164 1187/1/1162 +f 1188/1/1163 1192/1/1084 1187/1/1162 +f 1193/1/1164 1189/1/1165 1187/1/1162 +f 1190/1/1166 1191/1/1167 1188/1/1163 +f 1191/1/1167 1192/1/1084 1188/1/1163 +f 1193/1/1164 1194/1/1168 1189/1/1165 +f 1192/1/1084 1105/1/1081 1193/1/1164 +f 1109/1/1085 1105/1/1081 1192/1/1084 +f 1195/1/1169 1196/1/1170 1197/1/1171 +f 1198/1/1172 1195/1/1169 1197/1/1171 +f 1195/1/1169 1199/1/1173 1196/1/1170 +f 1200/1/1174 1198/1/1172 1197/1/1171 +f 1195/1/1169 1201/1/1175 1199/1/1173 +f 1202/1/1176 1198/1/1172 1200/1/1174 +f 1203/1/1177 1202/1/1176 1200/1/1174 +f 1195/1/1169 1204/1/1178 1201/1/1175 +f 1204/1/1178 1205/1/1179 1201/1/1175 +f 1206/1/1180 1202/1/1176 1203/1/1177 +f 1204/1/1178 1207/1/1181 1205/1/1179 +f 1208/1/1182 1202/1/1176 1206/1/1180 +f 1209/1/1183 1210/1/1184 1206/1/1180 +f 1210/1/1184 1208/1/1182 1206/1/1180 +f 1207/1/1181 1211/1/1185 1205/1/1179 +f 1213/1/1186 1212/1/1187 1205/1/1179 +f 1211/1/1185 1213/1/1186 1205/1/1179 +f 1212/1/1187 1209/1/1183 1206/1/1180 +f 1212/1/1187 1214/1/1188 1205/1/1179 +f 1111/1/1088 1212/1/1187 1206/1/1180 +f 1214/1/1188 1215/1/1189 1205/1/1179 +f 1119/1/1096 1111/1/1088 1206/1/1180 +f 1205/1/1179 1216/1/1190 1217/1/1191 +f 1215/1/1189 1216/1/1190 1205/1/1179 +f 1105/1/1081 1119/1/1096 1206/1/1180 +f 1109/1/1085 1119/1/1096 1105/1/1081 +f 1216/1/1190 1218/1/1192 1217/1/1191 +f 1216/1/1190 1219/1/1193 1218/1/1192 +f 1216/1/1190 1220/1/1194 1219/1/1193 +f 1216/1/1190 1221/1/1195 1220/1/1194 +f 1222/1/1196 1212/1/1187 1213/1/1186 +f 1212/1/1187 1223/1/1197 1209/1/1183 +f 1224/1/1198 1212/1/1187 1222/1/1196 +f 1212/1/1187 1225/1/1199 1223/1/1197 +f 1225/1/1199 1212/1/1187 1224/1/1198 +f 1119/1/1096 1113/1/1089 1111/1/1088 +f 1119/1/1096 1120/1/1095 1113/1/1089 +f 1120/1/1095 1115/1/1091 1113/1/1089 +f 1120/1/1095 1122/1/1098 1115/1/1091 +f 1128/1/1106 1116/1/1092 1115/1/1091 +f 1122/1/1098 1128/1/1106 1115/1/1091 +f 1128/1/1106 1129/1/1105 1116/1/1092 +f 1129/1/1105 1131/1/1109 1116/1/1092 +f 1131/1/1109 1124/1/1100 1116/1/1092 +f 1131/1/1109 1132/1/1110 1124/1/1100 +f 1132/1/1110 1126/1/1102 1124/1/1100 +f 1126/1/1102 1138/1/1114 1134/1/1103 +f 1126/1/1102 1132/1/1110 1138/1/1114 +f 1138/1/1114 1228/1/1200 1134/1/1103 +f 1228/1/1200 1226/1/1201 1134/1/1103 +f 1226/1/1201 1136/1/1112 1134/1/1103 +f 1227/1/1202 1228/1/1200 1138/1/1114 +f 1229/1/1203 1230/1/1204 1227/1/1202 +f 1230/1/1204 1228/1/1200 1227/1/1202 +f 1226/1/1201 1231/1/1205 1136/1/1112 +f 1226/1/1201 1232/1/1206 1231/1/1205 +f 1226/1/1201 1228/1/1200 1142/1/1118 +f 1228/1/1200 1140/1/1116 1142/1/1118 +f 1105/1/1081 1185/1/1155 1193/1/1164 +f 1105/1/1081 1106/1/1080 1185/1/1155 +f 1141/1/1117 1138/1/1114 1139/1/1115 +f 1141/1/1117 1227/1/1202 1138/1/1114 +f 1196/1/1170 1178/1/1153 1197/1/1171 +f 1178/1/1153 1177/1/1154 1197/1/1171 +f 1199/1/1173 1178/1/1153 1196/1/1170 +f 1177/1/1154 1175/1/1151 1197/1/1171 +f 1175/1/1151 1200/1/1174 1197/1/1171 +f 1174/1/1150 1178/1/1153 1199/1/1173 +f 1201/1/1175 1174/1/1150 1199/1/1173 +f 1175/1/1151 1172/1/1148 1200/1/1174 +f 1172/1/1148 1203/1/1177 1200/1/1174 +f 1171/1/1147 1174/1/1150 1201/1/1175 +f 1205/1/1179 1171/1/1147 1201/1/1175 +f 1172/1/1148 1147/1/1124 1203/1/1177 +f 1147/1/1124 1206/1/1180 1203/1/1177 +f 1169/1/1130 1171/1/1147 1205/1/1179 +f 1158/1/1135 1169/1/1130 1217/1/1191 +f 1169/1/1130 1205/1/1179 1217/1/1191 +f 1218/1/1192 1158/1/1135 1217/1/1191 +f 1159/1/1136 1158/1/1135 1218/1/1192 +f 1219/1/1193 1159/1/1136 1218/1/1192 +f 1160/1/1137 1159/1/1136 1219/1/1193 +f 1220/1/1194 1160/1/1137 1219/1/1193 +f 1161/1/1138 1160/1/1137 1220/1/1194 +f 1221/1/1195 1161/1/1138 1220/1/1194 +f 1162/1/1139 1161/1/1138 1221/1/1195 +f 1216/1/1190 1162/1/1139 1221/1/1195 +f 1157/1/1134 1162/1/1139 1216/1/1190 +f 1215/1/1189 1157/1/1134 1216/1/1190 +f 1156/1/1133 1157/1/1134 1215/1/1189 +f 1214/1/1188 1156/1/1133 1215/1/1189 +f 1155/1/1132 1156/1/1133 1214/1/1188 +f 1212/1/1187 1155/1/1132 1214/1/1188 +f 1148/1/1123 1155/1/1132 1212/1/1187 +f 1111/1/1088 1148/1/1123 1212/1/1187 +f 1110/1/1087 1148/1/1123 1111/1/1088 +f 1147/1/1124 1107/1/1079 1206/1/1180 +f 1107/1/1079 1105/1/1081 1206/1/1180 +f 1198/1/1172 1176/1/1152 1195/1/1169 +f 1173/1/1149 1176/1/1152 1198/1/1172 +f 1176/1/1152 1170/1/1146 1195/1/1169 +f 1202/1/1176 1173/1/1149 1198/1/1172 +f 1170/1/1146 1204/1/1178 1195/1/1169 +f 1168/1/1145 1173/1/1149 1202/1/1176 +f 1170/1/1146 1167/1/1144 1204/1/1178 +f 1167/1/1144 1207/1/1181 1204/1/1178 +f 1165/1/1142 1168/1/1145 1202/1/1176 +f 1208/1/1182 1165/1/1142 1202/1/1176 +f 1167/1/1144 1166/1/1143 1207/1/1181 +f 1166/1/1143 1211/1/1185 1207/1/1181 +f 1166/1/1143 1163/1/1140 1211/1/1185 +f 1210/1/1184 1164/1/1141 1208/1/1182 +f 1164/1/1141 1165/1/1142 1208/1/1182 +f 1163/1/1140 1213/1/1186 1211/1/1185 +f 1209/1/1183 1151/1/1125 1210/1/1184 +f 1151/1/1125 1164/1/1141 1210/1/1184 +f 1163/1/1140 1154/1/1129 1213/1/1186 +f 1154/1/1129 1222/1/1196 1213/1/1186 +f 1223/1/1197 1153/1/1128 1209/1/1183 +f 1153/1/1128 1151/1/1125 1209/1/1183 +f 1154/1/1129 1149/1/1127 1222/1/1196 +f 1149/1/1127 1224/1/1198 1222/1/1196 +f 1225/1/1199 1152/1/1131 1223/1/1197 +f 1152/1/1131 1153/1/1128 1223/1/1197 +f 1149/1/1127 1150/1/1126 1224/1/1198 +f 1150/1/1126 1225/1/1199 1224/1/1198 +f 1150/1/1126 1152/1/1131 1225/1/1199 +f 1233/1/1207 1122/1/1098 1123/1/1099 +f 1234/1/1208 1233/1/1207 1123/1/1099 +f 1235/1/1209 1236/1/1210 1127/1/1107 +f 1128/1/1106 1235/1/1209 1127/1/1107 +f 1127/1/1107 1236/1/1210 1123/1/1099 +f 1236/1/1210 1234/1/1208 1123/1/1099 +f 1233/1/1207 1235/1/1209 1122/1/1098 +f 1235/1/1209 1128/1/1106 1122/1/1098 +f 1237/1/1211 1238/1/1212 1236/1/1210 +f 1235/1/1209 1237/1/1211 1236/1/1210 +f 1239/1/1213 1233/1/1207 1234/1/1208 +f 1239/1/1213 1240/1/1214 1233/1/1207 +f 1236/1/1210 1239/1/1213 1234/1/1208 +f 1241/1/1215 1242/1/1216 1239/1/1213 +f 1236/1/1210 1238/1/1212 1239/1/1213 +f 1238/1/1212 1241/1/1215 1239/1/1213 +f 1242/1/1216 1243/1/1217 1239/1/1213 +f 1238/1/1212 1244/1/1218 1241/1/1215 +f 1244/1/1218 1245/1/1219 1241/1/1215 +f 1237/1/1211 1235/1/1209 1233/1/1207 +f 1240/1/1214 1237/1/1211 1233/1/1207 +f 1248/1/1220 1237/1/1211 1240/1/1214 +f 1246/1/1221 1248/1/1220 1240/1/1214 +f 1247/1/1222 1248/1/1220 1246/1/1221 +f 1249/1/1223 1237/1/1211 1248/1/1220 +f 1250/1/1224 1237/1/1211 1249/1/1223 +f 1251/1/1225 1237/1/1211 1250/1/1224 +f 1241/1/1215 1248/1/1220 1242/1/1216 +f 1241/1/1215 1249/1/1223 1248/1/1220 +f 1239/1/1213 1246/1/1221 1240/1/1214 +f 1243/1/1217 1246/1/1221 1239/1/1213 +f 1243/1/1217 1247/1/1222 1246/1/1221 +f 1242/1/1216 1247/1/1222 1243/1/1217 +f 1242/1/1216 1248/1/1220 1247/1/1222 +f 1245/1/1219 1249/1/1223 1241/1/1215 +f 1245/1/1219 1250/1/1224 1249/1/1223 +f 1244/1/1218 1250/1/1224 1245/1/1219 +f 1244/1/1218 1251/1/1225 1250/1/1224 +f 1238/1/1212 1251/1/1225 1244/1/1218 +f 1238/1/1212 1237/1/1211 1251/1/1225 +f 1136/1/1112 1231/1/1205 1137/1/1113 +f 1231/1/1205 1145/1/1122 1137/1/1113 +f 1231/1/1205 1232/1/1206 1145/1/1122 +f 1232/1/1206 1146/1/1121 1145/1/1122 +f 1232/1/1206 1226/1/1201 1146/1/1121 +f 1226/1/1201 1142/1/1118 1146/1/1121 +f 1189/1/1165 1180/1/1157 1187/1/1162 +f 1184/1/1160 1180/1/1157 1189/1/1165 +f 1194/1/1168 1184/1/1160 1189/1/1165 +f 1186/1/1161 1184/1/1160 1194/1/1168 +f 1193/1/1164 1186/1/1161 1194/1/1168 +f 1185/1/1155 1186/1/1161 1193/1/1164 +f 1179/1/1156 1183/1/1159 1188/1/1163 +f 1183/1/1159 1190/1/1166 1188/1/1163 +f 1183/1/1159 1181/1/1158 1190/1/1166 +f 1181/1/1158 1191/1/1167 1190/1/1166 +f 1181/1/1158 1182/1/1082 1191/1/1167 +f 1182/1/1082 1192/1/1084 1191/1/1167 +f 1144/1/1120 1227/1/1202 1141/1/1117 +f 1229/1/1203 1227/1/1202 1144/1/1120 +f 1143/1/1119 1229/1/1203 1144/1/1120 +f 1230/1/1204 1229/1/1203 1143/1/1119 +f 1140/1/1116 1230/1/1204 1143/1/1119 +f 1228/1/1200 1230/1/1204 1140/1/1116 +f 1252/1/1226 1254/1/1227 1253/1/1228 +f 1255/1/1229 1328/1/1230 1257/1/1231 +f 1255/1/1229 1256/1/1232 1328/1/1230 +f 1258/1/1233 1260/1/1234 1259/1/1235 +f 1258/1/1233 1261/1/1236 1260/1/1234 +f 1261/1/1236 1262/1/1237 1260/1/1234 +f 1263/1/1238 1262/1/1237 1261/1/1236 +f 1263/1/1238 1264/1/1239 1262/1/1237 +f 1267/1/1240 1265/1/1241 1266/1/1242 +f 1268/1/1243 1267/1/1240 1266/1/1242 +f 1269/1/1244 1267/1/1240 1268/1/1243 +f 1270/1/1245 1267/1/1240 1269/1/1244 +f 1266/1/1242 1256/1/1232 1255/1/1229 +f 1265/1/1241 1256/1/1232 1266/1/1242 +f 1271/1/1246 1264/1/1239 1263/1/1238 +f 1272/1/1247 1271/1/1246 1263/1/1238 +f 1273/1/1248 1271/1/1246 1272/1/1247 +f 1281/1/1249 1273/1/1248 1282/1/1250 +f 1273/1/1248 1272/1/1247 1282/1/1250 +f 1274/1/1251 1275/1/1252 1276/1/1253 +f 1274/1/1251 1277/1/1254 1275/1/1252 +f 1277/1/1254 1278/1/1255 1275/1/1252 +f 1278/1/1255 1279/1/1256 1275/1/1252 +f 1278/1/1255 1280/1/1257 1279/1/1256 +f 1283/1/1258 1281/1/1249 1282/1/1250 +f 1283/1/1258 1284/1/1259 1281/1/1249 +f 1285/1/1260 1286/1/1261 1287/1/1262 +f 1279/1/1256 1285/1/1260 1287/1/1262 +f 1279/1/1256 1280/1/1257 1285/1/1260 +f 1288/1/1263 1289/1/1264 1286/1/1261 +f 1289/1/1264 1282/1/1250 1286/1/1261 +f 1289/1/1264 1294/1/1265 1282/1/1250 +f 1294/1/1265 1283/1/1258 1282/1/1250 +f 1294/1/1265 1290/1/1266 1283/1/1258 +f 1291/1/1267 1289/1/1264 1288/1/1263 +f 1292/1/1268 1289/1/1264 1291/1/1267 +f 1294/1/1265 1293/1/1269 1290/1/1266 +f 1286/1/1261 1282/1/1250 1287/1/1262 +f 1282/1/1250 1272/1/1247 1287/1/1262 +f 1272/1/1247 1279/1/1256 1287/1/1262 +f 1275/1/1252 1263/1/1238 1276/1/1253 +f 1272/1/1247 1263/1/1238 1275/1/1252 +f 1279/1/1256 1272/1/1247 1275/1/1252 +f 1276/1/1253 1261/1/1236 1270/1/1245 +f 1276/1/1253 1263/1/1238 1261/1/1236 +f 1267/1/1240 1258/1/1233 1265/1/1241 +f 1261/1/1236 1258/1/1233 1267/1/1240 +f 1270/1/1245 1261/1/1236 1267/1/1240 +f 1258/1/1233 1295/1/1270 1265/1/1241 +f 1295/1/1270 1254/1/1227 1265/1/1241 +f 1254/1/1227 1256/1/1232 1265/1/1241 +f 1296/1/1271 1295/1/1270 1258/1/1233 +f 1297/1/1272 1299/1/1273 1296/1/1271 +f 1298/1/1274 1295/1/1270 1296/1/1271 +f 1301/1/1275 1302/1/1276 1296/1/1271 +f 1299/1/1273 1300/1/1277 1296/1/1271 +f 1300/1/1277 1303/1/1278 1296/1/1271 +f 1303/1/1278 1298/1/1274 1296/1/1271 +f 1302/1/1276 1297/1/1272 1296/1/1271 +f 1304/1/1279 1301/1/1275 1296/1/1271 +f 1305/1/1280 1301/1/1275 1304/1/1279 +f 1306/1/1281 1301/1/1275 1305/1/1280 +f 1312/1/1282 1301/1/1275 1306/1/1281 +f 1308/1/1283 1309/1/1284 1306/1/1281 +f 1309/1/1284 1310/1/1285 1306/1/1281 +f 1310/1/1285 1307/1/1286 1306/1/1281 +f 1307/1/1286 1312/1/1282 1306/1/1281 +f 1311/1/1287 1308/1/1283 1306/1/1281 +f 1301/1/1275 1313/1/1288 1302/1/1276 +f 1314/1/1289 1295/1/1270 1298/1/1274 +f 1315/1/1290 1295/1/1270 1314/1/1289 +f 1301/1/1275 1316/1/1291 1313/1/1288 +f 1317/1/1292 1295/1/1270 1315/1/1290 +f 1301/1/1275 1318/1/1293 1316/1/1291 +f 1319/1/1294 1295/1/1270 1317/1/1292 +f 1320/1/1295 1295/1/1270 1319/1/1294 +f 1301/1/1275 1321/1/1296 1318/1/1293 +f 1323/1/1297 1320/1/1295 1319/1/1294 +f 1322/1/1298 1323/1/1297 1319/1/1294 +f 1301/1/1275 1324/1/1299 1322/1/1298 +f 1324/1/1299 1325/1/1300 1322/1/1298 +f 1325/1/1300 1326/1/1301 1322/1/1298 +f 1327/1/1302 1323/1/1297 1322/1/1298 +f 1326/1/1301 1327/1/1302 1322/1/1298 +f 1301/1/1275 1322/1/1298 1321/1/1296 +f 1256/1/1232 1254/1/1227 1252/1/1226 +f 1328/1/1230 1330/1/1303 1329/1/1304 +f 1331/1/1305 1328/1/1230 1329/1/1304 +f 1332/1/1306 1333/1/1307 1330/1/1303 +f 1328/1/1230 1332/1/1306 1330/1/1303 +f 1334/1/1308 1331/1/1305 1329/1/1304 +f 1333/1/1307 1335/1/1309 1330/1/1303 +f 1256/1/1232 1252/1/1226 1328/1/1230 +f 1252/1/1226 1332/1/1306 1328/1/1230 +f 1329/1/1304 1330/1/1303 1336/1/1310 +f 1330/1/1303 1337/1/1311 1336/1/1310 +f 1337/1/1311 1253/1/1228 1336/1/1310 +f 1253/1/1228 1257/1/1231 1336/1/1310 +f 1339/1/1312 1253/1/1228 1337/1/1311 +f 1338/1/1313 1339/1/1312 1337/1/1311 +f 1340/1/1314 1338/1/1313 1337/1/1311 +f 1257/1/1231 1341/1/1315 1336/1/1310 +f 1253/1/1228 1255/1/1229 1257/1/1231 +f 1342/1/1316 1344/1/1317 1343/1/1318 +f 1342/1/1316 1345/1/1319 1344/1/1317 +f 1345/1/1319 1346/1/1320 1344/1/1317 +f 1347/1/1321 1342/1/1316 1343/1/1318 +f 1348/1/1322 1347/1/1321 1343/1/1318 +f 1345/1/1319 1349/1/1323 1346/1/1320 +f 1350/1/1324 1347/1/1321 1348/1/1322 +f 1345/1/1319 1351/1/1325 1349/1/1323 +f 1351/1/1325 1352/1/1326 1349/1/1323 +f 1353/1/1327 1347/1/1321 1350/1/1324 +f 1356/1/1328 1347/1/1321 1353/1/1327 +f 1355/1/1329 1354/1/1330 1353/1/1327 +f 1354/1/1330 1356/1/1328 1353/1/1327 +f 1357/1/1331 1355/1/1329 1353/1/1327 +f 1351/1/1325 1358/1/1332 1352/1/1326 +f 1360/1/1333 1359/1/1334 1352/1/1326 +f 1359/1/1334 1357/1/1331 1352/1/1326 +f 1358/1/1332 1360/1/1333 1352/1/1326 +f 1361/1/1335 1357/1/1331 1353/1/1327 +f 1362/1/1336 1361/1/1335 1353/1/1327 +f 1259/1/1235 1266/1/1242 1255/1/1229 +f 1253/1/1228 1259/1/1235 1255/1/1229 +f 1357/1/1331 1259/1/1235 1253/1/1228 +f 1352/1/1326 1357/1/1331 1253/1/1228 +f 1363/1/1337 1362/1/1336 1353/1/1327 +f 1364/1/1338 1363/1/1337 1353/1/1327 +f 1365/1/1339 1363/1/1337 1364/1/1338 +f 1366/1/1340 1363/1/1337 1365/1/1339 +f 1367/1/1341 1363/1/1337 1366/1/1340 +f 1368/1/1342 1363/1/1337 1367/1/1341 +f 1369/1/1343 1357/1/1331 1359/1/1334 +f 1357/1/1331 1370/1/1344 1355/1/1329 +f 1371/1/1345 1357/1/1331 1369/1/1343 +f 1357/1/1331 1372/1/1346 1370/1/1344 +f 1357/1/1331 1373/1/1347 1372/1/1346 +f 1373/1/1347 1357/1/1331 1371/1/1345 +f 1374/1/1348 1363/1/1337 1368/1/1342 +f 1259/1/1235 1260/1/1234 1266/1/1242 +f 1260/1/1234 1268/1/1243 1266/1/1242 +f 1260/1/1234 1262/1/1237 1268/1/1243 +f 1262/1/1237 1269/1/1244 1268/1/1243 +f 1262/1/1237 1264/1/1239 1269/1/1244 +f 1264/1/1239 1274/1/1251 1269/1/1244 +f 1264/1/1239 1277/1/1254 1274/1/1251 +f 1271/1/1246 1278/1/1255 1277/1/1254 +f 1264/1/1239 1271/1/1246 1277/1/1254 +f 1273/1/1248 1280/1/1257 1278/1/1255 +f 1271/1/1246 1273/1/1248 1278/1/1255 +f 1280/1/1257 1281/1/1249 1285/1/1260 +f 1280/1/1257 1273/1/1248 1281/1/1249 +f 1281/1/1249 1375/1/1349 1285/1/1260 +f 1284/1/1259 1375/1/1349 1281/1/1249 +f 1379/1/1350 1376/1/1351 1375/1/1349 +f 1284/1/1259 1379/1/1350 1375/1/1349 +f 1377/1/1352 1379/1/1350 1284/1/1259 +f 1376/1/1351 1378/1/1353 1375/1/1349 +f 1380/1/1354 1379/1/1350 1377/1/1352 +f 1376/1/1351 1381/1/1355 1378/1/1353 +f 1376/1/1351 1379/1/1350 1289/1/1264 +f 1379/1/1350 1294/1/1265 1289/1/1264 +f 1252/1/1226 1253/1/1228 1339/1/1312 +f 1332/1/1306 1252/1/1226 1339/1/1312 +f 1285/1/1260 1375/1/1349 1286/1/1261 +f 1375/1/1349 1288/1/1263 1286/1/1261 +f 1344/1/1317 1327/1/1302 1343/1/1318 +f 1327/1/1302 1326/1/1301 1343/1/1318 +f 1346/1/1320 1327/1/1302 1344/1/1317 +f 1326/1/1301 1325/1/1300 1343/1/1318 +f 1325/1/1300 1348/1/1322 1343/1/1318 +f 1323/1/1297 1327/1/1302 1346/1/1320 +f 1349/1/1323 1323/1/1297 1346/1/1320 +f 1325/1/1300 1324/1/1299 1348/1/1322 +f 1324/1/1299 1350/1/1324 1348/1/1322 +f 1320/1/1295 1323/1/1297 1349/1/1323 +f 1352/1/1326 1320/1/1295 1349/1/1323 +f 1324/1/1299 1353/1/1327 1350/1/1324 +f 1295/1/1270 1320/1/1295 1352/1/1326 +f 1324/1/1299 1301/1/1275 1353/1/1327 +f 1301/1/1275 1312/1/1282 1353/1/1327 +f 1312/1/1282 1364/1/1338 1353/1/1327 +f 1312/1/1282 1307/1/1286 1364/1/1338 +f 1307/1/1286 1365/1/1339 1364/1/1338 +f 1307/1/1286 1310/1/1285 1365/1/1339 +f 1310/1/1285 1366/1/1340 1365/1/1339 +f 1310/1/1285 1309/1/1284 1366/1/1340 +f 1309/1/1284 1367/1/1341 1366/1/1340 +f 1309/1/1284 1308/1/1283 1367/1/1341 +f 1308/1/1283 1368/1/1342 1367/1/1341 +f 1308/1/1283 1311/1/1287 1368/1/1342 +f 1311/1/1287 1374/1/1348 1368/1/1342 +f 1311/1/1287 1306/1/1281 1374/1/1348 +f 1306/1/1281 1363/1/1337 1374/1/1348 +f 1306/1/1281 1305/1/1280 1363/1/1337 +f 1305/1/1280 1362/1/1336 1363/1/1337 +f 1305/1/1280 1304/1/1279 1362/1/1336 +f 1304/1/1279 1361/1/1335 1362/1/1336 +f 1304/1/1279 1296/1/1271 1361/1/1335 +f 1296/1/1271 1357/1/1331 1361/1/1335 +f 1357/1/1331 1258/1/1233 1259/1/1235 +f 1296/1/1271 1258/1/1233 1357/1/1331 +f 1254/1/1227 1295/1/1270 1253/1/1228 +f 1295/1/1270 1352/1/1326 1253/1/1228 +f 1322/1/1298 1345/1/1319 1342/1/1316 +f 1347/1/1321 1321/1/1296 1342/1/1316 +f 1321/1/1296 1322/1/1298 1342/1/1316 +f 1322/1/1298 1319/1/1294 1345/1/1319 +f 1319/1/1294 1351/1/1325 1345/1/1319 +f 1318/1/1293 1321/1/1296 1347/1/1321 +f 1356/1/1328 1318/1/1293 1347/1/1321 +f 1319/1/1294 1317/1/1292 1351/1/1325 +f 1317/1/1292 1358/1/1332 1351/1/1325 +f 1316/1/1291 1318/1/1293 1356/1/1328 +f 1354/1/1330 1316/1/1291 1356/1/1328 +f 1317/1/1292 1315/1/1290 1358/1/1332 +f 1315/1/1290 1360/1/1333 1358/1/1332 +f 1355/1/1329 1313/1/1288 1354/1/1330 +f 1313/1/1288 1316/1/1291 1354/1/1330 +f 1315/1/1290 1314/1/1289 1360/1/1333 +f 1314/1/1289 1359/1/1334 1360/1/1333 +f 1314/1/1289 1298/1/1274 1359/1/1334 +f 1302/1/1276 1313/1/1288 1355/1/1329 +f 1298/1/1274 1369/1/1343 1359/1/1334 +f 1370/1/1344 1302/1/1276 1355/1/1329 +f 1297/1/1272 1302/1/1276 1370/1/1344 +f 1298/1/1274 1303/1/1278 1369/1/1343 +f 1303/1/1278 1371/1/1345 1369/1/1343 +f 1372/1/1346 1297/1/1272 1370/1/1344 +f 1299/1/1273 1297/1/1272 1372/1/1346 +f 1303/1/1278 1300/1/1277 1371/1/1345 +f 1373/1/1347 1299/1/1273 1372/1/1346 +f 1300/1/1277 1373/1/1347 1371/1/1345 +f 1300/1/1277 1299/1/1273 1373/1/1347 +f 1269/1/1244 1382/1/1356 1270/1/1245 +f 1382/1/1356 1383/1/1357 1270/1/1245 +f 1384/1/1358 1274/1/1251 1276/1/1253 +f 1385/1/1359 1274/1/1251 1384/1/1358 +f 1384/1/1358 1276/1/1253 1270/1/1245 +f 1383/1/1357 1384/1/1358 1270/1/1245 +f 1274/1/1251 1382/1/1356 1269/1/1244 +f 1274/1/1251 1385/1/1359 1382/1/1356 +f 1386/1/1360 1385/1/1359 1384/1/1358 +f 1386/1/1360 1387/1/1361 1385/1/1359 +f 1382/1/1356 1388/1/1362 1383/1/1357 +f 1388/1/1362 1389/1/1363 1383/1/1357 +f 1386/1/1360 1384/1/1358 1383/1/1357 +f 1389/1/1363 1386/1/1360 1383/1/1357 +f 1390/1/1364 1386/1/1360 1389/1/1363 +f 1391/1/1365 1390/1/1364 1389/1/1363 +f 1392/1/1366 1391/1/1365 1389/1/1363 +f 1393/1/1367 1386/1/1360 1390/1/1364 +f 1394/1/1368 1386/1/1360 1393/1/1367 +f 1395/1/1369 1386/1/1360 1394/1/1368 +f 1396/1/1370 1388/1/1362 1382/1/1356 +f 1385/1/1359 1396/1/1370 1382/1/1356 +f 1396/1/1370 1397/1/1371 1388/1/1362 +f 1397/1/1371 1398/1/1372 1388/1/1362 +f 1385/1/1359 1387/1/1361 1396/1/1370 +f 1387/1/1361 1399/1/1373 1396/1/1370 +f 1387/1/1361 1400/1/1374 1399/1/1373 +f 1400/1/1374 1401/1/1375 1399/1/1373 +f 1399/1/1373 1393/1/1367 1390/1/1364 +f 1396/1/1370 1399/1/1373 1390/1/1364 +f 1388/1/1362 1392/1/1366 1389/1/1363 +f 1388/1/1362 1398/1/1372 1392/1/1366 +f 1398/1/1372 1391/1/1365 1392/1/1366 +f 1398/1/1372 1397/1/1371 1391/1/1365 +f 1397/1/1371 1390/1/1364 1391/1/1365 +f 1397/1/1371 1396/1/1370 1390/1/1364 +f 1399/1/1373 1401/1/1375 1393/1/1367 +f 1401/1/1375 1394/1/1368 1393/1/1367 +f 1401/1/1375 1400/1/1374 1394/1/1368 +f 1400/1/1374 1395/1/1369 1394/1/1368 +f 1400/1/1374 1387/1/1361 1395/1/1369 +f 1387/1/1361 1386/1/1360 1395/1/1369 +f 1290/1/1266 1284/1/1259 1283/1/1258 +f 1377/1/1352 1284/1/1259 1290/1/1266 +f 1293/1/1269 1377/1/1352 1290/1/1266 +f 1380/1/1354 1377/1/1352 1293/1/1269 +f 1294/1/1265 1380/1/1354 1293/1/1269 +f 1379/1/1350 1380/1/1354 1294/1/1265 +f 1335/1/1309 1340/1/1314 1337/1/1311 +f 1330/1/1303 1335/1/1309 1337/1/1311 +f 1333/1/1307 1338/1/1313 1340/1/1314 +f 1335/1/1309 1333/1/1307 1340/1/1314 +f 1332/1/1306 1339/1/1312 1338/1/1313 +f 1333/1/1307 1332/1/1306 1338/1/1313 +f 1334/1/1308 1329/1/1304 1336/1/1310 +f 1341/1/1315 1334/1/1308 1336/1/1310 +f 1257/1/1231 1331/1/1305 1341/1/1315 +f 1331/1/1305 1334/1/1308 1341/1/1315 +f 1328/1/1230 1331/1/1305 1257/1/1231 +f 1375/1/1349 1291/1/1267 1288/1/1263 +f 1375/1/1349 1378/1/1353 1291/1/1267 +f 1378/1/1353 1381/1/1355 1291/1/1267 +f 1381/1/1355 1292/1/1268 1291/1/1267 +f 1381/1/1355 1376/1/1351 1292/1/1268 +f 1376/1/1351 1289/1/1264 1292/1/1268 +f 1403/1/1376 1408/1/1377 1402/1/1378 +f 1404/1/1379 1406/1/1380 1405/1/1381 +f 1407/1/1382 1408/1/1377 1403/1/1376 +f 1409/1/1383 1406/1/1380 1404/1/1379 +f 1410/1/1384 1408/1/1377 1407/1/1382 +f 1411/1/1385 1412/1/1386 1408/1/1377 +f 1413/1/1387 1411/1/1385 1408/1/1377 +f 1410/1/1384 1413/1/1387 1408/1/1377 +f 1414/1/1388 1415/1/1389 1404/1/1379 +f 1416/1/1390 1414/1/1388 1404/1/1379 +f 1417/1/1391 1416/1/1390 1404/1/1379 +f 1415/1/1389 1409/1/1383 1404/1/1379 +f 1411/1/1385 1418/1/1392 1412/1/1386 +f 1419/1/1393 1416/1/1390 1417/1/1391 +f 1411/1/1385 1420/1/1394 1418/1/1392 +f 1421/1/1395 1422/1/1396 1419/1/1393 +f 1422/1/1396 1423/1/1397 1419/1/1393 +f 1423/1/1397 1424/1/1398 1419/1/1393 +f 1424/1/1398 1416/1/1390 1419/1/1393 +f 1425/1/1399 1421/1/1395 1419/1/1393 +f 1426/1/1400 1411/1/1385 1413/1/1387 +f 1427/1/1401 1425/1/1399 1419/1/1393 +f 1420/1/1394 1428/1/1402 1418/1/1392 +f 1428/1/1402 1710/1/1403 1418/1/1392 +f 1430/1/1404 1431/1/1405 1429/1/1406 +f 1431/1/1405 1426/1/1400 1429/1/1406 +f 1431/1/1405 1411/1/1385 1426/1/1400 +f 1710/1/1403 1432/1/1407 1418/1/1392 +f 1710/1/1403 1709/1/1408 1432/1/1407 +f 1709/1/1408 1433/1/1409 1432/1/1407 +f 1433/1/1409 1434/1/1410 1432/1/1407 +f 1435/1/1411 1419/1/1393 1434/1/1410 +f 1433/1/1409 1435/1/1411 1434/1/1410 +f 1435/1/1411 1427/1/1401 1419/1/1393 +f 1416/1/1390 1436/1/1412 1414/1/1388 +f 1436/1/1412 1437/1/1413 1414/1/1388 +f 1436/1/1412 1438/1/1414 1437/1/1413 +f 1439/1/1415 1710/1/1403 1428/1/1402 +f 1440/1/1416 1416/1/1390 1424/1/1398 +f 1411/1/1385 1441/1/1417 1420/1/1394 +f 1442/1/1418 1710/1/1403 1439/1/1415 +f 1443/1/1419 1440/1/1416 1424/1/1398 +f 1702/1/1420 1427/1/1401 1435/1/1411 +f 1444/1/1421 1445/1/1422 1441/1/1417 +f 1411/1/1385 1444/1/1421 1441/1/1417 +f 1446/1/1423 1710/1/1403 1442/1/1418 +f 1447/1/1424 1440/1/1416 1443/1/1419 +f 1448/1/1425 1427/1/1401 1702/1/1420 +f 1449/1/1426 1450/1/1427 1448/1/1425 +f 1451/1/1428 1449/1/1426 1448/1/1425 +f 1450/1/1427 1427/1/1401 1448/1/1425 +f 1444/1/1421 1452/1/1429 1445/1/1422 +f 1453/1/1430 1710/1/1403 1446/1/1423 +f 1454/1/1431 1440/1/1416 1447/1/1424 +f 1453/1/1430 1681/1/1432 1710/1/1403 +f 1684/1/1433 1451/1/1428 1448/1/1425 +f 1455/1/1434 1452/1/1429 1444/1/1421 +f 1454/1/1431 1456/1/1435 1440/1/1416 +f 1456/1/1435 1457/1/1436 1440/1/1416 +f 1458/1/1437 1681/1/1432 1453/1/1430 +f 1459/1/1438 1455/1/1434 1444/1/1421 +f 1456/1/1435 1460/1/1439 1457/1/1436 +f 1460/1/1439 1461/1/1440 1457/1/1436 +f 1462/1/1441 1459/1/1438 1444/1/1421 +f 1463/1/1442 1464/1/1443 1457/1/1436 +f 1464/1/1443 1465/1/1444 1457/1/1436 +f 1461/1/1440 1467/1/1445 1457/1/1436 +f 1467/1/1445 1466/1/1446 1457/1/1436 +f 1466/1/1446 1468/1/1447 1457/1/1436 +f 1468/1/1447 1463/1/1442 1457/1/1436 +f 1469/1/1448 1470/1/1449 1681/1/1432 +f 1458/1/1437 1471/1/1450 1681/1/1432 +f 1471/1/1450 1472/1/1451 1681/1/1432 +f 1472/1/1451 1469/1/1448 1681/1/1432 +f 1470/1/1449 1473/1/1452 1681/1/1432 +f 1473/1/1452 1474/1/1453 1681/1/1432 +f 1474/1/1453 1707/1/1454 1681/1/1432 +f 1467/1/1445 1451/1/1428 1684/1/1433 +f 1693/1/1455 1467/1/1445 1684/1/1433 +f 1475/1/1456 1459/1/1438 1462/1/1441 +f 1701/1/1457 1467/1/1445 1693/1/1455 +f 1474/1/1453 1708/1/1458 1707/1/1454 +f 1476/1/1459 1467/1/1445 1701/1/1457 +f 1474/1/1453 1476/1/1459 1708/1/1458 +f 1476/1/1459 1701/1/1457 1708/1/1458 +f 1464/1/1443 1477/1/1460 1465/1/1444 +f 1479/1/1461 1469/1/1448 1459/1/1438 +f 1469/1/1448 1478/1/1462 1459/1/1438 +f 1475/1/1456 1479/1/1461 1459/1/1438 +f 1478/1/1462 1469/1/1448 1472/1/1451 +f 1451/1/1428 1467/1/1445 1461/1/1440 +f 1481/1/1463 1475/1/1456 1462/1/1441 +f 1480/1/1464 1481/1/1463 1462/1/1441 +f 1481/1/1463 1479/1/1461 1475/1/1456 +f 1481/1/1463 1482/1/1465 1479/1/1461 +f 1483/1/1466 1469/1/1448 1479/1/1461 +f 1482/1/1465 1483/1/1466 1479/1/1461 +f 1484/1/1467 1470/1/1449 1469/1/1448 +f 1483/1/1466 1484/1/1467 1469/1/1448 +f 1484/1/1467 1485/1/1468 1470/1/1449 +f 1485/1/1468 1473/1/1452 1470/1/1449 +f 1486/1/1469 1474/1/1453 1473/1/1452 +f 1485/1/1468 1486/1/1469 1473/1/1452 +f 1487/1/1470 1431/1/1405 1430/1/1404 +f 1488/1/1471 1487/1/1470 1430/1/1404 +f 1489/1/1472 1411/1/1385 1431/1/1405 +f 1487/1/1470 1489/1/1472 1431/1/1405 +f 1491/1/1473 1596/1/1474 1600/1/1475 +f 1491/1/1473 1490/1/1476 1596/1/1474 +f 1494/1/1477 1493/1/1478 1492/1/1479 +f 1495/1/1480 1493/1/1478 1494/1/1477 +f 1496/1/1481 1495/1/1480 1494/1/1477 +f 1497/1/1482 1495/1/1480 1496/1/1481 +f 1492/1/1479 1493/1/1478 1490/1/1476 +f 1491/1/1473 1492/1/1479 1490/1/1476 +f 1499/1/1483 1476/1/1459 1498/1/1484 +f 1499/1/1483 1500/1/1485 1476/1/1459 +f 1499/1/1483 1501/1/1486 1500/1/1485 +f 1501/1/1486 1502/1/1487 1500/1/1485 +f 1501/1/1486 1503/1/1488 1502/1/1487 +f 1504/1/1489 1432/1/1407 1505/1/1490 +f 1506/1/1491 1504/1/1489 1507/1/1492 +f 1508/1/1493 1506/1/1491 1507/1/1492 +f 1504/1/1489 1509/1/1494 1507/1/1492 +f 1509/1/1494 1510/1/1495 1507/1/1492 +f 1511/1/1496 1506/1/1491 1508/1/1493 +f 1512/1/1497 1511/1/1496 1508/1/1493 +f 1513/1/1498 1517/1/1499 1514/1/1500 +f 1515/1/1501 1518/1/1502 1516/1/1503 +f 1515/1/1501 1519/1/1504 1518/1/1502 +f 1513/1/1498 1520/1/1505 1517/1/1499 +f 1513/1/1498 1524/1/1506 1520/1/1505 +f 1522/1/1507 1521/1/1508 1513/1/1498 +f 1521/1/1508 1523/1/1509 1513/1/1498 +f 1523/1/1509 1524/1/1506 1513/1/1498 +f 1525/1/1510 1526/1/1511 1519/1/1504 +f 1526/1/1511 1527/1/1512 1519/1/1504 +f 1527/1/1512 1528/1/1513 1519/1/1504 +f 1515/1/1501 1525/1/1510 1519/1/1504 +f 1527/1/1512 1529/1/1514 1528/1/1513 +f 1530/1/1515 1521/1/1508 1522/1/1507 +f 1529/1/1514 1531/1/1516 1528/1/1513 +f 1532/1/1517 1521/1/1508 1530/1/1515 +f 1533/1/1518 1534/1/1519 1530/1/1515 +f 1534/1/1519 1535/1/1520 1530/1/1515 +f 1535/1/1520 1532/1/1517 1530/1/1515 +f 1529/1/1514 1536/1/1521 1531/1/1516 +f 1537/1/1522 1533/1/1518 1530/1/1515 +f 1540/1/1523 1537/1/1522 1530/1/1515 +f 1536/1/1521 1538/1/1524 1531/1/1516 +f 1539/1/1525 1540/1/1523 1530/1/1515 +f 1541/1/1526 1540/1/1523 1539/1/1525 +f 1544/1/1527 1541/1/1526 1539/1/1525 +f 1536/1/1521 1542/1/1528 1538/1/1524 +f 1523/1/1509 1487/1/1470 1543/1/1529 +f 1487/1/1470 1488/1/1471 1543/1/1529 +f 1489/1/1472 1487/1/1470 1523/1/1509 +f 1521/1/1508 1489/1/1472 1523/1/1509 +f 1504/1/1489 1544/1/1527 1539/1/1525 +f 1506/1/1491 1544/1/1527 1504/1/1489 +f 1538/1/1524 1542/1/1528 1506/1/1491 +f 1545/1/1530 1544/1/1527 1506/1/1491 +f 1542/1/1528 1545/1/1530 1506/1/1491 +f 1547/1/1531 1546/1/1532 1526/1/1511 +f 1546/1/1532 1527/1/1512 1526/1/1511 +f 1548/1/1533 1546/1/1532 1547/1/1531 +f 1549/1/1534 1545/1/1530 1542/1/1528 +f 1550/1/1535 1545/1/1530 1549/1/1534 +f 1529/1/1514 1551/1/1536 1536/1/1521 +f 1552/1/1537 1521/1/1508 1532/1/1517 +f 1553/1/1538 1540/1/1523 1541/1/1526 +f 1554/1/1539 1667/1/1540 1550/1/1535 +f 1667/1/1540 1666/1/1541 1550/1/1535 +f 1666/1/1541 1545/1/1530 1550/1/1535 +f 1529/1/1514 1555/1/1542 1551/1/1536 +f 1556/1/1543 1521/1/1508 1552/1/1537 +f 1557/1/1544 1667/1/1540 1554/1/1539 +f 1564/1/1545 1540/1/1523 1553/1/1538 +f 1558/1/1546 1521/1/1508 1556/1/1543 +f 1559/1/1547 1555/1/1542 1529/1/1514 +f 1556/1/1543 1560/1/1548 1558/1/1546 +f 1561/1/1549 1562/1/1550 1559/1/1547 +f 1562/1/1550 1563/1/1551 1559/1/1547 +f 1563/1/1551 1555/1/1542 1559/1/1547 +f 1564/1/1545 1674/1/1552 1540/1/1523 +f 1560/1/1548 1565/1/1553 1558/1/1546 +f 1565/1/1553 1480/1/1464 1558/1/1546 +f 1566/1/1554 1567/1/1555 1540/1/1523 +f 1674/1/1552 1566/1/1554 1540/1/1523 +f 1568/1/1556 1667/1/1540 1557/1/1544 +f 1565/1/1553 1569/1/1557 1480/1/1464 +f 1485/1/1468 1484/1/1467 1480/1/1464 +f 1486/1/1469 1485/1/1468 1480/1/1464 +f 1484/1/1467 1483/1/1466 1480/1/1464 +f 1482/1/1465 1481/1/1463 1480/1/1464 +f 1483/1/1466 1482/1/1465 1480/1/1464 +f 1569/1/1557 1498/1/1484 1480/1/1464 +f 1498/1/1484 1486/1/1469 1480/1/1464 +f 1570/1/1558 1571/1/1559 1559/1/1547 +f 1572/1/1560 1573/1/1561 1559/1/1547 +f 1573/1/1561 1570/1/1558 1559/1/1547 +f 1571/1/1559 1575/1/1562 1559/1/1547 +f 1575/1/1562 1574/1/1563 1559/1/1547 +f 1574/1/1563 1566/1/1554 1559/1/1547 +f 1566/1/1554 1561/1/1549 1559/1/1547 +f 1566/1/1554 1576/1/1564 1567/1/1555 +f 1566/1/1554 1667/1/1540 1568/1/1556 +f 1577/1/1565 1573/1/1561 1572/1/1560 +f 1566/1/1554 1498/1/1484 1576/1/1564 +f 1578/1/1566 1566/1/1554 1568/1/1556 +f 1498/1/1484 1579/1/1567 1576/1/1564 +f 1580/1/1568 1566/1/1554 1578/1/1566 +f 1667/1/1540 1566/1/1554 1674/1/1552 +f 1498/1/1484 1581/1/1569 1579/1/1567 +f 1581/1/1569 1498/1/1484 1569/1/1557 +f 1582/1/1570 1566/1/1554 1580/1/1568 +f 1566/1/1554 1582/1/1570 1561/1/1549 +f 1566/1/1554 1499/1/1483 1498/1/1484 +f 1566/1/1554 1583/1/1571 1499/1/1483 +f 1583/1/1571 1501/1/1486 1499/1/1483 +f 1583/1/1571 1584/1/1572 1501/1/1486 +f 1584/1/1572 1585/1/1573 1501/1/1486 +f 1585/1/1573 1503/1/1488 1501/1/1486 +f 1585/1/1573 1586/1/1574 1497/1/1482 +f 1503/1/1488 1585/1/1573 1497/1/1482 +f 1493/1/1478 1588/1/1575 1587/1/1576 +f 1495/1/1480 1588/1/1575 1493/1/1478 +f 1495/1/1480 1589/1/1577 1588/1/1575 +f 1497/1/1482 1589/1/1577 1495/1/1480 +f 1497/1/1482 1586/1/1574 1589/1/1577 +f 1587/1/1576 1590/1/1578 1490/1/1476 +f 1493/1/1478 1587/1/1576 1490/1/1476 +f 1490/1/1476 1591/1/1579 1592/1/1580 +f 1596/1/1474 1490/1/1476 1592/1/1580 +f 1590/1/1578 1593/1/1581 1591/1/1579 +f 1490/1/1476 1590/1/1578 1591/1/1579 +f 1593/1/1581 1594/1/1582 1591/1/1579 +f 1595/1/1583 1596/1/1474 1592/1/1580 +f 1591/1/1579 1597/1/1584 1598/1/1585 +f 1592/1/1580 1591/1/1579 1598/1/1585 +f 1491/1/1473 1600/1/1475 1598/1/1585 +f 1599/1/1586 1491/1/1473 1598/1/1585 +f 1597/1/1584 1599/1/1586 1598/1/1585 +f 1603/1/1587 1599/1/1586 1597/1/1584 +f 1600/1/1475 1601/1/1588 1598/1/1585 +f 1602/1/1589 1603/1/1587 1597/1/1584 +f 1599/1/1586 1492/1/1479 1491/1/1473 +f 1604/1/1590 1492/1/1479 1599/1/1586 +f 1604/1/1590 1494/1/1477 1492/1/1479 +f 1605/1/1591 1494/1/1477 1604/1/1590 +f 1605/1/1591 1496/1/1481 1494/1/1477 +f 1606/1/1592 1496/1/1481 1605/1/1591 +f 1606/1/1592 1607/1/1593 1502/1/1487 +f 1496/1/1481 1606/1/1592 1502/1/1487 +f 1500/1/1485 1467/1/1445 1476/1/1459 +f 1608/1/1594 1467/1/1445 1500/1/1485 +f 1502/1/1487 1608/1/1594 1500/1/1485 +f 1607/1/1593 1608/1/1594 1502/1/1487 +f 1505/1/1490 1434/1/1410 1609/1/1595 +f 1432/1/1407 1434/1/1410 1505/1/1490 +f 1613/1/1596 1505/1/1490 1610/1/1597 +f 1505/1/1490 1611/1/1598 1610/1/1597 +f 1612/1/1599 1613/1/1596 1610/1/1597 +f 1505/1/1490 1609/1/1595 1611/1/1598 +f 1609/1/1595 1615/1/1600 1611/1/1598 +f 1615/1/1600 1614/1/1601 1611/1/1598 +f 1611/1/1598 1507/1/1492 1610/1/1597 +f 1508/1/1493 1507/1/1492 1611/1/1598 +f 1509/1/1494 1504/1/1489 1613/1/1596 +f 1504/1/1489 1505/1/1490 1613/1/1596 +f 1486/1/1469 1498/1/1484 1474/1/1453 +f 1498/1/1484 1476/1/1459 1474/1/1453 +f 1426/1/1400 1543/1/1529 1429/1/1406 +f 1523/1/1509 1543/1/1529 1426/1/1400 +f 1514/1/1500 1403/1/1376 1402/1/1378 +f 1514/1/1500 1517/1/1499 1403/1/1376 +f 1517/1/1499 1407/1/1382 1403/1/1376 +f 1402/1/1378 1513/1/1498 1514/1/1500 +f 1408/1/1377 1513/1/1498 1402/1/1378 +f 1517/1/1499 1520/1/1505 1407/1/1382 +f 1520/1/1505 1410/1/1384 1407/1/1382 +f 1520/1/1505 1524/1/1506 1410/1/1384 +f 1412/1/1386 1513/1/1498 1408/1/1377 +f 1412/1/1386 1522/1/1507 1513/1/1498 +f 1524/1/1506 1413/1/1387 1410/1/1384 +f 1524/1/1506 1523/1/1509 1413/1/1387 +f 1418/1/1392 1522/1/1507 1412/1/1386 +f 1418/1/1392 1530/1/1515 1522/1/1507 +f 1432/1/1407 1539/1/1525 1418/1/1392 +f 1504/1/1489 1539/1/1525 1432/1/1407 +f 1532/1/1517 1535/1/1520 1428/1/1402 +f 1420/1/1394 1532/1/1517 1428/1/1402 +f 1535/1/1520 1439/1/1415 1428/1/1402 +f 1534/1/1519 1439/1/1415 1535/1/1520 +f 1533/1/1518 1439/1/1415 1534/1/1519 +f 1441/1/1417 1532/1/1517 1420/1/1394 +f 1533/1/1518 1442/1/1418 1439/1/1415 +f 1552/1/1537 1532/1/1517 1441/1/1417 +f 1445/1/1422 1552/1/1537 1441/1/1417 +f 1533/1/1518 1446/1/1423 1442/1/1418 +f 1537/1/1522 1446/1/1423 1533/1/1518 +f 1556/1/1543 1552/1/1537 1445/1/1422 +f 1452/1/1429 1556/1/1543 1445/1/1422 +f 1537/1/1522 1453/1/1430 1446/1/1423 +f 1540/1/1523 1453/1/1430 1537/1/1522 +f 1560/1/1548 1556/1/1543 1452/1/1429 +f 1455/1/1434 1560/1/1548 1452/1/1429 +f 1540/1/1523 1458/1/1437 1453/1/1430 +f 1567/1/1555 1458/1/1437 1540/1/1523 +f 1576/1/1564 1458/1/1437 1567/1/1555 +f 1565/1/1553 1560/1/1548 1455/1/1434 +f 1576/1/1564 1471/1/1450 1458/1/1437 +f 1459/1/1438 1565/1/1553 1455/1/1434 +f 1569/1/1557 1565/1/1553 1459/1/1438 +f 1579/1/1567 1471/1/1450 1576/1/1564 +f 1579/1/1567 1472/1/1451 1471/1/1450 +f 1581/1/1569 1472/1/1451 1579/1/1567 +f 1581/1/1569 1569/1/1557 1459/1/1438 +f 1478/1/1462 1581/1/1569 1459/1/1438 +f 1581/1/1569 1478/1/1462 1472/1/1451 +f 1616/1/1602 1497/1/1482 1496/1/1481 +f 1503/1/1488 1617/1/1603 1502/1/1487 +f 1502/1/1487 1617/1/1603 1496/1/1481 +f 1617/1/1603 1616/1/1602 1496/1/1481 +f 1618/1/1604 1497/1/1482 1616/1/1602 +f 1618/1/1604 1619/1/1605 1497/1/1482 +f 1620/1/1606 1621/1/1607 1617/1/1603 +f 1503/1/1488 1620/1/1606 1617/1/1603 +f 1617/1/1603 1622/1/1608 1616/1/1602 +f 1622/1/1608 1623/1/1609 1616/1/1602 +f 1623/1/1609 1618/1/1604 1616/1/1602 +f 1621/1/1607 1622/1/1608 1617/1/1603 +f 1623/1/1609 1624/1/1610 1618/1/1604 +f 1625/1/1611 1622/1/1608 1621/1/1607 +f 1627/1/1612 1503/1/1488 1497/1/1482 +f 1619/1/1605 1627/1/1612 1497/1/1482 +f 1626/1/1613 1620/1/1606 1503/1/1488 +f 1627/1/1612 1626/1/1613 1503/1/1488 +f 1626/1/1613 1628/1/1614 1620/1/1606 +f 1622/1/1608 1627/1/1612 1623/1/1609 +f 1626/1/1613 1627/1/1612 1622/1/1608 +f 1539/1/1525 1530/1/1515 1418/1/1392 +f 1523/1/1509 1426/1/1400 1413/1/1387 +f 1488/1/1471 1430/1/1404 1429/1/1406 +f 1543/1/1529 1488/1/1471 1429/1/1406 +f 1507/1/1492 1510/1/1495 1610/1/1597 +f 1510/1/1495 1612/1/1599 1610/1/1597 +f 1510/1/1495 1509/1/1494 1612/1/1599 +f 1509/1/1494 1613/1/1596 1612/1/1599 +f 1601/1/1588 1592/1/1580 1598/1/1585 +f 1595/1/1583 1592/1/1580 1601/1/1588 +f 1600/1/1475 1596/1/1474 1601/1/1588 +f 1596/1/1474 1595/1/1583 1601/1/1588 +f 1620/1/1606 1625/1/1611 1621/1/1607 +f 1620/1/1606 1628/1/1614 1625/1/1611 +f 1628/1/1614 1626/1/1613 1625/1/1611 +f 1626/1/1613 1622/1/1608 1625/1/1611 +f 1624/1/1610 1619/1/1605 1618/1/1604 +f 1627/1/1612 1619/1/1605 1624/1/1610 +f 1623/1/1609 1627/1/1612 1624/1/1610 +f 1521/1/1508 1411/1/1385 1489/1/1472 +f 1521/1/1508 1444/1/1421 1411/1/1385 +f 1558/1/1546 1444/1/1421 1521/1/1508 +f 1480/1/1464 1444/1/1421 1558/1/1546 +f 1480/1/1464 1462/1/1441 1444/1/1421 +f 1465/1/1444 1572/1/1560 1457/1/1436 +f 1465/1/1444 1577/1/1565 1572/1/1560 +f 1477/1/1460 1577/1/1565 1465/1/1444 +f 1477/1/1460 1573/1/1561 1577/1/1565 +f 1464/1/1443 1573/1/1561 1477/1/1460 +f 1464/1/1443 1570/1/1558 1573/1/1561 +f 1463/1/1442 1570/1/1558 1464/1/1443 +f 1463/1/1442 1571/1/1559 1570/1/1558 +f 1468/1/1447 1571/1/1559 1463/1/1442 +f 1468/1/1447 1575/1/1562 1571/1/1559 +f 1466/1/1446 1575/1/1562 1468/1/1447 +f 1466/1/1446 1574/1/1563 1575/1/1562 +f 1436/1/1412 1548/1/1533 1438/1/1414 +f 1436/1/1412 1546/1/1532 1548/1/1533 +f 1416/1/1390 1546/1/1532 1436/1/1412 +f 1416/1/1390 1527/1/1512 1546/1/1532 +f 1590/1/1578 1599/1/1586 1603/1/1587 +f 1593/1/1581 1590/1/1578 1603/1/1587 +f 1588/1/1575 1604/1/1590 1587/1/1576 +f 1588/1/1575 1605/1/1591 1604/1/1590 +f 1588/1/1575 1589/1/1577 1605/1/1591 +f 1589/1/1577 1606/1/1592 1605/1/1591 +f 1589/1/1577 1586/1/1574 1606/1/1592 +f 1587/1/1576 1599/1/1586 1590/1/1578 +f 1587/1/1576 1604/1/1590 1599/1/1586 +f 1583/1/1571 1566/1/1554 1467/1/1445 +f 1608/1/1594 1584/1/1572 1467/1/1445 +f 1584/1/1572 1583/1/1571 1467/1/1445 +f 1585/1/1573 1584/1/1572 1608/1/1594 +f 1607/1/1593 1585/1/1573 1608/1/1594 +f 1434/1/1410 1506/1/1491 1609/1/1595 +f 1609/1/1595 1511/1/1496 1615/1/1600 +f 1609/1/1595 1506/1/1491 1511/1/1496 +f 1566/1/1554 1574/1/1563 1467/1/1445 +f 1574/1/1563 1466/1/1446 1467/1/1445 +f 1437/1/1413 1526/1/1511 1414/1/1388 +f 1547/1/1531 1526/1/1511 1437/1/1413 +f 1516/1/1503 1518/1/1502 1405/1/1381 +f 1406/1/1380 1516/1/1503 1405/1/1381 +f 1518/1/1502 1404/1/1379 1405/1/1381 +f 1406/1/1380 1515/1/1501 1516/1/1503 +f 1518/1/1502 1519/1/1504 1404/1/1379 +f 1409/1/1383 1515/1/1501 1406/1/1380 +f 1528/1/1513 1417/1/1391 1404/1/1379 +f 1519/1/1504 1528/1/1513 1404/1/1379 +f 1415/1/1389 1515/1/1501 1409/1/1383 +f 1415/1/1389 1525/1/1510 1515/1/1501 +f 1531/1/1516 1419/1/1393 1417/1/1391 +f 1528/1/1513 1531/1/1516 1417/1/1391 +f 1414/1/1388 1525/1/1510 1415/1/1389 +f 1414/1/1388 1526/1/1511 1525/1/1510 +f 1419/1/1393 1506/1/1491 1434/1/1410 +f 1538/1/1524 1506/1/1491 1419/1/1393 +f 1549/1/1534 1542/1/1528 1423/1/1397 +f 1422/1/1396 1549/1/1534 1423/1/1397 +f 1542/1/1528 1424/1/1398 1423/1/1397 +f 1536/1/1521 1424/1/1398 1542/1/1528 +f 1550/1/1535 1549/1/1534 1422/1/1396 +f 1421/1/1395 1550/1/1535 1422/1/1396 +f 1536/1/1521 1443/1/1419 1424/1/1398 +f 1551/1/1536 1443/1/1419 1536/1/1521 +f 1554/1/1539 1550/1/1535 1421/1/1395 +f 1551/1/1536 1447/1/1424 1443/1/1419 +f 1425/1/1399 1554/1/1539 1421/1/1395 +f 1555/1/1542 1447/1/1424 1551/1/1536 +f 1557/1/1544 1554/1/1539 1425/1/1399 +f 1427/1/1401 1557/1/1544 1425/1/1399 +f 1555/1/1542 1454/1/1431 1447/1/1424 +f 1563/1/1551 1454/1/1431 1555/1/1542 +f 1568/1/1556 1557/1/1544 1427/1/1401 +f 1450/1/1427 1568/1/1556 1427/1/1401 +f 1563/1/1551 1456/1/1435 1454/1/1431 +f 1562/1/1550 1456/1/1435 1563/1/1551 +f 1578/1/1566 1568/1/1556 1450/1/1427 +f 1562/1/1550 1460/1/1439 1456/1/1435 +f 1449/1/1426 1578/1/1566 1450/1/1427 +f 1580/1/1568 1578/1/1566 1449/1/1426 +f 1562/1/1550 1461/1/1440 1460/1/1439 +f 1561/1/1549 1461/1/1440 1562/1/1550 +f 1451/1/1428 1580/1/1568 1449/1/1426 +f 1582/1/1570 1580/1/1568 1451/1/1428 +f 1561/1/1549 1451/1/1428 1461/1/1440 +f 1582/1/1570 1451/1/1428 1561/1/1549 +f 1586/1/1574 1629/1/1615 1606/1/1592 +f 1630/1/1616 1585/1/1573 1607/1/1593 +f 1629/1/1615 1607/1/1593 1606/1/1592 +f 1629/1/1615 1630/1/1616 1607/1/1593 +f 1586/1/1574 1631/1/1617 1629/1/1615 +f 1631/1/1617 1632/1/1618 1629/1/1615 +f 1633/1/1619 1585/1/1573 1630/1/1616 +f 1633/1/1619 1634/1/1620 1585/1/1573 +f 1637/1/1621 1630/1/1616 1629/1/1615 +f 1632/1/1618 1637/1/1621 1629/1/1615 +f 1637/1/1621 1635/1/1622 1630/1/1616 +f 1635/1/1622 1633/1/1619 1630/1/1616 +f 1636/1/1623 1637/1/1621 1632/1/1618 +f 1635/1/1622 1638/1/1624 1633/1/1619 +f 1585/1/1573 1641/1/1625 1586/1/1574 +f 1641/1/1625 1639/1/1626 1586/1/1574 +f 1639/1/1626 1631/1/1617 1586/1/1574 +f 1634/1/1620 1641/1/1625 1585/1/1573 +f 1640/1/1627 1641/1/1625 1634/1/1620 +f 1639/1/1626 1642/1/1628 1631/1/1617 +f 1639/1/1626 1641/1/1625 1637/1/1621 +f 1641/1/1625 1635/1/1622 1637/1/1621 +f 1538/1/1524 1419/1/1393 1531/1/1516 +f 1438/1/1414 1547/1/1531 1437/1/1413 +f 1438/1/1414 1548/1/1533 1547/1/1531 +f 1614/1/1601 1508/1/1493 1611/1/1598 +f 1512/1/1497 1508/1/1493 1614/1/1601 +f 1615/1/1600 1512/1/1497 1614/1/1601 +f 1511/1/1496 1512/1/1497 1615/1/1600 +f 1591/1/1579 1594/1/1582 1597/1/1584 +f 1594/1/1582 1602/1/1589 1597/1/1584 +f 1594/1/1582 1593/1/1581 1602/1/1589 +f 1593/1/1581 1603/1/1587 1602/1/1589 +f 1638/1/1624 1634/1/1620 1633/1/1619 +f 1640/1/1627 1634/1/1620 1638/1/1624 +f 1635/1/1622 1640/1/1627 1638/1/1624 +f 1641/1/1625 1640/1/1627 1635/1/1622 +f 1631/1/1617 1642/1/1628 1632/1/1618 +f 1642/1/1628 1636/1/1623 1632/1/1618 +f 1642/1/1628 1639/1/1626 1636/1/1623 +f 1639/1/1626 1637/1/1621 1636/1/1623 +f 1529/1/1514 1527/1/1512 1416/1/1390 +f 1440/1/1416 1529/1/1514 1416/1/1390 +f 1559/1/1547 1529/1/1514 1440/1/1416 +f 1457/1/1436 1559/1/1547 1440/1/1416 +f 1572/1/1560 1559/1/1547 1457/1/1436 +f 1650/1/1629 1655/1/1630 1660/1/1631 +f 1655/1/1630 1643/1/1632 1660/1/1631 +f 1668/1/1633 1644/1/1634 1672/1/1635 +f 1644/1/1634 1645/1/1636 1672/1/1635 +f 1651/1/1637 1647/1/1638 1652/1/1639 +f 1647/1/1638 1646/1/1640 1652/1/1639 +f 1653/1/1641 1648/1/1642 1651/1/1637 +f 1648/1/1642 1647/1/1638 1651/1/1637 +f 1671/1/1643 1649/1/1644 1653/1/1641 +f 1649/1/1644 1648/1/1642 1653/1/1641 +f 1650/1/1629 1646/1/1640 1647/1/1638 +f 1651/1/1637 1652/1/1639 1644/1/1634 +f 1649/1/1644 1654/1/1645 1648/1/1642 +f 1654/1/1645 1647/1/1638 1648/1/1642 +f 1654/1/1645 1650/1/1629 1647/1/1638 +f 1654/1/1645 1655/1/1630 1650/1/1629 +f 1651/1/1637 1644/1/1634 1668/1/1633 +f 1669/1/1646 1651/1/1637 1668/1/1633 +f 1653/1/1641 1651/1/1637 1669/1/1646 +f 1671/1/1643 1653/1/1641 1669/1/1646 +f 1656/1/1647 1661/1/1648 1662/1/1649 +f 1656/1/1647 1657/1/1650 1661/1/1648 +f 1657/1/1650 1658/1/1651 1661/1/1648 +f 1658/1/1651 1663/1/1652 1661/1/1648 +f 1658/1/1651 1676/1/1653 1663/1/1652 +f 1658/1/1651 1659/1/1654 1676/1/1653 +f 1656/1/1647 1660/1/1631 1657/1/1650 +f 1662/1/1649 1661/1/1648 1645/1/1636 +f 1664/1/1655 1659/1/1654 1658/1/1651 +f 1657/1/1650 1664/1/1655 1658/1/1651 +f 1665/1/1656 1664/1/1655 1657/1/1650 +f 1660/1/1631 1665/1/1656 1657/1/1650 +f 1643/1/1632 1665/1/1656 1660/1/1631 +f 1645/1/1636 1675/1/1657 1672/1/1635 +f 1645/1/1636 1661/1/1648 1675/1/1657 +f 1661/1/1648 1663/1/1652 1675/1/1657 +f 1663/1/1652 1676/1/1653 1675/1/1657 +f 1670/1/1658 1666/1/1541 1671/1/1643 +f 1666/1/1541 1649/1/1644 1671/1/1643 +f 1545/1/1530 1666/1/1541 1670/1/1658 +f 1666/1/1541 1654/1/1645 1649/1/1644 +f 1667/1/1540 1654/1/1645 1666/1/1541 +f 1667/1/1540 1655/1/1630 1654/1/1645 +f 1545/1/1530 1669/1/1646 1544/1/1527 +f 1669/1/1646 1668/1/1633 1544/1/1527 +f 1670/1/1658 1669/1/1646 1545/1/1530 +f 1670/1/1658 1671/1/1643 1669/1/1646 +f 1655/1/1630 1674/1/1552 1643/1/1632 +f 1667/1/1540 1674/1/1552 1655/1/1630 +f 1544/1/1527 1672/1/1635 1541/1/1526 +f 1668/1/1633 1672/1/1635 1544/1/1527 +f 1664/1/1655 1673/1/1659 1659/1/1654 +f 1664/1/1655 1564/1/1545 1673/1/1659 +f 1665/1/1656 1674/1/1552 1664/1/1655 +f 1674/1/1552 1564/1/1545 1664/1/1655 +f 1674/1/1552 1665/1/1656 1643/1/1632 +f 1672/1/1635 1675/1/1657 1541/1/1526 +f 1675/1/1657 1553/1/1538 1541/1/1526 +f 1675/1/1657 1676/1/1653 1553/1/1538 +f 1676/1/1653 1677/1/1660 1553/1/1538 +f 1659/1/1654 1677/1/1660 1676/1/1653 +f 1659/1/1654 1673/1/1659 1677/1/1660 +f 1673/1/1659 1553/1/1538 1677/1/1660 +f 1673/1/1659 1564/1/1545 1553/1/1538 +f 1701/1/1457 1687/1/1661 1700/1/1662 +f 1708/1/1458 1701/1/1457 1700/1/1662 +f 1678/1/1663 1682/1/1664 1696/1/1665 +f 1682/1/1664 1692/1/1666 1696/1/1665 +f 1679/1/1667 1680/1/1668 1433/1/1409 +f 1680/1/1668 1435/1/1411 1433/1/1409 +f 1682/1/1664 1683/1/1669 1692/1/1666 +f 1683/1/1669 1691/1/1670 1692/1/1666 +f 1683/1/1669 1690/1/1671 1691/1/1670 +f 1683/1/1669 1684/1/1433 1690/1/1671 +f 1684/1/1433 1694/1/1672 1690/1/1671 +f 1682/1/1664 1685/1/1673 1683/1/1669 +f 1687/1/1661 1685/1/1673 1682/1/1664 +f 1686/1/1674 1687/1/1661 1682/1/1664 +f 1689/1/1675 1688/1/1676 1680/1/1668 +f 1689/1/1675 1691/1/1670 1688/1/1676 +f 1691/1/1670 1690/1/1671 1688/1/1676 +f 1692/1/1666 1691/1/1670 1689/1/1675 +f 1686/1/1674 1682/1/1664 1678/1/1663 +f 1700/1/1662 1686/1/1674 1678/1/1663 +f 1687/1/1661 1686/1/1674 1700/1/1662 +f 1693/1/1455 1684/1/1433 1683/1/1669 +f 1685/1/1673 1693/1/1455 1683/1/1669 +f 1687/1/1661 1693/1/1455 1685/1/1673 +f 1701/1/1457 1693/1/1455 1687/1/1661 +f 1684/1/1433 1448/1/1425 1694/1/1672 +f 1680/1/1668 1688/1/1676 1435/1/1411 +f 1688/1/1676 1702/1/1420 1435/1/1411 +f 1688/1/1676 1694/1/1672 1702/1/1420 +f 1688/1/1676 1690/1/1671 1694/1/1672 +f 1689/1/1675 1680/1/1668 1679/1/1667 +f 1695/1/1677 1689/1/1675 1679/1/1667 +f 1692/1/1666 1689/1/1675 1695/1/1677 +f 1696/1/1665 1692/1/1666 1695/1/1677 +f 1705/1/1678 1697/1/1679 1696/1/1665 +f 1697/1/1679 1678/1/1663 1696/1/1665 +f 1698/1/1680 1697/1/1679 1705/1/1678 +f 1706/1/1681 1698/1/1680 1705/1/1678 +f 1710/1/1403 1681/1/1432 1706/1/1681 +f 1681/1/1432 1698/1/1680 1706/1/1681 +f 1699/1/1682 1678/1/1663 1697/1/1679 +f 1699/1/1682 1697/1/1679 1698/1/1680 +f 1699/1/1682 1700/1/1662 1678/1/1663 +f 1694/1/1672 1448/1/1425 1702/1/1420 +f 1703/1/1683 1695/1/1677 1679/1/1667 +f 1704/1/1684 1705/1/1678 1703/1/1683 +f 1703/1/1683 1696/1/1665 1695/1/1677 +f 1703/1/1683 1705/1/1678 1696/1/1665 +f 1706/1/1681 1705/1/1678 1704/1/1684 +f 1681/1/1432 1707/1/1454 1698/1/1680 +f 1707/1/1454 1699/1/1682 1698/1/1680 +f 1707/1/1454 1708/1/1458 1699/1/1682 +f 1708/1/1458 1700/1/1662 1699/1/1682 +f 1703/1/1683 1679/1/1667 1433/1/1409 +f 1709/1/1408 1703/1/1683 1433/1/1409 +f 1704/1/1684 1703/1/1683 1709/1/1408 +f 1706/1/1681 1704/1/1684 1709/1/1408 +f 1710/1/1403 1706/1/1681 1709/1/1408 +f 1644/1/1634 1662/1/1649 1645/1/1636 +f 1652/1/1639 1662/1/1649 1644/1/1634 +f 1646/1/1640 1660/1/1631 1656/1/1647 +f 1650/1/1629 1660/1/1631 1646/1/1640 +f 1652/1/1639 1656/1/1647 1662/1/1649 +f 1646/1/1640 1656/1/1647 1652/1/1639 +f 1717/1/1685 1714/1/1686 1711/1/1687 +f 1712/1/1688 1715/1/1689 1713/1/1690 +f 1716/1/1691 1717/1/1685 1711/1/1687 +f 1718/1/1692 1715/1/1689 1712/1/1688 +f 1719/1/1693 1717/1/1685 1716/1/1691 +f 1720/1/1694 1721/1/1695 1717/1/1685 +f 1722/1/1696 1720/1/1694 1717/1/1685 +f 1719/1/1693 1722/1/1696 1717/1/1685 +f 1723/1/1697 1724/1/1698 1712/1/1688 +f 1725/1/1699 1723/1/1697 1712/1/1688 +f 1726/1/1700 1725/1/1699 1712/1/1688 +f 1724/1/1698 1718/1/1692 1712/1/1688 +f 1720/1/1694 1727/1/1701 1721/1/1695 +f 1728/1/1702 1725/1/1699 1726/1/1700 +f 1720/1/1694 1729/1/1703 1727/1/1701 +f 1730/1/1704 1731/1/1705 1728/1/1702 +f 1731/1/1705 1732/1/1706 1728/1/1702 +f 1732/1/1706 1733/1/1707 1728/1/1702 +f 1733/1/1707 1725/1/1699 1728/1/1702 +f 1734/1/1708 1730/1/1704 1728/1/1702 +f 1735/1/1709 1720/1/1694 1722/1/1696 +f 1736/1/1710 1734/1/1708 1728/1/1702 +f 1729/1/1703 1737/1/1711 1727/1/1701 +f 1737/1/1711 2016/1/1712 1727/1/1701 +f 1739/1/1713 1740/1/1714 1738/1/1715 +f 1740/1/1714 1735/1/1709 1738/1/1715 +f 1740/1/1714 1720/1/1694 1735/1/1709 +f 2016/1/1712 1741/1/1716 1727/1/1701 +f 2016/1/1712 2015/1/1717 1741/1/1716 +f 2015/1/1717 1742/1/1718 1741/1/1716 +f 1742/1/1718 1743/1/1719 1741/1/1716 +f 1744/1/1720 1736/1/1710 1743/1/1719 +f 1742/1/1718 1744/1/1720 1743/1/1719 +f 1744/1/1720 1734/1/1708 1736/1/1710 +f 1725/1/1699 1745/1/1721 1723/1/1697 +f 1745/1/1721 1746/1/1722 1723/1/1697 +f 1746/1/1722 1747/1/1723 1723/1/1697 +f 1746/1/1722 1748/1/1724 1747/1/1723 +f 1749/1/1725 2016/1/1712 1737/1/1711 +f 1720/1/1694 1750/1/1726 1729/1/1703 +f 1751/1/1727 2016/1/1712 1749/1/1725 +f 1752/1/1728 1725/1/1699 1733/1/1707 +f 2007/1/1729 1734/1/1708 1744/1/1720 +f 1720/1/1694 1753/1/1730 1750/1/1726 +f 1754/1/1731 2016/1/1712 1751/1/1727 +f 1755/1/1732 1725/1/1699 1752/1/1728 +f 2008/1/1733 1734/1/1708 2007/1/1729 +f 1753/1/1730 1756/1/1734 1750/1/1726 +f 2009/1/1735 1734/1/1708 2008/1/1733 +f 1758/1/1736 1759/1/1737 2009/1/1735 +f 1759/1/1737 1757/1/1738 2009/1/1735 +f 1757/1/1738 1760/1/1739 2009/1/1735 +f 1760/1/1739 1734/1/1708 2009/1/1735 +f 1761/1/1740 2016/1/1712 1754/1/1731 +f 1762/1/1741 1725/1/1699 1755/1/1732 +f 1761/1/1740 2014/1/1742 2016/1/1712 +f 1986/1/1743 1758/1/1736 2009/1/1735 +f 1753/1/1730 1763/1/1744 1756/1/1734 +f 1764/1/1745 1725/1/1699 1762/1/1741 +f 1765/1/1746 1763/1/1744 1753/1/1730 +f 1762/1/1741 1767/1/1747 1764/1/1745 +f 1766/1/1748 2014/1/1742 1761/1/1740 +f 1767/1/1747 1768/1/1749 1764/1/1745 +f 1768/1/1749 1769/1/1750 1764/1/1745 +f 1770/1/1751 1765/1/1746 1753/1/1730 +f 1768/1/1749 1771/1/1752 1769/1/1750 +f 1772/1/1753 1770/1/1751 1753/1/1730 +f 1773/1/1754 1774/1/1755 1769/1/1750 +f 1774/1/1755 1791/1/1756 1769/1/1750 +f 1771/1/1752 1776/1/1757 1769/1/1750 +f 1776/1/1757 1775/1/1758 1769/1/1750 +f 1775/1/1758 1777/1/1759 1769/1/1750 +f 1777/1/1759 1773/1/1754 1769/1/1750 +f 1778/1/1760 1779/1/1761 2014/1/1742 +f 1766/1/1748 1780/1/1762 2014/1/1742 +f 1780/1/1762 1781/1/1763 2014/1/1742 +f 1781/1/1763 1778/1/1760 2014/1/1742 +f 1779/1/1761 1782/1/1764 2014/1/1742 +f 1782/1/1764 1783/1/1765 2014/1/1742 +f 1783/1/1765 1784/1/1766 2014/1/1742 +f 1776/1/1757 1758/1/1736 1986/1/1743 +f 1998/1/1767 1776/1/1757 1986/1/1743 +f 1999/1/1768 1776/1/1757 1998/1/1767 +f 1785/1/1769 1770/1/1751 1772/1/1753 +f 1791/1/1756 1786/1/1770 1769/1/1750 +f 1783/1/1765 2013/1/1771 1784/1/1766 +f 1787/1/1772 1776/1/1757 1999/1/1768 +f 1783/1/1765 1787/1/1772 2013/1/1771 +f 1787/1/1772 1999/1/1768 2013/1/1771 +f 1778/1/1760 1789/1/1773 1770/1/1751 +f 1788/1/1774 1778/1/1760 1770/1/1751 +f 1790/1/1775 1788/1/1774 1770/1/1751 +f 1785/1/1769 1790/1/1775 1770/1/1751 +f 1789/1/1773 1778/1/1760 1781/1/1763 +f 1758/1/1736 1776/1/1757 1771/1/1752 +f 1793/1/1776 1785/1/1769 1772/1/1753 +f 1792/1/1777 1793/1/1776 1772/1/1753 +f 1794/1/1778 1790/1/1775 1785/1/1769 +f 1793/1/1776 1794/1/1778 1785/1/1769 +f 1794/1/1778 1788/1/1774 1790/1/1775 +f 1794/1/1778 1795/1/1779 1788/1/1774 +f 1795/1/1779 1778/1/1760 1788/1/1774 +f 1796/1/1780 1779/1/1761 1778/1/1760 +f 1795/1/1779 1796/1/1780 1778/1/1760 +f 1796/1/1780 1782/1/1764 1779/1/1761 +f 1796/1/1780 1797/1/1781 1782/1/1764 +f 1797/1/1781 1783/1/1765 1782/1/1764 +f 1798/1/1782 1740/1/1714 1739/1/1713 +f 1798/1/1782 1799/1/1783 1740/1/1714 +f 1799/1/1783 1720/1/1694 1740/1/1714 +f 1799/1/1783 1800/1/1784 1720/1/1694 +f 1802/1/1785 1803/1/1786 1907/1/1787 +f 1802/1/1785 1801/1/1788 1803/1/1786 +f 1806/1/1789 1805/1/1478 1804/1/1479 +f 1807/1/1480 1805/1/1478 1806/1/1789 +f 1808/1/1790 1807/1/1480 1806/1/1789 +f 1809/1/1791 1807/1/1480 1808/1/1790 +f 1804/1/1479 1805/1/1478 1801/1/1788 +f 1802/1/1785 1804/1/1479 1801/1/1788 +f 1811/1/1792 1787/1/1772 1810/1/1793 +f 1811/1/1792 1812/1/1794 1787/1/1772 +f 1811/1/1792 1813/1/1795 1812/1/1794 +f 1813/1/1795 1814/1/1796 1812/1/1794 +f 1813/1/1795 1815/1/1797 1814/1/1796 +f 1816/1/1798 1741/1/1716 1817/1/1799 +f 1818/1/1800 1816/1/1798 1819/1/1801 +f 1820/1/1802 1818/1/1800 1819/1/1801 +f 1816/1/1798 1821/1/1803 1819/1/1801 +f 1821/1/1803 1822/1/1804 1819/1/1801 +f 1824/1/1805 1818/1/1800 1820/1/1802 +f 1823/1/1806 1824/1/1805 1820/1/1802 +f 1829/1/1807 1825/1/1808 1826/1/1809 +f 1827/1/1810 1830/1/1811 1828/1/1812 +f 1825/1/1808 1831/1/1813 1826/1/1809 +f 1827/1/1810 1832/1/1814 1830/1/1811 +f 1825/1/1808 1836/1/1815 1831/1/1813 +f 1834/1/1816 1833/1/1817 1825/1/1808 +f 1833/1/1817 1835/1/1818 1825/1/1808 +f 1835/1/1818 1836/1/1815 1825/1/1808 +f 1837/1/1819 1838/1/1820 1832/1/1814 +f 1838/1/1820 1839/1/1821 1832/1/1814 +f 1839/1/1821 1840/1/1822 1832/1/1814 +f 1827/1/1810 1837/1/1819 1832/1/1814 +f 1841/1/1823 1833/1/1817 1834/1/1816 +f 1839/1/1821 1842/1/1824 1840/1/1822 +f 1843/1/1825 1833/1/1817 1841/1/1823 +f 1844/1/1826 1845/1/1827 1841/1/1823 +f 1845/1/1827 1846/1/1828 1841/1/1823 +f 1846/1/1828 1843/1/1825 1841/1/1823 +f 1839/1/1821 1847/1/1829 1842/1/1824 +f 1848/1/1830 1844/1/1826 1841/1/1823 +f 1849/1/1831 1850/1/1832 1841/1/1823 +f 1850/1/1832 1848/1/1830 1841/1/1823 +f 1847/1/1829 1851/1/1833 1842/1/1824 +f 1852/1/1834 1850/1/1832 1849/1/1831 +f 1855/1/1835 1852/1/1834 1849/1/1831 +f 1847/1/1829 1853/1/1836 1851/1/1833 +f 1835/1/1818 1798/1/1782 1854/1/1837 +f 1800/1/1784 1799/1/1783 1835/1/1818 +f 1833/1/1817 1800/1/1784 1835/1/1818 +f 1799/1/1783 1798/1/1782 1835/1/1818 +f 1816/1/1798 1855/1/1835 1849/1/1831 +f 1818/1/1800 1855/1/1835 1816/1/1798 +f 1851/1/1833 1853/1/1836 1818/1/1800 +f 1974/1/1838 1855/1/1835 1818/1/1800 +f 1853/1/1836 1974/1/1838 1818/1/1800 +f 1857/1/1839 1858/1/1840 1838/1/1820 +f 1858/1/1840 1856/1/1841 1838/1/1820 +f 1856/1/1841 1839/1/1821 1838/1/1820 +f 1859/1/1842 1974/1/1838 1853/1/1836 +f 1860/1/1843 1974/1/1838 1859/1/1842 +f 1839/1/1821 1861/1/1844 1847/1/1829 +f 1862/1/1845 1833/1/1817 1843/1/1825 +f 1863/1/1846 1850/1/1832 1852/1/1834 +f 1864/1/1847 1971/1/1848 1860/1/1843 +f 1971/1/1848 1970/1/1849 1860/1/1843 +f 1970/1/1849 1974/1/1838 1860/1/1843 +f 1839/1/1821 1865/1/1850 1861/1/1844 +f 1866/1/1851 1833/1/1817 1862/1/1845 +f 1867/1/1852 1971/1/1848 1864/1/1847 +f 1839/1/1821 1868/1/1853 1865/1/1850 +f 1977/1/1854 1850/1/1832 1863/1/1846 +f 1869/1/1855 1833/1/1817 1866/1/1851 +f 1870/1/1856 1868/1/1853 1839/1/1821 +f 1866/1/1851 1871/1/1857 1869/1/1855 +f 1872/1/1858 1873/1/1859 1870/1/1856 +f 1873/1/1859 1868/1/1853 1870/1/1856 +f 1978/1/1860 1874/1/1861 1850/1/1832 +f 1977/1/1854 1978/1/1860 1850/1/1832 +f 1871/1/1857 1792/1/1777 1869/1/1855 +f 1875/1/1862 1872/1/1858 1870/1/1856 +f 1978/1/1860 1876/1/1863 1874/1/1861 +f 1877/1/1864 1971/1/1848 1867/1/1852 +f 1878/1/1865 1879/1/1866 1792/1/1777 +f 1871/1/1857 1878/1/1865 1792/1/1777 +f 1797/1/1781 1796/1/1780 1792/1/1777 +f 1796/1/1780 1795/1/1779 1792/1/1777 +f 1795/1/1779 1794/1/1778 1792/1/1777 +f 1794/1/1778 1793/1/1776 1792/1/1777 +f 1879/1/1866 1810/1/1793 1792/1/1777 +f 1810/1/1793 1797/1/1781 1792/1/1777 +f 1880/1/1867 1881/1/1868 1875/1/1862 +f 1882/1/1869 1880/1/1867 1875/1/1862 +f 1881/1/1868 1884/1/1870 1875/1/1862 +f 1884/1/1870 1883/1/1871 1875/1/1862 +f 1883/1/1871 1876/1/1863 1875/1/1862 +f 1876/1/1863 1872/1/1858 1875/1/1862 +f 1876/1/1863 1885/1/1872 1874/1/1861 +f 1876/1/1863 1971/1/1848 1877/1/1864 +f 1876/1/1863 1810/1/1793 1885/1/1872 +f 1886/1/1873 1876/1/1863 1877/1/1864 +f 1887/1/1874 1882/1/1869 1875/1/1862 +f 1810/1/1793 1888/1/1875 1885/1/1872 +f 1971/1/1848 1876/1/1863 1978/1/1860 +f 1889/1/1876 1876/1/1863 1886/1/1873 +f 1810/1/1793 1890/1/1877 1888/1/1875 +f 1890/1/1877 1810/1/1793 1879/1/1866 +f 1891/1/1878 1876/1/1863 1889/1/1876 +f 1876/1/1863 1891/1/1878 1872/1/1858 +f 1876/1/1863 1811/1/1792 1810/1/1793 +f 1876/1/1863 1892/1/1879 1811/1/1792 +f 1892/1/1879 1813/1/1795 1811/1/1792 +f 1892/1/1879 1893/1/1880 1813/1/1795 +f 1893/1/1880 1894/1/1881 1813/1/1795 +f 1894/1/1881 1815/1/1797 1813/1/1795 +f 1894/1/1881 1895/1/1882 1809/1/1791 +f 1815/1/1797 1894/1/1881 1809/1/1791 +f 1805/1/1478 1897/1/1883 1896/1/1576 +f 1807/1/1480 1897/1/1883 1805/1/1478 +f 1807/1/1480 1898/1/1577 1897/1/1883 +f 1809/1/1791 1898/1/1577 1807/1/1480 +f 1809/1/1791 1895/1/1882 1898/1/1577 +f 1896/1/1576 1899/1/1884 1801/1/1788 +f 1805/1/1478 1896/1/1576 1801/1/1788 +f 1801/1/1788 1900/1/1885 1901/1/1886 +f 1803/1/1786 1801/1/1788 1901/1/1886 +f 1899/1/1884 1902/1/1887 1900/1/1885 +f 1801/1/1788 1899/1/1884 1900/1/1885 +f 1903/1/1888 1803/1/1786 1901/1/1886 +f 1900/1/1885 1904/1/1889 1905/1/1890 +f 1901/1/1886 1900/1/1885 1905/1/1890 +f 1802/1/1785 1907/1/1787 1905/1/1890 +f 1906/1/1891 1802/1/1785 1905/1/1890 +f 1904/1/1889 1906/1/1891 1905/1/1890 +f 1909/1/1892 1906/1/1891 1904/1/1889 +f 1907/1/1787 1908/1/1893 1905/1/1890 +f 1906/1/1891 1804/1/1479 1802/1/1785 +f 1910/1/1894 1804/1/1479 1906/1/1891 +f 1910/1/1894 1806/1/1789 1804/1/1479 +f 1911/1/1895 1806/1/1789 1910/1/1894 +f 1911/1/1895 1808/1/1790 1806/1/1789 +f 1912/1/1896 1808/1/1790 1911/1/1895 +f 1912/1/1896 1913/1/1897 1814/1/1796 +f 1808/1/1790 1912/1/1896 1814/1/1796 +f 1812/1/1794 1914/1/1898 1787/1/1772 +f 1914/1/1898 1776/1/1757 1787/1/1772 +f 1913/1/1897 1914/1/1898 1812/1/1794 +f 1814/1/1796 1913/1/1897 1812/1/1794 +f 1817/1/1799 1743/1/1719 1915/1/1899 +f 1741/1/1716 1743/1/1719 1817/1/1799 +f 1919/1/1900 1817/1/1799 1916/1/1901 +f 1817/1/1799 1917/1/1902 1916/1/1901 +f 1918/1/1903 1919/1/1900 1916/1/1901 +f 1817/1/1799 1915/1/1899 1917/1/1902 +f 1915/1/1899 1920/1/1904 1917/1/1902 +f 1917/1/1902 1819/1/1801 1916/1/1901 +f 1820/1/1802 1819/1/1801 1917/1/1902 +f 1821/1/1803 1816/1/1798 1919/1/1900 +f 1816/1/1798 1817/1/1799 1919/1/1900 +f 1797/1/1781 1810/1/1793 1783/1/1765 +f 1810/1/1793 1787/1/1772 1783/1/1765 +f 1735/1/1709 1854/1/1837 1738/1/1715 +f 1835/1/1818 1854/1/1837 1735/1/1709 +f 1714/1/1686 1826/1/1809 1711/1/1687 +f 1714/1/1686 1829/1/1807 1826/1/1809 +f 1831/1/1813 1716/1/1691 1711/1/1687 +f 1826/1/1809 1831/1/1813 1711/1/1687 +f 1717/1/1685 1829/1/1807 1714/1/1686 +f 1717/1/1685 1825/1/1808 1829/1/1807 +f 1831/1/1813 1719/1/1693 1716/1/1691 +f 1831/1/1813 1836/1/1815 1719/1/1693 +f 1721/1/1695 1825/1/1808 1717/1/1685 +f 1721/1/1695 1834/1/1816 1825/1/1808 +f 1836/1/1815 1722/1/1696 1719/1/1693 +f 1836/1/1815 1835/1/1818 1722/1/1696 +f 1727/1/1701 1834/1/1816 1721/1/1695 +f 1727/1/1701 1841/1/1823 1834/1/1816 +f 1741/1/1716 1849/1/1831 1727/1/1701 +f 1816/1/1798 1849/1/1831 1741/1/1716 +f 1843/1/1825 1846/1/1828 1737/1/1711 +f 1729/1/1703 1843/1/1825 1737/1/1711 +f 1846/1/1828 1749/1/1725 1737/1/1711 +f 1845/1/1827 1749/1/1725 1846/1/1828 +f 1750/1/1726 1843/1/1825 1729/1/1703 +f 1845/1/1827 1751/1/1727 1749/1/1725 +f 1844/1/1826 1751/1/1727 1845/1/1827 +f 1862/1/1845 1843/1/1825 1750/1/1726 +f 1844/1/1826 1754/1/1731 1751/1/1727 +f 1756/1/1734 1862/1/1845 1750/1/1726 +f 1848/1/1830 1754/1/1731 1844/1/1826 +f 1866/1/1851 1862/1/1845 1756/1/1734 +f 1848/1/1830 1761/1/1740 1754/1/1731 +f 1850/1/1832 1761/1/1740 1848/1/1830 +f 1763/1/1744 1866/1/1851 1756/1/1734 +f 1850/1/1832 1766/1/1748 1761/1/1740 +f 1874/1/1861 1766/1/1748 1850/1/1832 +f 1871/1/1857 1866/1/1851 1763/1/1744 +f 1765/1/1746 1871/1/1857 1763/1/1744 +f 1874/1/1861 1780/1/1762 1766/1/1748 +f 1885/1/1872 1780/1/1762 1874/1/1861 +f 1878/1/1865 1871/1/1857 1765/1/1746 +f 1770/1/1751 1878/1/1865 1765/1/1746 +f 1885/1/1872 1781/1/1763 1780/1/1762 +f 1888/1/1875 1781/1/1763 1885/1/1872 +f 1879/1/1866 1878/1/1865 1770/1/1751 +f 1890/1/1877 1781/1/1763 1888/1/1875 +f 1890/1/1877 1879/1/1866 1770/1/1751 +f 1789/1/1773 1890/1/1877 1770/1/1751 +f 1890/1/1877 1789/1/1773 1781/1/1763 +f 1921/1/1905 1809/1/1791 1808/1/1790 +f 1815/1/1797 1922/1/1906 1814/1/1796 +f 1814/1/1796 1922/1/1906 1808/1/1790 +f 1922/1/1906 1921/1/1905 1808/1/1790 +f 1923/1/1907 1809/1/1791 1921/1/1905 +f 1923/1/1907 1924/1/1908 1809/1/1791 +f 1925/1/1909 1926/1/1910 1922/1/1906 +f 1815/1/1797 1925/1/1909 1922/1/1906 +f 1922/1/1906 1929/1/1911 1921/1/1905 +f 1929/1/1911 1927/1/1912 1921/1/1905 +f 1927/1/1912 1923/1/1907 1921/1/1905 +f 1926/1/1910 1929/1/1911 1922/1/1906 +f 1927/1/1912 1928/1/1913 1923/1/1907 +f 1930/1/1914 1929/1/1911 1926/1/1910 +f 1932/1/1915 1815/1/1797 1809/1/1791 +f 1924/1/1908 1932/1/1915 1809/1/1791 +f 1931/1/1916 1925/1/1909 1815/1/1797 +f 1932/1/1915 1931/1/1916 1815/1/1797 +f 1933/1/1917 1932/1/1915 1924/1/1908 +f 1931/1/1916 1934/1/1918 1925/1/1909 +f 1929/1/1911 1932/1/1915 1927/1/1912 +f 1931/1/1916 1932/1/1915 1929/1/1911 +f 1849/1/1831 1841/1/1823 1727/1/1701 +f 1835/1/1818 1735/1/1709 1722/1/1696 +f 1854/1/1837 1739/1/1713 1738/1/1715 +f 1854/1/1837 1798/1/1782 1739/1/1713 +f 1819/1/1801 1822/1/1804 1916/1/1901 +f 1822/1/1804 1918/1/1903 1916/1/1901 +f 1822/1/1804 1821/1/1803 1918/1/1903 +f 1821/1/1803 1919/1/1900 1918/1/1903 +f 1908/1/1893 1901/1/1886 1905/1/1890 +f 1903/1/1888 1901/1/1886 1908/1/1893 +f 1907/1/1787 1903/1/1888 1908/1/1893 +f 1803/1/1786 1903/1/1888 1907/1/1787 +f 1925/1/1909 1934/1/1918 1926/1/1910 +f 1934/1/1918 1930/1/1914 1926/1/1910 +f 1934/1/1918 1931/1/1916 1930/1/1914 +f 1931/1/1916 1929/1/1911 1930/1/1914 +f 1928/1/1913 1924/1/1908 1923/1/1907 +f 1933/1/1917 1924/1/1908 1928/1/1913 +f 1927/1/1912 1933/1/1917 1928/1/1913 +f 1932/1/1915 1933/1/1917 1927/1/1912 +f 1833/1/1817 1720/1/1694 1800/1/1784 +f 1833/1/1817 1753/1/1730 1720/1/1694 +f 1869/1/1855 1753/1/1730 1833/1/1817 +f 1792/1/1777 1753/1/1730 1869/1/1855 +f 1792/1/1777 1772/1/1753 1753/1/1730 +f 1786/1/1770 1875/1/1862 1769/1/1750 +f 1786/1/1770 1887/1/1874 1875/1/1862 +f 1791/1/1756 1887/1/1874 1786/1/1770 +f 1791/1/1756 1882/1/1869 1887/1/1874 +f 1774/1/1755 1882/1/1869 1791/1/1756 +f 1774/1/1755 1880/1/1867 1882/1/1869 +f 1773/1/1754 1880/1/1867 1774/1/1755 +f 1773/1/1754 1881/1/1868 1880/1/1867 +f 1777/1/1759 1881/1/1868 1773/1/1754 +f 1777/1/1759 1884/1/1870 1881/1/1868 +f 1775/1/1758 1884/1/1870 1777/1/1759 +f 1775/1/1758 1883/1/1871 1884/1/1870 +f 1746/1/1722 1858/1/1840 1748/1/1724 +f 1746/1/1722 1856/1/1841 1858/1/1840 +f 1745/1/1721 1856/1/1841 1746/1/1722 +f 1745/1/1721 1839/1/1821 1856/1/1841 +f 1899/1/1884 1906/1/1891 1909/1/1892 +f 1902/1/1887 1899/1/1884 1909/1/1892 +f 1897/1/1883 1910/1/1894 1896/1/1576 +f 1897/1/1883 1911/1/1895 1910/1/1894 +f 1897/1/1883 1898/1/1577 1911/1/1895 +f 1898/1/1577 1912/1/1896 1911/1/1895 +f 1898/1/1577 1895/1/1882 1912/1/1896 +f 1896/1/1576 1906/1/1891 1899/1/1884 +f 1896/1/1576 1910/1/1894 1906/1/1891 +f 1914/1/1898 1892/1/1879 1776/1/1757 +f 1892/1/1879 1876/1/1863 1776/1/1757 +f 1893/1/1880 1892/1/1879 1914/1/1898 +f 1913/1/1897 1893/1/1880 1914/1/1898 +f 1894/1/1881 1893/1/1880 1913/1/1897 +f 1743/1/1719 1818/1/1800 1915/1/1899 +f 1915/1/1899 1824/1/1805 1920/1/1904 +f 1915/1/1899 1818/1/1800 1824/1/1805 +f 1876/1/1863 1883/1/1871 1776/1/1757 +f 1883/1/1871 1775/1/1758 1776/1/1757 +f 1747/1/1723 1838/1/1820 1723/1/1697 +f 1857/1/1839 1838/1/1820 1747/1/1723 +f 1828/1/1812 1830/1/1811 1713/1/1690 +f 1715/1/1689 1828/1/1812 1713/1/1690 +f 1830/1/1811 1712/1/1688 1713/1/1690 +f 1715/1/1689 1827/1/1810 1828/1/1812 +f 1830/1/1811 1832/1/1814 1712/1/1688 +f 1718/1/1692 1827/1/1810 1715/1/1689 +f 1840/1/1822 1726/1/1700 1712/1/1688 +f 1832/1/1814 1840/1/1822 1712/1/1688 +f 1724/1/1698 1827/1/1810 1718/1/1692 +f 1724/1/1698 1837/1/1819 1827/1/1810 +f 1842/1/1824 1728/1/1702 1726/1/1700 +f 1840/1/1822 1842/1/1824 1726/1/1700 +f 1723/1/1697 1837/1/1819 1724/1/1698 +f 1723/1/1697 1838/1/1820 1837/1/1819 +f 1736/1/1710 1818/1/1800 1743/1/1719 +f 1851/1/1833 1818/1/1800 1736/1/1710 +f 1859/1/1842 1853/1/1836 1732/1/1706 +f 1731/1/1705 1859/1/1842 1732/1/1706 +f 1853/1/1836 1733/1/1707 1732/1/1706 +f 1847/1/1829 1733/1/1707 1853/1/1836 +f 1860/1/1843 1859/1/1842 1731/1/1705 +f 1730/1/1704 1860/1/1843 1731/1/1705 +f 1847/1/1829 1752/1/1728 1733/1/1707 +f 1861/1/1844 1752/1/1728 1847/1/1829 +f 1864/1/1847 1860/1/1843 1730/1/1704 +f 1861/1/1844 1755/1/1732 1752/1/1728 +f 1734/1/1708 1864/1/1847 1730/1/1704 +f 1865/1/1850 1755/1/1732 1861/1/1844 +f 1867/1/1852 1864/1/1847 1734/1/1708 +f 1865/1/1850 1762/1/1741 1755/1/1732 +f 1868/1/1853 1762/1/1741 1865/1/1850 +f 1760/1/1739 1867/1/1852 1734/1/1708 +f 1877/1/1864 1867/1/1852 1760/1/1739 +f 1868/1/1853 1767/1/1747 1762/1/1741 +f 1873/1/1859 1767/1/1747 1868/1/1853 +f 1757/1/1738 1877/1/1864 1760/1/1739 +f 1873/1/1859 1768/1/1749 1767/1/1747 +f 1886/1/1873 1877/1/1864 1757/1/1738 +f 1872/1/1858 1768/1/1749 1873/1/1859 +f 1872/1/1858 1771/1/1752 1768/1/1749 +f 1889/1/1876 1886/1/1873 1757/1/1738 +f 1759/1/1737 1889/1/1876 1757/1/1738 +f 1758/1/1736 1889/1/1876 1759/1/1737 +f 1891/1/1878 1889/1/1876 1758/1/1736 +f 1872/1/1858 1758/1/1736 1771/1/1752 +f 1891/1/1878 1758/1/1736 1872/1/1858 +f 1895/1/1882 1935/1/1919 1912/1/1896 +f 1936/1/1920 1894/1/1881 1913/1/1897 +f 1935/1/1919 1913/1/1897 1912/1/1896 +f 1935/1/1919 1936/1/1920 1913/1/1897 +f 1895/1/1882 1937/1/1921 1935/1/1919 +f 1937/1/1921 1938/1/1922 1935/1/1919 +f 1939/1/1923 1894/1/1881 1936/1/1920 +f 1939/1/1923 1940/1/1924 1894/1/1881 +f 1942/1/1925 1936/1/1920 1935/1/1919 +f 1938/1/1922 1942/1/1925 1935/1/1919 +f 1942/1/1925 1943/1/1926 1936/1/1920 +f 1943/1/1926 1939/1/1923 1936/1/1920 +f 1941/1/1927 1942/1/1925 1938/1/1922 +f 1894/1/1881 1945/1/1928 1895/1/1882 +f 1945/1/1928 1944/1/1929 1895/1/1882 +f 1944/1/1929 1937/1/1921 1895/1/1882 +f 1940/1/1924 1945/1/1928 1894/1/1881 +f 1944/1/1929 1946/1/1930 1937/1/1921 +f 1944/1/1929 1945/1/1928 1942/1/1925 +f 1945/1/1928 1943/1/1926 1942/1/1925 +f 1842/1/1824 1736/1/1710 1728/1/1702 +f 1851/1/1833 1736/1/1710 1842/1/1824 +f 1748/1/1724 1857/1/1839 1747/1/1723 +f 1748/1/1724 1858/1/1840 1857/1/1839 +f 1823/1/1806 1820/1/1802 1917/1/1902 +f 1920/1/1904 1823/1/1806 1917/1/1902 +f 1824/1/1805 1823/1/1806 1920/1/1904 +f 1900/1/1885 1902/1/1887 1904/1/1889 +f 1902/1/1887 1909/1/1892 1904/1/1889 +f 1943/1/1926 1940/1/1924 1939/1/1923 +f 1945/1/1928 1940/1/1924 1943/1/1926 +f 1937/1/1921 1946/1/1930 1938/1/1922 +f 1946/1/1930 1941/1/1927 1938/1/1922 +f 1946/1/1930 1944/1/1929 1941/1/1927 +f 1944/1/1929 1942/1/1925 1941/1/1927 +f 1725/1/1699 1839/1/1821 1745/1/1721 +f 1870/1/1856 1839/1/1821 1725/1/1699 +f 1764/1/1745 1870/1/1856 1725/1/1699 +f 1875/1/1862 1870/1/1856 1764/1/1745 +f 1769/1/1750 1875/1/1862 1764/1/1745 +f 1954/1/1931 1959/1/1932 1964/1/1933 +f 1959/1/1932 1947/1/1934 1964/1/1933 +f 1972/1/1935 1948/1/1936 1979/1/1937 +f 1948/1/1936 1949/1/1938 1979/1/1937 +f 1955/1/1939 1951/1/1940 1956/1/1941 +f 1951/1/1940 1950/1/1942 1956/1/1941 +f 1957/1/1943 1951/1/1940 1955/1/1939 +f 1952/1/1944 1951/1/1940 1957/1/1943 +f 1976/1/1945 1953/1/1946 1957/1/1943 +f 1953/1/1946 1952/1/1944 1957/1/1943 +f 1954/1/1931 1950/1/1942 1951/1/1940 +f 1955/1/1939 1956/1/1941 1948/1/1936 +f 1953/1/1946 1958/1/1947 1952/1/1944 +f 1958/1/1947 1951/1/1940 1952/1/1944 +f 1958/1/1947 1959/1/1932 1951/1/1940 +f 1959/1/1932 1954/1/1931 1951/1/1940 +f 1973/1/1948 1948/1/1936 1972/1/1935 +f 1955/1/1939 1948/1/1936 1973/1/1948 +f 1957/1/1943 1955/1/1939 1973/1/1948 +f 1976/1/1945 1957/1/1943 1973/1/1948 +f 1960/1/1949 1965/1/1950 1966/1/1951 +f 1960/1/1949 1961/1/1952 1965/1/1950 +f 1961/1/1952 1962/1/1953 1965/1/1950 +f 1962/1/1953 1967/1/1954 1965/1/1950 +f 1962/1/1953 1981/1/1955 1967/1/1954 +f 1962/1/1953 1963/1/1956 1981/1/1955 +f 1960/1/1949 1964/1/1933 1961/1/1952 +f 1966/1/1951 1965/1/1950 1949/1/1938 +f 1968/1/1957 1963/1/1956 1962/1/1953 +f 1961/1/1952 1968/1/1957 1962/1/1953 +f 1969/1/1958 1968/1/1957 1961/1/1952 +f 1964/1/1933 1969/1/1958 1961/1/1952 +f 1947/1/1934 1969/1/1958 1964/1/1933 +f 1949/1/1938 1965/1/1950 1979/1/1937 +f 1965/1/1950 1980/1/1959 1979/1/1937 +f 1965/1/1950 1967/1/1954 1980/1/1959 +f 1967/1/1954 1981/1/1955 1980/1/1959 +f 1975/1/1960 1970/1/1849 1976/1/1945 +f 1970/1/1849 1953/1/1946 1976/1/1945 +f 1974/1/1838 1970/1/1849 1975/1/1960 +f 1970/1/1849 1958/1/1947 1953/1/1946 +f 1971/1/1848 1958/1/1947 1970/1/1849 +f 1971/1/1848 1959/1/1932 1958/1/1947 +f 1974/1/1838 1972/1/1935 1855/1/1835 +f 1973/1/1948 1972/1/1935 1974/1/1838 +f 1975/1/1960 1973/1/1948 1974/1/1838 +f 1975/1/1960 1976/1/1945 1973/1/1948 +f 1959/1/1932 1978/1/1860 1947/1/1934 +f 1971/1/1848 1978/1/1860 1959/1/1932 +f 1855/1/1835 1979/1/1937 1852/1/1834 +f 1972/1/1935 1979/1/1937 1855/1/1835 +f 1968/1/1957 1977/1/1854 1963/1/1956 +f 1969/1/1958 1978/1/1860 1968/1/1957 +f 1978/1/1860 1977/1/1854 1968/1/1957 +f 1978/1/1860 1969/1/1958 1947/1/1934 +f 1979/1/1937 1863/1/1846 1852/1/1834 +f 1979/1/1937 1980/1/1959 1863/1/1846 +f 1981/1/1955 1863/1/1846 1980/1/1959 +f 1963/1/1956 1863/1/1846 1981/1/1955 +f 1963/1/1956 1977/1/1854 1863/1/1846 +f 1999/1/1768 1992/1/1961 2006/1/1962 +f 2013/1/1771 1999/1/1768 2006/1/1962 +f 1982/1/1963 1987/1/1964 2001/1/1965 +f 1987/1/1964 1997/1/1966 2001/1/1965 +f 1983/1/1967 1984/1/1968 1742/1/1718 +f 1984/1/1968 1744/1/1720 1742/1/1718 +f 1987/1/1964 1988/1/1969 1997/1/1966 +f 1988/1/1969 1996/1/1970 1997/1/1966 +f 1988/1/1969 1995/1/1971 1996/1/1970 +f 1988/1/1969 1989/1/1972 1995/1/1971 +f 1989/1/1972 1986/1/1743 1995/1/1971 +f 1986/1/1743 2009/1/1735 1995/1/1971 +f 1991/1/1973 1988/1/1969 1987/1/1964 +f 1990/1/1974 1991/1/1973 1987/1/1964 +f 1988/1/1969 1991/1/1973 1989/1/1972 +f 1990/1/1974 1992/1/1961 1991/1/1973 +f 1994/1/1975 1993/1/1976 1984/1/1968 +f 1994/1/1975 1996/1/1970 1993/1/1976 +f 1996/1/1970 1995/1/1971 1993/1/1976 +f 1997/1/1966 1996/1/1970 1994/1/1975 +f 1990/1/1974 1987/1/1964 1982/1/1963 +f 2006/1/1962 1990/1/1974 1982/1/1963 +f 1992/1/1961 1990/1/1974 2006/1/1962 +f 1998/1/1767 1986/1/1743 1989/1/1972 +f 1991/1/1973 1998/1/1767 1989/1/1972 +f 1999/1/1768 1998/1/1767 1991/1/1973 +f 1992/1/1961 1999/1/1768 1991/1/1973 +f 1984/1/1968 2007/1/1729 1744/1/1720 +f 1984/1/1968 1993/1/1976 2007/1/1729 +f 1993/1/1976 2008/1/1733 2007/1/1729 +f 1993/1/1976 1995/1/1971 2008/1/1733 +f 1995/1/1971 2009/1/1735 2008/1/1733 +f 1994/1/1975 1984/1/1968 1983/1/1967 +f 2000/1/1977 1994/1/1975 1983/1/1967 +f 1997/1/1966 1994/1/1975 2000/1/1977 +f 2001/1/1965 1997/1/1966 2000/1/1977 +f 2012/1/1978 2002/1/1979 2001/1/1965 +f 2002/1/1979 1982/1/1963 2001/1/1965 +f 2011/1/1980 2003/1/1981 2012/1/1978 +f 2003/1/1981 2002/1/1979 2012/1/1978 +f 2016/1/1712 1985/1/1982 2011/1/1980 +f 1985/1/1982 2003/1/1981 2011/1/1980 +f 2003/1/1981 2004/1/1983 2002/1/1979 +f 2005/1/1984 1982/1/1963 2002/1/1979 +f 2004/1/1983 2005/1/1984 2002/1/1979 +f 2005/1/1984 2006/1/1962 1982/1/1963 +f 2010/1/1985 2000/1/1977 1983/1/1967 +f 2010/1/1985 2001/1/1965 2000/1/1977 +f 2010/1/1985 2012/1/1978 2001/1/1965 +f 2011/1/1980 2012/1/1978 2010/1/1985 +f 2014/1/1742 2004/1/1983 2003/1/1981 +f 1985/1/1982 2014/1/1742 2003/1/1981 +f 2014/1/1742 1784/1/1766 2004/1/1983 +f 1784/1/1766 2005/1/1984 2004/1/1983 +f 1784/1/1766 2013/1/1771 2005/1/1984 +f 2013/1/1771 2006/1/1962 2005/1/1984 +f 2010/1/1985 1983/1/1967 1742/1/1718 +f 2015/1/1717 2010/1/1985 1742/1/1718 +f 2011/1/1980 2010/1/1985 2015/1/1717 +f 2016/1/1712 2011/1/1980 2015/1/1717 +f 2014/1/1742 1985/1/1982 2016/1/1712 +f 1948/1/1936 1966/1/1951 1949/1/1938 +f 1956/1/1941 1966/1/1951 1948/1/1936 +f 1950/1/1942 1964/1/1933 1960/1/1949 +f 1954/1/1931 1964/1/1933 1950/1/1942 +f 1956/1/1941 1960/1/1949 1966/1/1951 +f 1950/1/1942 1960/1/1949 1956/1/1941 diff --git a/resources/qml/ActionButton.qml b/resources/qml/ActionButton.qml index 905863a561..bb1abcf57e 100644 --- a/resources/qml/ActionButton.qml +++ b/resources/qml/ActionButton.qml @@ -67,6 +67,15 @@ Button anchors.verticalCenter: parent.verticalCenter } + TextMetrics + { + id: buttonTextMetrics + text: buttonText.text + font: buttonText.font + elide: buttonText.elide + elideWidth: buttonText.width + } + Label { id: buttonText @@ -124,7 +133,7 @@ Button Cura.ToolTip { id: tooltip - visible: button.hovered + visible: button.hovered && buttonTextMetrics.elidedText != buttonText.text } BusyIndicator diff --git a/resources/qml/ActionPanel/ActionPanelWidget.qml b/resources/qml/ActionPanel/ActionPanelWidget.qml index 4d61380c99..6efa77518b 100644 --- a/resources/qml/ActionPanel/ActionPanelWidget.qml +++ b/resources/qml/ActionPanel/ActionPanelWidget.qml @@ -27,7 +27,7 @@ Item width: UM.Theme.getSize("action_panel_widget").width height: childrenRect.height + 2 * UM.Theme.getSize("thick_margin").height - anchors. right: parent.right + anchors.right: parent.right color: UM.Theme.getColor("main_background") border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("lining") @@ -103,4 +103,4 @@ Item CuraApplication.additionalComponents["saveButton"][component].parent = additionalComponentsRow } } -} \ No newline at end of file +} diff --git a/resources/qml/ActionPanel/OutputProcessWidget.qml b/resources/qml/ActionPanel/OutputProcessWidget.qml index 7e76768cb4..be6d68de4f 100644 --- a/resources/qml/ActionPanel/OutputProcessWidget.qml +++ b/resources/qml/ActionPanel/OutputProcessWidget.qml @@ -100,6 +100,7 @@ Column return totalWeights + "g · " + totalLengths.toFixed(2) + "m" } source: UM.Theme.getIcon("spool") + font: UM.Theme.getFont("default") } } } diff --git a/resources/qml/ActionPanel/PrintInformationWidget.qml b/resources/qml/ActionPanel/PrintInformationWidget.qml index 2e108b05d7..097f281946 100644 --- a/resources/qml/ActionPanel/PrintInformationWidget.qml +++ b/resources/qml/ActionPanel/PrintInformationWidget.qml @@ -37,6 +37,9 @@ UM.RecolorImage opacity: opened ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 100 } } + contentWidth: printJobInformation.width + contentHeight: printJobInformation.implicitHeight + contentItem: PrintJobInformation { id: printJobInformation diff --git a/resources/qml/ActionPanel/SliceProcessWidget.qml b/resources/qml/ActionPanel/SliceProcessWidget.qml index 17021661b1..40e76826ca 100644 --- a/resources/qml/ActionPanel/SliceProcessWidget.qml +++ b/resources/qml/ActionPanel/SliceProcessWidget.qml @@ -27,15 +27,21 @@ Column property real progress: UM.Backend.progress property int backendState: UM.Backend.state + // As the collection of settings to send to the engine might take some time, we have an extra value to indicate + // That the user pressed the button but it's still waiting for the backend to acknowledge that it got it. + property bool waitingForSliceToStart: false + onBackendStateChanged: waitingForSliceToStart = false function sliceOrStopSlicing() { if (widget.backendState == UM.Backend.NotStarted) { + widget.waitingForSliceToStart = true CuraApplication.backend.forceSlice() } else { + widget.waitingForSliceToStart = false CuraApplication.backend.stopSlicing() } } @@ -94,9 +100,9 @@ Column anchors.right: parent.right anchors.left: parent.left - text: catalog.i18nc("@button", "Slice") + text: widget.waitingForSliceToStart ? catalog.i18nc("@button", "Processing"): catalog.i18nc("@button", "Slice") tooltip: catalog.i18nc("@label", "Start the slicing process") - enabled: widget.backendState != UM.Backend.Error + enabled: widget.backendState != UM.Backend.Error && !widget.waitingForSliceToStart visible: widget.backendState == UM.Backend.NotStarted || widget.backendState == UM.Backend.Error onClicked: sliceOrStopSlicing() } diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index ce9618a560..7e6afa813d 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -65,6 +65,7 @@ Item property alias about: aboutAction; property alias toggleFullScreen: toggleFullScreenAction; + property alias exitFullScreen: exitFullScreenAction property alias configureSettingVisibility: configureSettingVisibilityAction @@ -82,10 +83,18 @@ Item Action { - id:toggleFullScreenAction - shortcut: StandardKey.FullScreen; - text: catalog.i18nc("@action:inmenu", "Toggle Full Screen"); - iconName: "view-fullscreen"; + id: toggleFullScreenAction + shortcut: StandardKey.FullScreen + text: catalog.i18nc("@action:inmenu", "Toggle Full Screen") + iconName: "view-fullscreen" + } + + Action + { + id: exitFullScreenAction + shortcut: StandardKey.Cancel + text: catalog.i18nc("@action:inmenu", "Exit Full Screen") + iconName: "view-fullscreen" } Action @@ -101,7 +110,7 @@ Item Action { id: redoAction; - text: catalog.i18nc("@action:inmenu menubar:edit","&Redo"); + text: catalog.i18nc("@action:inmenu menubar:edit", "&Redo"); iconName: "edit-redo"; shortcut: StandardKey.Redo; onTriggered: UM.OperationStack.redo(); @@ -110,65 +119,65 @@ Item Action { - id: quitAction; - text: catalog.i18nc("@action:inmenu menubar:file","&Quit"); - iconName: "application-exit"; - shortcut: StandardKey.Quit; + id: quitAction + text: catalog.i18nc("@action:inmenu menubar:file","&Quit") + iconName: "application-exit" + shortcut: StandardKey.Quit } Action { - id: view3DCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","3D View"); - onTriggered: UM.Controller.rotateView("3d", 0); + id: view3DCameraAction + text: catalog.i18nc("@action:inmenu menubar:view", "3D View") + onTriggered: UM.Controller.setCameraRotation("3d", 0) } Action { - id: viewFrontCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","Front View"); - onTriggered: UM.Controller.rotateView("home", 0); + id: viewFrontCameraAction + text: catalog.i18nc("@action:inmenu menubar:view", "Front View") + onTriggered: UM.Controller.setCameraRotation("home", 0) } Action { - id: viewTopCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","Top View"); - onTriggered: UM.Controller.rotateView("y", 90); + id: viewTopCameraAction + text: catalog.i18nc("@action:inmenu menubar:view", "Top View") + onTriggered: UM.Controller.setCameraRotation("y", 90) } Action { - id: viewLeftSideCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","Left Side View"); - onTriggered: UM.Controller.rotateView("x", 90); + id: viewLeftSideCameraAction + text: catalog.i18nc("@action:inmenu menubar:view", "Left Side View") + onTriggered: UM.Controller.setCameraRotation("x", 90) } Action { - id: viewRightSideCameraAction; - text: catalog.i18nc("@action:inmenu menubar:view","Right Side View"); - onTriggered: UM.Controller.rotateView("x", -90); + id: viewRightSideCameraAction + text: catalog.i18nc("@action:inmenu menubar:view", "Right Side View") + onTriggered: UM.Controller.setCameraRotation("x", -90) } Action { - id: preferencesAction; - text: catalog.i18nc("@action:inmenu","Configure Cura..."); - iconName: "configure"; + id: preferencesAction + text: catalog.i18nc("@action:inmenu", "Configure Cura...") + iconName: "configure" } Action { - id: addMachineAction; - text: catalog.i18nc("@action:inmenu menubar:printer","&Add Printer..."); + id: addMachineAction + text: catalog.i18nc("@action:inmenu menubar:printer", "&Add Printer...") } Action { - id: settingsAction; - text: catalog.i18nc("@action:inmenu menubar:printer","Manage Pr&inters..."); - iconName: "configure"; + id: settingsAction + text: catalog.i18nc("@action:inmenu menubar:printer", "Manage Pr&inters...") + iconName: "configure" } Action diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 790a522b26..828d8854dd 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -447,7 +447,6 @@ UM.MainWindow target: Cura.Actions.addProfile onTriggered: { - preferences.show(); preferences.setPage(4); // Create a new profile after a very short delay so the preference page has time to initiate @@ -573,7 +572,13 @@ UM.MainWindow Connections { target: Cura.Actions.toggleFullScreen - onTriggered: base.toggleFullscreen(); + onTriggered: base.toggleFullscreen() + } + + Connections + { + target: Cura.Actions.exitFullScreen + onTriggered: base.exitFullscreen() } FileDialog @@ -585,7 +590,12 @@ UM.MainWindow modality: Qt.WindowModal selectMultiple: true nameFilters: UM.MeshFileHandler.supportedReadFileTypes; - folder: CuraApplication.getDefaultPath("dialog_load_path") + folder: + { + //Because several implementations of the file dialog only update the folder when it is explicitly set. + folder = CuraApplication.getDefaultPath("dialog_load_path"); + return CuraApplication.getDefaultPath("dialog_load_path"); + } onAccepted: { // Because several implementations of the file dialog only update the folder diff --git a/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml b/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml index f6436f62c5..2566a2d44c 100644 --- a/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml +++ b/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml @@ -53,7 +53,7 @@ UM.Dialog UM.Preferences.setValue("cura/choice_on_open_project", "open_as_model") } - CuraApplication.readLocalFile(base.fileUrl, true) + CuraApplication.readLocalFile(base.fileUrl, "open_as_model") var meshName = backgroundItem.getMeshName(base.fileUrl.toString()) backgroundItem.hasMesh(decodeURIComponent(meshName)) diff --git a/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml b/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml index 0df914805a..187578f12c 100644 --- a/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml +++ b/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml @@ -42,7 +42,7 @@ UM.Dialog { for (var i in fileUrls) { - CuraApplication.readLocalFile(fileUrls[i], true); + CuraApplication.readLocalFile(fileUrls[i], "open_as_model"); } var meshName = backgroundItem.getMeshName(fileUrls[0].toString()); diff --git a/resources/qml/Dialogs/WorkspaceSummaryDialog.qml b/resources/qml/Dialogs/WorkspaceSummaryDialog.qml index b8c9560b3a..dfc6e3a9ca 100644 --- a/resources/qml/Dialogs/WorkspaceSummaryDialog.qml +++ b/resources/qml/Dialogs/WorkspaceSummaryDialog.qml @@ -1,10 +1,10 @@ // Copyright (c) 2018 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.2 as UM import Cura 1.0 as Cura @@ -139,37 +139,31 @@ UM.Dialog } } } - Row - { - visible: Cura.MachineManager.hasVariantBuildplates - width: parent.width - height: childrenRect.height - Label - { - text: catalog.i18nc("@action:label", "Build plate") - width: Math.floor(scroll.width / 3) | 0 - } - Label - { - text: Cura.activeStack != null ? Cura.MachineManager.activeStack.variant.name : "" - width: Math.floor(scroll.width / 3) | 0 - } - } Repeater { width: parent.width height: childrenRect.height - model: Cura.MachineManager.currentExtruderPositions + model: Cura.MachineManager.activeMachine.extruderList delegate: Column { height: childrenRect.height width: parent.width - property string variantName: Cura.MachineManager.activeVariantNames[modelData] !== undefined ? Cura.MachineManager.activeVariantNames[modelData]: "" - property string materialName: Cura.MachineManager.getExtruder(modelData).material.name !== undefined ? Cura.MachineManager.getExtruder(modelData).material.name : "" + property string variantName: + { + var extruder = modelData + var variant_name = extruder.variant.name + return (variant_name !== undefined) ? variant_name : "" + } + property string materialName: + { + var extruder = modelData + var material_name = extruder.material.name + return (material_name !== undefined) ? material_name : "" + } Label { text: { - var extruder = Number(modelData) + var extruder = Number(modelData.position) var extruder_id = "" if(!isNaN(extruder)) { @@ -177,7 +171,7 @@ UM.Dialog } else { - extruder_id = modelData + extruder_id = modelData.position } return catalog.i18nc("@action:label", "Extruder %1").arg(extruder_id) @@ -256,6 +250,23 @@ UM.Dialog width: Math.floor(scroll.width / 3) | 0 } } + + // Intent + Row + { + width: parent.width + height: childrenRect.height + Label + { + text: catalog.i18nc("@action:label", "Intent") + width: Math.floor(scroll.width / 3) | 0 + } + Label + { + text: Cura.MachineManager.activeIntentCategory + width: Math.floor(scroll.width / 3) | 0 + } + } } } } diff --git a/resources/qml/ExpandablePopup.qml b/resources/qml/ExpandablePopup.qml index 2d2665373e..18255939ab 100644 --- a/resources/qml/ExpandablePopup.qml +++ b/resources/qml/ExpandablePopup.qml @@ -225,6 +225,7 @@ Item border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("lining") radius: UM.Theme.getSize("default_radius").width + height: contentItem.implicitHeight || content.height } contentItem: Item {} diff --git a/resources/qml/IconWithText.qml b/resources/qml/IconWithText.qml index 24b6dc7fe2..b9fe873b25 100644 --- a/resources/qml/IconWithText.qml +++ b/resources/qml/IconWithText.qml @@ -19,6 +19,7 @@ Item property alias color: label.color property alias text: label.text property alias font: label.font + property alias elide: label.elide property real margin: UM.Theme.getSize("narrow_margin").width // These properties can be used in combination with layouts. diff --git a/resources/qml/LabelBar.qml b/resources/qml/LabelBar.qml new file mode 100644 index 0000000000..007c5f1f54 --- /dev/null +++ b/resources/qml/LabelBar.qml @@ -0,0 +1,65 @@ +// 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 QtQuick.Layouts 1.3 + +import UM 1.2 as UM + +// The labelBar shows a set of labels that are evenly spaced from one another. +// The first item is aligned to the left, the last is aligned to the right. +// It's intended to be used together with RadioCheckBar. As such, it needs +// to know what the used itemSize is, so it can ensure the labels are aligned correctly. +Item +{ + id: base + property var model: null + property string modelKey: "" + property int itemSize: 14 + height: childrenRect.height + RowLayout + { + anchors.left: parent.left + anchors.right: parent.right + spacing: 0 + Repeater + { + id: repeater + model: base.model + + Item + { + Layout.fillWidth: true + Layout.maximumWidth: Math.round(index + 1 === repeater.count || repeater.count <= 1 ? itemSize : base.width / (repeater.count - 1)) + height: label.height + + Label + { + id: label + text: model[modelKey] + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + height: contentHeight + anchors + { + // Some magic to ensure that the items are aligned properly. + // We want the following: + // First item should be aligned to the left, no margin. + // Last item should be aligned to the right, no margin. + // The middle item(s) should be aligned to the center of the "item" it's showing (hence half the itemsize as offset). + // We want the center of the label to align with the center of the item, so we negatively offset by half the contentWidth + right: index + 1 === repeater.count ? parent.right: undefined + left: index + 1 === repeater.count || index === 0 ? undefined: parent.left + leftMargin: Math.round((itemSize - contentWidth) * 0.5) + + // For some reason, the last label in the row gets misaligned with Qt 5.10. This lines seems to + // fix it. + verticalCenter: parent.verticalCenter + } + } + } + } + } +} diff --git a/resources/qml/MachineSettings/NumericTextFieldWithUnit.qml b/resources/qml/MachineSettings/NumericTextFieldWithUnit.qml index 5921a39933..9898fb2c6b 100644 --- a/resources/qml/MachineSettings/NumericTextFieldWithUnit.qml +++ b/resources/qml/MachineSettings/NumericTextFieldWithUnit.qml @@ -35,6 +35,7 @@ UM.TooltipArea property alias labelWidth: fieldLabel.width property alias unitText: unitLabel.text + property alias textField: textFieldWithUnit property alias valueText: textFieldWithUnit.text property alias valueValidator: textFieldWithUnit.validator property alias editingFinishedFunction: textFieldWithUnit.editingFinishedFunction @@ -43,6 +44,8 @@ UM.TooltipArea // whether negative value is allowed. This affects the validation of the input field. property bool allowNegativeValue: false + // whether positive value is allowed. This affects the validation of the input field. + property bool allowPositiveValue: true // callback functions property var afterOnEditingFinishedFunction: dummy_func @@ -65,7 +68,7 @@ UM.TooltipArea anchors.left: parent.left anchors.verticalCenter: textFieldWithUnit.verticalCenter visible: text != "" - font: UM.Theme.getFont("medium") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") renderType: Text.NativeRendering } @@ -153,7 +156,13 @@ UM.TooltipArea const value = propertyProvider.properties.value return value ? value : "" } - validator: RegExpValidator { regExp: allowNegativeValue ? /-?[0-9\.,]{0,6}/ : /[0-9\.,]{0,6}/ } + validator: DoubleValidator + { + bottom: allowNegativeValue ? Number.NEGATIVE_INFINITY : 0 + top: allowPositiveValue ? Number.POSITIVE_INFINITY : 0 + decimals: 6 + notation: DoubleValidator.StandardNotation + } onEditingFinished: editingFinishedFunction() diff --git a/resources/qml/MachineSettings/PrintHeadMinMaxTextField.qml b/resources/qml/MachineSettings/PrintHeadMinMaxTextField.qml index 2eaaed4524..1bbdb3c5c5 100644 --- a/resources/qml/MachineSettings/PrintHeadMinMaxTextField.qml +++ b/resources/qml/MachineSettings/PrintHeadMinMaxTextField.qml @@ -24,10 +24,10 @@ import Cura 1.1 as Cura // NumericTextFieldWithUnit { - id: machineXMaxField + id: printerHeadMinMaxField UM.I18nCatalog { id: catalog; name: "cura" } - containerStackId: Cura.MachineManager.activeMachineId + containerStackId: Cura.MachineManager.activeMachine.id settingKey: "machine_head_with_fans_polygon" settingStoreIndex: 1 @@ -43,31 +43,48 @@ NumericTextFieldWithUnit { result = func(result, polygon[i][item]) } - result = Math.abs(result) return result } - valueValidator: RegExpValidator { regExp: /[0-9\.,]{0,6}/ } + valueValidator: DoubleValidator { + bottom: allowNegativeValue ? Number.NEGATIVE_INFINITY : 0 + top: allowPositiveValue ? Number.POSITIVE_INFINITY : 0 + decimals: 6 + notation: DoubleValidator.StandardNotation + } + valueText: axisValue + Connections + { + target: textField + onActiveFocusChanged: + { + // When this text field loses focus and the entered text is not valid, make sure to recreate the binding to + // show the correct value. + if (!textField.activeFocus && !textField.acceptableInput) + { + valueText = Qt.binding(function() { return printerHeadMinMaxField.axisValue }) + } + } + } + editingFinishedFunction: function() { var polygon = JSON.parse(propertyProvider.properties.value) - var newValue = parseFloat(valueText.replace(',', '.')) + if (axisName == "x") // x min/x max { var start_i1 = (axisMinOrMax == "min") ? 0 : 2 - var factor = (axisMinOrMax == "min") ? -1 : 1 - polygon[start_i1][0] = newValue * factor - polygon[start_i1 + 1][0] = newValue * factor + polygon[start_i1][0] = newValue + polygon[start_i1 + 1][0] = newValue } else // y min/y max { var start_i1 = (axisMinOrMax == "min") ? 1 : 0 - var factor = (axisMinOrMax == "min") ? -1 : 1 - polygon[start_i1][1] = newValue * factor - polygon[start_i1 + 2][1] = newValue * factor + polygon[start_i1][1] = newValue + polygon[start_i1 + 2][1] = newValue } var polygon_string = JSON.stringify(polygon) if (polygon_string != propertyProvider.properties.value) @@ -75,5 +92,8 @@ NumericTextFieldWithUnit propertyProvider.setPropertyValue("value", polygon_string) forceUpdateOnChangeFunction() } + + // Recreate the binding to show the correct value. + valueText = Qt.binding(function() { return axisValue }) } } diff --git a/resources/qml/MainWindow/MainWindowHeader.qml b/resources/qml/MainWindow/MainWindowHeader.qml index 43ec03d947..5d1a20c8b1 100644 --- a/resources/qml/MainWindow/MainWindowHeader.qml +++ b/resources/qml/MainWindow/MainWindowHeader.qml @@ -55,6 +55,7 @@ Item delegate: Button { + id: stageSelectorButton text: model.name.toUpperCase() checkable: true checked: UM.Controller.activeStage !== null && model.id == UM.Controller.activeStage.stageId diff --git a/resources/qml/Menus/BuildplateMenu.qml b/resources/qml/Menus/BuildplateMenu.qml deleted file mode 100644 index b924aa0879..0000000000 --- a/resources/qml/Menus/BuildplateMenu.qml +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 1.4 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -Menu -{ - id: menu - title: "Build plate" - - property var buildPlateModel: CuraApplication.getBuildPlateModel() - - Instantiator - { - model: menu.buildPlateModel - - MenuItem { - text: model.name - checkable: true - checked: model.name == Cura.MachineManager.globalVariantName - exclusiveGroup: group - onTriggered: { - Cura.MachineManager.setGlobalVariant(model.container_node); - } - } - - onObjectAdded: menu.insertItem(index, object) - onObjectRemoved: menu.removeItem(object) - } - - ExclusiveGroup { id: group } -} diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml index afb3aba82b..b47d77243c 100644 --- a/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml +++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml @@ -107,8 +107,9 @@ Item Cura.PrinterTypeLabel { id: printerTypeLabel - text: Cura.MachineManager.getAbbreviatedMachineName(section) + text: section anchors.verticalCenter: parent.verticalCenter //One default margin above and one below. + autoFit: true } } diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml index 77164429b3..f0ada92810 100644 --- a/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml +++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml @@ -1,8 +1,8 @@ // 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.0 +import QtQuick 2.10 +import QtQuick.Controls 2.3 import QtQuick.Controls.Styles 1.4 import UM 1.2 as UM @@ -32,7 +32,7 @@ Cura.ExpandablePopup } contentPadding: UM.Theme.getSize("default_lining").width - enabled: Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariants || Cura.MachineManager.hasVariantBuildplates; //Only let it drop down if there is any configuration that you could change. + enabled: Cura.MachineManager.activeMachine.hasMaterials || Cura.MachineManager.activeMachine.hasVariants || Cura.MachineManager.activeMachine.hasVariantBuildplates; //Only let it drop down if there is any configuration that you could change. headerItem: Item { @@ -44,7 +44,7 @@ Cura.ExpandablePopup orientation: ListView.Horizontal anchors.fill: parent model: extrudersModel - visible: Cura.MachineManager.hasMaterials + visible: Cura.MachineManager.activeMachine.hasMaterials delegate: Item { @@ -86,7 +86,7 @@ Cura.ExpandablePopup { id: variantLabel - visible: Cura.MachineManager.hasVariants + visible: Cura.MachineManager.activeMachine.hasVariants text: model.variant elide: Text.ElideRight @@ -99,12 +99,14 @@ Cura.ExpandablePopup left: extruderIcon.right leftMargin: UM.Theme.getSize("default_margin").width top: typeAndBrandNameLabel.bottom + right: parent.right + rightMargin: UM.Theme.getSize("default_margin").width } } } } - //Placeholder text if there is a configuration to select but no materials (so we can't show the materials per extruder). + // Placeholder text if there is a configuration to select but no materials (so we can't show the materials per extruder). Label { text: catalog.i18nc("@label", "Select configuration") @@ -113,7 +115,7 @@ Cura.ExpandablePopup color: UM.Theme.getColor("text") renderType: Text.NativeRendering - visible: !Cura.MachineManager.hasMaterials && (Cura.MachineManager.hasVariants || Cura.MachineManager.hasVariantBuildplates) + visible: !Cura.MachineManager.activeMachine.hasMaterials && (Cura.MachineManager.activeMachine.hasVariants || Cura.MachineManager.activeMachine.hasVariantBuildplates) anchors { @@ -138,7 +140,7 @@ Cura.ExpandablePopup onVisibleChanged: { - is_connected = Cura.MachineManager.activeMachineHasRemoteConnection && Cura.MachineManager.printerConnected && Cura.MachineManager.printerOutputDevices[0].uniqueConfigurations.length > 0 //Re-evaluate. + is_connected = Cura.MachineManager.activeMachine.hasRemoteConnection && Cura.MachineManager.printerConnected && Cura.MachineManager.printerOutputDevices[0].uniqueConfigurations.length > 0 //Re-evaluate. // If the printer is not connected or does not have configurations, we switch always to the custom mode. If is connected instead, the auto mode // or the previous state is selected diff --git a/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml b/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml index 6f3d6ffa17..65f5bcce8c 100644 --- a/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml +++ b/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml @@ -221,6 +221,7 @@ Item OldControls.CheckBox { + id: enabledCheckbox checked: Cura.MachineManager.activeStack != null ? Cura.MachineManager.activeStack.isEnabled : false enabled: !checked || Cura.MachineManager.numberExtrudersEnabled > 1 //Disable if it's the last enabled extruder. height: parent.height @@ -243,7 +244,7 @@ Item Row { height: visible ? UM.Theme.getSize("print_setup_big_item").height : 0 - visible: Cura.MachineManager.hasMaterials + visible: Cura.MachineManager.activeMachine.hasMaterials Label { @@ -265,6 +266,7 @@ Item text: Cura.MachineManager.activeStack !== null ? Cura.MachineManager.activeStack.material.name : "" tooltip: text + enabled: enabledCheckbox.checked width: selectors.controlWidth height: parent.height @@ -303,7 +305,7 @@ Item Row { height: visible ? UM.Theme.getSize("print_setup_big_item").height : 0 - visible: Cura.MachineManager.hasVariants + visible: Cura.MachineManager.activeMachine.hasVariants Label { @@ -324,7 +326,8 @@ Item height: parent.height width: selectors.controlWidth style: UM.Theme.styles.print_setup_header_button - activeFocusOnPress: true; + activeFocusOnPress: true + enabled: enabledCheckbox.checked menu: Cura.NozzleMenu { extruderIndex: Cura.ExtruderManager.activeExtruderIndex } } diff --git a/resources/qml/Menus/FileMenu.qml b/resources/qml/Menus/FileMenu.qml index 955ac89693..df58ea6636 100644 --- a/resources/qml/Menus/FileMenu.qml +++ b/resources/qml/Menus/FileMenu.qml @@ -29,6 +29,7 @@ Menu MenuItem { id: saveWorkspaceMenu + shortcut: StandardKey.Save text: catalog.i18nc("@title:menu menubar:file", "&Save...") onTriggered: { diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index ba35a160ba..edc5ee1e0d 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -14,7 +14,11 @@ Menu property int extruderIndex: 0 property string currentRootMaterialId: Cura.MachineManager.currentRootMaterialId[extruderIndex] - property string activeMaterialId: Cura.MachineManager.allActiveMaterialIds[Cura.ExtruderManager.extruderIds[extruderIndex]] + property string activeMaterialId: + { + var extruder = Cura.MachineManager.activeMachine.extruderList[extruderIndex] + return (extruder === undefined) ? "" : extruder.material.id + } property bool updateModels: true Cura.FavoriteMaterialsModel { @@ -50,12 +54,13 @@ Menu { text: model.brand + " " + model.name checkable: true + enabled: Cura.MachineManager.activeMachine.extruderList[extruderIndex].isEnabled checked: model.root_material_id === menu.currentRootMaterialId onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node) - exclusiveGroup: group + exclusiveGroup: favoriteGroup // One favorite and one item from the others can be active at the same time. } onObjectAdded: menu.insertItem(index, object) - onObjectRemoved: menu.removeItem(object) // TODO: This ain't gonna work, removeItem() takes an index, not object + onObjectRemoved: menu.removeItem(index) } MenuSeparator {} @@ -72,12 +77,17 @@ Menu { text: model.name checkable: true + enabled: + { + var extruder = Cura.MachineManager.activeMachine.extruderList[extruderIndex] + return (extruder === undefined) ? false : extruder.isEnabled + } checked: model.root_material_id === menu.currentRootMaterialId exclusiveGroup: group onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node) } onObjectAdded: genericMenu.insertItem(index, object) - onObjectRemoved: genericMenu.removeItem(object) // TODO: This ain't gonna work, removeItem() takes an index, not object + onObjectRemoved: genericMenu.removeItem(index) } } @@ -110,6 +120,11 @@ Menu { text: model.name checkable: true + enabled: + { + var extruder = Cura.MachineManager.activeMachine.extruderList[extruderIndex] + return (extruder === undefined) ? false : extruder.isEnabled + } checked: model.id === menu.activeMaterialId exclusiveGroup: group onTriggered: Cura.MachineManager.setMaterial(extruderIndex, model.container_node) @@ -126,10 +141,16 @@ Menu onObjectRemoved: menu.removeItem(object) } - ExclusiveGroup { + ExclusiveGroup + { id: group } + ExclusiveGroup + { + id: favoriteGroup + } + MenuSeparator {} MenuItem diff --git a/resources/qml/Menus/NozzleMenu.qml b/resources/qml/Menus/NozzleMenu.qml index 886216dab0..2734e40489 100644 --- a/resources/qml/Menus/NozzleMenu.qml +++ b/resources/qml/Menus/NozzleMenu.qml @@ -1,7 +1,7 @@ // Copyright (c) 2017 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import UM 1.2 as UM @@ -28,9 +28,15 @@ Menu text: model.hotend_name checkable: true checked: { - return Cura.MachineManager.activeVariantNames[extruderIndex] == model.hotend_name + var extruder = Cura.MachineManager.activeMachine.extruderList[extruderIndex] + return (extruder === undefined) ? false : (extruder.variant.name == model.hotend_name) } exclusiveGroup: group + enabled: + { + var extruder = Cura.MachineManager.activeMachine.extruderList[extruderIndex] + return (extruder === undefined) ? false : extruder.isEnabled + } onTriggered: { Cura.MachineManager.setVariant(menu.extruderIndex, model.container_node); } diff --git a/resources/qml/Menus/ProfileMenu.qml b/resources/qml/Menus/ProfileMenu.qml deleted file mode 100644 index 68260f2502..0000000000 --- a/resources/qml/Menus/ProfileMenu.qml +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 1.4 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -Menu -{ - id: menu - - Instantiator - { - model: Cura.QualityProfilesDropDownMenuModel - - MenuItem - { - text: - { - var full_text = (model.layer_height != "") ? model.name + " - " + model.layer_height + model.layer_height_unit : model.name - full_text += model.is_experimental ? " - " + catalog.i18nc("@label", "Experimental") : "" - return full_text - } - checkable: true - checked: Cura.MachineManager.activeQualityOrQualityChangesName == model.name - exclusiveGroup: group - onTriggered: Cura.MachineManager.setQualityGroup(model.quality_group) - visible: model.available - } - - onObjectAdded: menu.insertItem(index, object) - onObjectRemoved: menu.removeItem(object) - } - - MenuSeparator - { - id: customSeparator - visible: Cura.CustomQualityProfilesDropDownMenuModel.count > 0 - } - - Instantiator - { - id: customProfileInstantiator - model: Cura.CustomQualityProfilesDropDownMenuModel - - Connections - { - target: Cura.CustomQualityProfilesDropDownMenuModel - onModelReset: customSeparator.visible = Cura.CustomQualityProfilesDropDownMenuModel.count > 0 - } - - MenuItem - { - text: model.name - checkable: true - checked: Cura.MachineManager.activeQualityOrQualityChangesName == model.name - exclusiveGroup: group - onTriggered: Cura.MachineManager.setQualityChangesGroup(model.quality_changes_group) - } - - onObjectAdded: - { - customSeparator.visible = model.count > 0; - menu.insertItem(index, object); - } - onObjectRemoved: - { - customSeparator.visible = model.count > 0; - menu.removeItem(object); - } - } - - ExclusiveGroup { id: group; } - - MenuSeparator { id: profileMenuSeparator } - - MenuItem { action: Cura.Actions.addProfile } - MenuItem { action: Cura.Actions.updateProfile } - MenuItem { action: Cura.Actions.resetProfile } - MenuSeparator { } - MenuItem { action: Cura.Actions.manageProfiles } -} diff --git a/resources/qml/Menus/RecentFilesMenu.qml b/resources/qml/Menus/RecentFilesMenu.qml index 0f1f67b6fa..b788b5e72e 100644 --- a/resources/qml/Menus/RecentFilesMenu.qml +++ b/resources/qml/Menus/RecentFilesMenu.qml @@ -29,42 +29,8 @@ Menu } onTriggered: { - var toShowDialog = false; - var toOpenAsProject = false; - var toOpenAsModel = false; + CuraApplication.readLocalFile(modelData); - if (CuraApplication.checkIsValidProjectFile(modelData)) { - // check preference - var choice = UM.Preferences.getValue("cura/choice_on_open_project"); - - if (choice == "open_as_project") - { - toOpenAsProject = true; - }else if (choice == "open_as_model"){ - toOpenAsModel = true; - }else{ - toShowDialog = true; - } - } - else { - toOpenAsModel = true; - } - - if (toShowDialog) { - askOpenAsProjectOrModelsDialog.fileUrl = modelData; - askOpenAsProjectOrModelsDialog.show(); - return; - } - - // open file in the prefered way - if (toOpenAsProject) - { - UM.WorkspaceFileHandler.readLocalFile(modelData); - } - else if (toOpenAsModel) - { - CuraApplication.readLocalFile(modelData, true); - } var meshName = backgroundItem.getMeshName(modelData.toString()) backgroundItem.hasMesh(decodeURIComponent(meshName)) } diff --git a/resources/qml/Menus/SettingsMenu.qml b/resources/qml/Menus/SettingsMenu.qml index f1f594f395..0afbccd5ca 100644 --- a/resources/qml/Menus/SettingsMenu.qml +++ b/resources/qml/Menus/SettingsMenu.qml @@ -15,25 +15,20 @@ Menu PrinterMenu { title: catalog.i18nc("@title:menu menubar:settings", "&Printer") } property var activeMachine: Cura.MachineManager.activeMachine - - onAboutToShow: extruderInstantiator.active = true - onAboutToHide: extruderInstantiator.active = false Instantiator { id: extruderInstantiator model: activeMachine == null ? null : activeMachine.extruderList - active: false - asynchronous: true Menu { title: modelData.name - - NozzleMenu { title: Cura.MachineManager.activeDefinitionVariantsName; visible: Cura.MachineManager.hasVariants; extruderIndex: index } - MaterialMenu { title: catalog.i18nc("@title:menu", "&Material"); visible: Cura.MachineManager.hasMaterials; extruderIndex: index } + property var extruder: Cura.MachineManager.activeMachine.extruderList[model.index] + NozzleMenu { title: Cura.MachineManager.activeDefinitionVariantsName; visible: Cura.MachineManager.activeMachine.hasVariants; extruderIndex: index } + MaterialMenu { title: catalog.i18nc("@title:menu", "&Material"); visible: Cura.MachineManager.activeMachine.hasMaterials; extruderIndex: index } MenuSeparator { - visible: Cura.MachineManager.hasVariants || Cura.MachineManager.hasMaterials + visible: Cura.MachineManager.activeMachine.hasVariants || Cura.MachineManager.activeMachine.hasMaterials } MenuItem @@ -46,14 +41,14 @@ Menu { text: catalog.i18nc("@action:inmenu", "Enable Extruder") onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, true) - visible: !Cura.MachineManager.getExtruder(model.index).isEnabled + visible: extruder === null ? false : !extruder.isEnabled } MenuItem { text: catalog.i18nc("@action:inmenu", "Disable Extruder") - onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, false) - visible: Cura.MachineManager.getExtruder(model.index).isEnabled + onTriggered: Cura.MachineManager.setExtruderEnabled(index, false) + visible: extruder === null ? false : extruder.isEnabled enabled: Cura.MachineManager.numberExtrudersEnabled > 1 } @@ -62,14 +57,6 @@ Menu onObjectRemoved: base.removeItem(object) } - // TODO Only show in dev mode. Remove check when feature ready - BuildplateMenu - { - title: catalog.i18nc("@title:menu", "&Build plate") - visible: CuraSDKVersion == "dev" && Cura.MachineManager.hasVariantBuildplates - } - ProfileMenu { title: catalog.i18nc("@title:settings", "&Profile") } - MenuSeparator { } MenuItem { action: Cura.Actions.configureSettingVisibility } diff --git a/resources/qml/Menus/ViewMenu.qml b/resources/qml/Menus/ViewMenu.qml index 59e6dd24d0..a4ded0980c 100644 --- a/resources/qml/Menus/ViewMenu.qml +++ b/resources/qml/Menus/ViewMenu.qml @@ -24,6 +24,51 @@ Menu MenuItem { action: Cura.Actions.viewRightSideCamera; } } + Menu + { + id: cameraViewMenu + property string cameraMode: UM.Preferences.getValue("general/camera_perspective_mode") + Connections + { + target: UM.Preferences + onPreferenceChanged: + { + if (preference !== "general/camera_perspective_mode") + { + return + } + cameraViewMenu.cameraMode = UM.Preferences.getValue("general/camera_perspective_mode") + } + } + + title: catalog.i18nc("@action:inmenu menubar:view","Camera view") + MenuItem + { + text: catalog.i18nc("@action:inmenu menubar:view", "Perspective") + checkable: true + checked: cameraViewMenu.cameraMode == "perspective" + onTriggered: + { + UM.Preferences.setValue("general/camera_perspective_mode", "perspective") + checked = cameraViewMenu.cameraMode == "perspective" + } + exclusiveGroup: group + } + MenuItem + { + text: catalog.i18nc("@action:inmenu menubar:view", "Orthographic") + checkable: true + checked: cameraViewMenu.cameraMode == "orthographic" + onTriggered: + { + UM.Preferences.setValue("general/camera_perspective_mode", "orthographic") + checked = cameraViewMenu.cameraMode == "orthographic" + } + exclusiveGroup: group + } + ExclusiveGroup { id: group } + } + MenuSeparator { visible: UM.Preferences.getValue("cura/use_multi_build_plate") diff --git a/resources/qml/ObjectItemButton.qml b/resources/qml/ObjectItemButton.qml index 683d0ed52b..b454fd929a 100644 --- a/resources/qml/ObjectItemButton.qml +++ b/resources/qml/ObjectItemButton.qml @@ -51,5 +51,21 @@ Button border.color: objectItemButton.checked ? UM.Theme.getColor("primary") : "transparent" } + TextMetrics + { + id: buttonTextMetrics + text: buttonText.text + font: buttonText.font + elide: buttonText.elide + elideWidth: buttonText.width + } + + Cura.ToolTip + { + id: tooltip + tooltipText: objectItemButton.text + visible: objectItemButton.hovered && buttonTextMetrics.elidedText != buttonText.text + } + onClicked: Cura.SceneController.changeSelection(index) } diff --git a/resources/qml/ObjectSelector.qml b/resources/qml/ObjectSelector.qml index 3b7f3455b3..6757863e1c 100644 --- a/resources/qml/ObjectSelector.qml +++ b/resources/qml/ObjectSelector.qml @@ -13,6 +13,13 @@ Item width: UM.Theme.getSize("objects_menu_size").width property bool opened: UM.Preferences.getValue("cura/show_list_of_objects") + // Eat up all the mouse events (we don't want the scene to react or have the scene context menu showing up) + MouseArea + { + anchors.fill: parent + acceptedButtons: Qt.AllButtons + } + Button { id: openCloseButton @@ -71,7 +78,7 @@ Item id: contents width: parent.width visible: objectSelector.opened - height: visible ? scroll.height : 0 + height: visible ? listView.height : 0 color: UM.Theme.getColor("main_background") border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("lining") @@ -80,40 +87,39 @@ Item anchors.bottom: parent.bottom - ScrollView + ListView { - id: scroll - width: parent.width + id: listView clip: true - padding: UM.Theme.getSize("default_lining").width - - contentItem: ListView + anchors { - id: listView + left: parent.left + right: parent.right + margins: UM.Theme.getSize("default_lining").width + } - // Can't use parent.width since the parent is the flickable component and not the ScrollView - width: scroll.width - scroll.leftPadding - scroll.rightPadding - property real maximumHeight: UM.Theme.getSize("objects_menu_size").height + ScrollBar.vertical: ScrollBar + { + hoverEnabled: true + } - // We use an extra property here, since we only want to to be informed about the content size changes. - onContentHeightChanged: + property real maximumHeight: UM.Theme.getSize("objects_menu_size").height + + height: Math.min(contentHeight, maximumHeight) + + model: Cura.ObjectsModel {} + + delegate: ObjectItemButton + { + id: modelButton + Binding { - scroll.height = Math.min(contentHeight, maximumHeight) + scroll.topPadding + scroll.bottomPadding - } - - Component.onCompleted: - { - scroll.height = Math.min(contentHeight, maximumHeight) + scroll.topPadding + scroll.bottomPadding - } - model: Cura.ObjectsModel {} - - delegate: ObjectItemButton - { - text: model.name - width: listView.width - - checked: model.selected + target: modelButton + property: "checked" + value: model.selected } + text: model.name + width: listView.width } } } diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 47cc11632c..e3e5062049 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -94,6 +94,12 @@ UM.PreferencesPage zoomToMouseCheckbox.checked = boolCheck(UM.Preferences.getValue("view/zoom_to_mouse")) UM.Preferences.resetPreference("view/top_layer_count"); topLayerCountCheckbox.checked = boolCheck(UM.Preferences.getValue("view/top_layer_count")) + UM.Preferences.resetPreference("general/restore_window_geometry") + restoreWindowPositionCheckbox.checked = boolCheck(UM.Preferences.getValue("general/restore_window_geometry")) + + UM.Preferences.resetPreference("general/camera_perspective_mode") + var defaultCameraMode = UM.Preferences.getValue("general/camera_perspective_mode") + setDefaultCameraMode(defaultCameraMode) UM.Preferences.resetPreference("cura/choice_on_profile_override") setDefaultDiscardOrKeepProfile(UM.Preferences.getValue("cura/choice_on_profile_override")) @@ -154,7 +160,7 @@ UM.PreferencesPage append({ text: "日本語", code: "ja_JP" }) append({ text: "한국어", code: "ko_KR" }) append({ text: "Nederlands", code: "nl_NL" }) - append({ text: "Polski", code: "pl_PL" }) + //Polish is disabled for being incomplete: append({ text: "Polski", code: "pl_PL" }) append({ text: "Português do Brasil", code: "pt_BR" }) append({ text: "Português", code: "pt_PT" }) append({ text: "Русский", code: "ru_RU" }) @@ -330,7 +336,8 @@ UM.PreferencesPage } } - UM.TooltipArea { + UM.TooltipArea + { width: childrenRect.width; height: childrenRect.height; text: catalog.i18nc("@info:tooltip", "Moves the camera so the model is in the center of the view when a model is selected") @@ -344,7 +351,8 @@ UM.PreferencesPage } } - UM.TooltipArea { + UM.TooltipArea + { width: childrenRect.width; height: childrenRect.height; text: catalog.i18nc("@info:tooltip", "Should the default zoom behavior of cura be inverted?") @@ -354,7 +362,13 @@ UM.PreferencesPage id: invertZoomCheckbox text: catalog.i18nc("@action:button", "Invert the direction of camera zoom."); checked: boolCheck(UM.Preferences.getValue("view/invert_zoom")) - onClicked: UM.Preferences.setValue("view/invert_zoom", checked) + onClicked: { + if(!checked && zoomToMouseCheckbox.checked) //Fix for Github issue Ultimaker/Cura#6490: Make sure the camera origin is in front when unchecking. + { + UM.Controller.setCameraOrigin("home"); + } + UM.Preferences.setValue("view/invert_zoom", checked); + } } } @@ -362,14 +376,30 @@ UM.PreferencesPage { width: childrenRect.width; height: childrenRect.height; - text: catalog.i18nc("@info:tooltip", "Should zooming move in the direction of the mouse?") + text: zoomToMouseCheckbox.enabled ? catalog.i18nc("@info:tooltip", "Should zooming move in the direction of the mouse?") : catalog.i18nc("@info:tooltip", "Zooming towards the mouse is not supported in the orthographic perspective.") CheckBox { id: zoomToMouseCheckbox - text: catalog.i18nc("@action:button", "Zoom toward mouse direction"); - checked: boolCheck(UM.Preferences.getValue("view/zoom_to_mouse")) + text: catalog.i18nc("@action:button", "Zoom toward mouse direction") + checked: boolCheck(UM.Preferences.getValue("view/zoom_to_mouse")) && zoomToMouseCheckbox.enabled onClicked: UM.Preferences.setValue("view/zoom_to_mouse", checked) + enabled: UM.Preferences.getValue("general/camera_perspective_mode") !== "orthogonal" + } + + //Because there is no signal for individual preferences, we need to manually link to the onPreferenceChanged signal. + Connections + { + target: UM.Preferences + onPreferenceChanged: + { + if(preference != "general/camera_perspective_mode") + { + return; + } + zoomToMouseCheckbox.enabled = UM.Preferences.getValue("general/camera_perspective_mode") !== "orthographic"; + zoomToMouseCheckbox.checked = boolCheck(UM.Preferences.getValue("view/zoom_to_mouse")) && zoomToMouseCheckbox.enabled; + } } } @@ -436,6 +466,65 @@ UM.PreferencesPage } } + UM.TooltipArea + { + width: childrenRect.width + height: childrenRect.height + text: catalog.i18nc("@info:tooltip", "Should Cura open at the location it was closed?") + + CheckBox + { + id: restoreWindowPositionCheckbox + text: catalog.i18nc("@option:check", "Restore window position on start") + checked: boolCheck(UM.Preferences.getValue("general/restore_window_geometry")) + onCheckedChanged: UM.Preferences.setValue("general/restore_window_geometry", checked) + } + } + + UM.TooltipArea + { + width: childrenRect.width + height: childrenRect.height + text: catalog.i18nc("@info:tooltip", "What type of camera rendering should be used?") + Column + { + spacing: 4 * screenScaleFactor + + Label + { + text: catalog.i18nc("@window:text", "Camera rendering:") + } + ComboBox + { + id: cameraComboBox + + model: ListModel + { + id: comboBoxList + + Component.onCompleted: { + append({ text: catalog.i18n("Perspective"), code: "perspective" }) + append({ text: catalog.i18n("Orthographic"), code: "orthographic" }) + } + } + + currentIndex: + { + var code = UM.Preferences.getValue("general/camera_perspective_mode"); + for(var i = 0; i < comboBoxList.count; ++i) + { + if(model.get(i).code == code) + { + return i + } + } + return 0 + } + onActivated: UM.Preferences.setValue("general/camera_perspective_mode", model.get(index).code) + } + } + } + Item { //: Spacer @@ -695,6 +784,7 @@ UM.PreferencesPage } } + /* Multi-buildplate functionality is disabled because it's broken. See CURA-4975 for the ticket to remove it. Item { //: Spacer @@ -721,7 +811,7 @@ UM.PreferencesPage checked: boolCheck(UM.Preferences.getValue("cura/use_multi_build_plate")) onCheckedChanged: UM.Preferences.setValue("cura/use_multi_build_plate", checked) } - } + }*/ Connections { diff --git a/resources/qml/Preferences/MachinesPage.qml b/resources/qml/Preferences/MachinesPage.qml index 594cdbebf3..39789cd192 100644 --- a/resources/qml/Preferences/MachinesPage.qml +++ b/resources/qml/Preferences/MachinesPage.qml @@ -84,7 +84,7 @@ UM.ManagementPage Flow { id: machineActions - visible: currentItem && currentItem.id == Cura.MachineManager.activeMachineId + visible: currentItem && currentItem.id == Cura.MachineManager.activeMachine.id anchors.left: parent.left anchors.right: parent.right anchors.top: machineName.bottom diff --git a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml index 487c87f07c..5dd68c426f 100644 --- a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml @@ -10,6 +10,8 @@ import QtQuick.Dialogs 1.2 import UM 1.2 as UM import Cura 1.0 as Cura +// An expandable list of materials. Includes both the header (this file) and the items (brandMaterialList) + Item { id: brand_section @@ -50,9 +52,8 @@ Item verticalAlignment: Text.AlignVCenter leftPadding: (UM.Theme.getSize("default_margin").width / 2) | 0 } - Button + Item { - text: "" implicitWidth: UM.Theme.getSize("favorites_button").width implicitHeight: UM.Theme.getSize("favorites_button").height UM.RecolorImage @@ -67,10 +68,6 @@ Item color: "black" source: brand_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") } - style: ButtonStyle - { - background: Item { } - } } } MouseArea @@ -99,7 +96,7 @@ Item id: brandMaterialList anchors.top: brand_header.bottom width: parent.width - anchors.left: parent.left + anchors.left: parent ? parent.left : undefined height: brand_section.expanded ? childrenRect.height : 0 visible: brand_section.expanded @@ -109,7 +106,7 @@ Item delegate: Loader { id: loader - width: parent.width + width: parent ? parent.width : 0 property var element: model sourceComponent: hasMaterialTypes ? materialsTypeSection : materialSlot } diff --git a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml index eb4a63250f..e821dfb955 100644 --- a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml +++ b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml @@ -64,8 +64,10 @@ Item height: childrenRect.height Label { + width: parent.width text: materialProperties.name font: UM.Theme.getFont("large_bold") + elide: Text.ElideRight } } @@ -82,6 +84,7 @@ Item } editingEnabled: currentItem != null && !currentItem.is_read_only + onResetSelectedMaterial: base.resetExpandedActiveMaterial() properties: materialProperties containerId: currentItem != null ? currentItem.id : "" diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index fa7c4b86cb..8b82a87820 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -102,6 +102,7 @@ Item } } } + base.currentItem = null return false } @@ -113,7 +114,7 @@ Item if (base.toActivateNewMaterial) { var position = Cura.ExtruderManager.activeExtruderIndex - Cura.MachineManager.setMaterial(position, base.currentItem.container_node) + Cura.MachineManager.setMaterialById(position, base.newRootMaterialIdToSwitchTo) } base.newRootMaterialIdToSwitchTo = "" base.toActivateNewMaterial = false diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index ea24051e40..fcfe5749e0 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -7,17 +7,18 @@ import QtQuick.Layouts 1.3 import QtQuick.Dialogs 1.2 import UM 1.2 as UM -import Cura 1.0 as Cura +import Cura 1.5 as Cura Item { id: base - property QtObject materialManager: CuraApplication.getMaterialManager() // Keep PreferencesDialog happy property var resetEnabled: false property var currentItem: null + property var materialManagementModel: CuraApplication.getMaterialManagementModel() + property var hasCurrentItem: base.currentItem != null property var isCurrentItemActivated: { @@ -41,14 +42,32 @@ Item name: "cura" } + function resetExpandedActiveMaterial() + { + materialListView.expandActiveMaterial(active_root_material_id) + } + + function setExpandedActiveMaterial(root_material_id) + { + materialListView.expandActiveMaterial(root_material_id) + } + // When loaded, try to select the active material in the tree - Component.onCompleted: materialListView.expandActiveMaterial(active_root_material_id) + Component.onCompleted: resetExpandedActiveMaterial() // Every time the selected item has changed, notify to the details panel onCurrentItemChanged: { forceActiveFocus() - materialDetailsPanel.currentItem = currentItem + if(materialDetailsPanel.currentItem != currentItem) + { + materialDetailsPanel.currentItem = currentItem + // CURA-6679 If the current item is gone after the model update, reset the current item to the active material. + if (currentItem == null) + { + resetExpandedActiveMaterial() + } + } } // Main layout @@ -84,7 +103,7 @@ Item id: activateMenuButton text: catalog.i18nc("@action:button", "Activate") iconName: "list-activate" - enabled: !isCurrentItemActivated && Cura.MachineManager.hasMaterials + enabled: !isCurrentItemActivated && Cura.MachineManager.activeMachine.hasMaterials onClicked: { forceActiveFocus() @@ -105,7 +124,7 @@ Item onClicked: { forceActiveFocus(); - base.newRootMaterialIdToSwitchTo = base.materialManager.createMaterial(); + base.newRootMaterialIdToSwitchTo = base.materialManagementModel.createMaterial(); base.toActivateNewMaterial = true; } } @@ -120,7 +139,7 @@ Item onClicked: { forceActiveFocus(); - base.newRootMaterialIdToSwitchTo = base.materialManager.duplicateMaterial(base.currentItem.container_node); + base.newRootMaterialIdToSwitchTo = base.materialManagementModel.duplicateMaterial(base.currentItem.container_node); base.toActivateNewMaterial = true; } } @@ -131,7 +150,8 @@ Item id: removeMenuButton text: catalog.i18nc("@action:button", "Remove") iconName: "list-remove" - enabled: base.hasCurrentItem && !base.currentItem.is_read_only && !base.isCurrentItemActivated && base.materialManager.canMaterialBeRemoved(base.currentItem.container_node) + enabled: base.hasCurrentItem && !base.currentItem.is_read_only && !base.isCurrentItemActivated && base.materialManagementModel.canMaterialBeRemoved(base.currentItem.container_node) + onClicked: { forceActiveFocus(); @@ -207,7 +227,7 @@ Item text: { var caption = catalog.i18nc("@action:label", "Printer") + ": " + Cura.MachineManager.activeMachine.name; - if (Cura.MachineManager.hasVariants) + if (Cura.MachineManager.activeMachine.hasVariants) { var activeVariantName = "" if(Cura.MachineManager.activeStack != null) @@ -280,7 +300,7 @@ Item { // Set the active material as the fallback. It will be selected when the current material is deleted base.newRootMaterialIdToSwitchTo = base.active_root_material_id - base.materialManager.removeMaterial(base.currentItem.container_node); + base.materialManagementModel.removeMaterial(base.currentItem.container_node); } } diff --git a/resources/qml/Preferences/Materials/MaterialsSlot.qml b/resources/qml/Preferences/Materials/MaterialsSlot.qml index 5a44fb49cc..81bb8759ff 100644 --- a/resources/qml/Preferences/Materials/MaterialsSlot.qml +++ b/resources/qml/Preferences/Materials/MaterialsSlot.qml @@ -10,6 +10,8 @@ import QtQuick.Dialogs 1.2 import UM 1.2 as UM import Cura 1.0 as Cura +// A single material row, typically used in a MaterialsBrandSection + Rectangle { id: materialSlot @@ -51,7 +53,7 @@ Rectangle anchors.left: swatch.right anchors.verticalCenter: materialSlot.verticalCenter anchors.leftMargin: UM.Theme.getSize("narrow_margin").width - font.italic: Cura.MachineManager.currentRootMaterialId[Cura.ExtruderManager.activeExtruderIndex] == material.root_material_id + font.italic: material != null && Cura.MachineManager.currentRootMaterialId[Cura.ExtruderManager.activeExtruderIndex] == material.root_material_id } MouseArea { @@ -60,7 +62,7 @@ Rectangle { materialList.currentBrand = material.brand materialList.currentType = material.brand + "_" + material.material - base.currentItem = material + base.setExpandedActiveMaterial(material.root_material_id) } hoverEnabled: true onEntered: { materialSlot.hovered = true } @@ -82,11 +84,12 @@ Rectangle { if (materialSlot.is_favorite) { - base.materialManager.removeFavorite(material.root_material_id) - return + CuraApplication.getMaterialManagementModel().removeFavorite(material.root_material_id) + } + else + { + CuraApplication.getMaterialManagementModel().addFavorite(material.root_material_id) } - base.materialManager.addFavorite(material.root_material_id) - return } style: ButtonStyle { diff --git a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml index 2c1e2128e1..07630a83b4 100644 --- a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml @@ -20,7 +20,8 @@ Item property var expanded: materialList.expandedTypes.indexOf(materialBrand + "_" + materialName) > -1 property var colorsModel: materialType != null ? materialType.colors: null height: childrenRect.height - width: parent.width + width: parent ? parent.width :undefined + anchors.left: parent ? parent.left : undefined Rectangle { id: material_type_header_background @@ -54,7 +55,7 @@ Item leftPadding: UM.Theme.getSize("default_margin").width anchors { - left: parent.left + left: parent ? parent.left : undefined } Label { @@ -64,33 +65,25 @@ Item id: material_type_name verticalAlignment: Text.AlignVCenter } - Button + Item // this one causes lots of warnings { - text: "" implicitWidth: UM.Theme.getSize("favorites_button").width implicitHeight: UM.Theme.getSize("favorites_button").height UM.RecolorImage { anchors { - verticalCenter: parent.verticalCenter - horizontalCenter: parent.horizontalCenter + verticalCenter: parent ? parent.verticalCenter : undefined + horizontalCenter: parent ? parent.horizontalCenter : undefined } width: UM.Theme.getSize("standard_arrow").width height: UM.Theme.getSize("standard_arrow").height color: "black" source: material_type_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") } - style: ButtonStyle - { - background: Rectangle - { - anchors.fill: parent - color: "transparent" - } - } + } } - MouseArea + MouseArea // causes lots of warnings { anchors.fill: material_type_header onPressed: diff --git a/resources/qml/Preferences/Materials/MaterialsView.qml b/resources/qml/Preferences/Materials/MaterialsView.qml index ea0957fe3f..f781497081 100644 --- a/resources/qml/Preferences/Materials/MaterialsView.qml +++ b/resources/qml/Preferences/Materials/MaterialsView.qml @@ -14,21 +14,22 @@ TabView { id: base - property QtObject materialManager: CuraApplication.getMaterialManager() - property QtObject properties property var currentMaterialNode: null - property bool editingEnabled: false; + property bool editingEnabled: false property string currency: UM.Preferences.getValue("cura/currency") ? UM.Preferences.getValue("cura/currency") : "€" property real firstColumnWidth: (width * 0.50) | 0 property real secondColumnWidth: (width * 0.40) | 0 property string containerId: "" property var materialPreferenceValues: UM.Preferences.getValue("cura/material_settings") ? JSON.parse(UM.Preferences.getValue("cura/material_settings")) : {} + property var materialManagementModel: CuraApplication.getMaterialManagementModel() property double spoolLength: calculateSpoolLength() property real costPerMeter: calculateCostPerMeter() + signal resetSelectedMaterial() + property bool reevaluateLinkedMaterials: false property string linkedMaterialNames: { @@ -105,29 +106,23 @@ TabView property var new_diameter_value: null; property var old_diameter_value: null; property var old_approximate_diameter_value: null; - property bool keyPressed: false onYes: { base.setMetaDataEntry("approximate_diameter", old_approximate_diameter_value, getApproximateDiameter(new_diameter_value).toString()); base.setMetaDataEntry("properties/diameter", properties.diameter, new_diameter_value); + // CURA-6868 Make sure to update the extruder to user a diameter-compatible material. + Cura.MachineManager.updateMaterialWithVariant() + base.resetSelectedMaterial() } onNo: { - properties.diameter = old_diameter_value; - diameterSpinBox.value = properties.diameter; + base.properties.diameter = old_diameter_value; + diameterSpinBox.value = Qt.binding(function() { return base.properties.diameter }) } - onVisibilityChanged: - { - if (!visible && !keyPressed) - { - // If the user closes this dialog without clicking on any button, it's the same as clicking "No". - no(); - } - keyPressed = false; - } + onRejected: no() } Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Display Name") } @@ -454,7 +449,7 @@ TabView UM.ContainerPropertyProvider { id: variantPropertyProvider - containerId: Cura.MachineManager.activeVariantId + containerId: Cura.MachineManager.activeStack.variant.id watchedProperties: [ "value" ] key: model.key } @@ -573,7 +568,7 @@ TabView } // update the values - base.materialManager.setMaterialName(base.currentMaterialNode, new_name) + base.materialManagementModel.setMaterialName(base.currentMaterialNode, new_name) properties.name = new_name } diff --git a/resources/qml/Preferences/ProfileTab.qml b/resources/qml/Preferences/ProfileTab.qml index 12846cf99b..3c0c46ed72 100644 --- a/resources/qml/Preferences/ProfileTab.qml +++ b/resources/qml/Preferences/ProfileTab.qml @@ -38,14 +38,28 @@ Tab property var setting: qualitySettings.getItem(styleData.row) height: childrenRect.height width: (parent != null) ? parent.width : 0 - text: (styleData.value.substr(0,1) == "=") ? styleData.value : "" + text: + { + if (styleData.value === undefined) + { + return "" + } + return (styleData.value.substr(0,1) == "=") ? styleData.value : "" + } Label { anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width anchors.right: parent.right - text: (styleData.value.substr(0,1) == "=") ? catalog.i18nc("@info:status", "Calculated") : styleData.value + text: + { + if (styleData.value === undefined) + { + return "" + } + return (styleData.value.substr(0,1) == "=") ? catalog.i18nc("@info:status", "Calculated") : styleData.value + } font.strikeout: styleData.column == 1 && setting.user_value != "" && base.isQualityItemCurrentlyActivated font.italic: setting.profile_value_source == "quality_changes" || (setting.user_value != "" && base.isQualityItemCurrentlyActivated) opacity: font.strikeout ? 0.5 : 1 diff --git a/resources/qml/Preferences/ProfilesPage.qml b/resources/qml/Preferences/ProfilesPage.qml index 0bac5aefca..fdb961ad21 100644 --- a/resources/qml/Preferences/ProfilesPage.qml +++ b/resources/qml/Preferences/ProfilesPage.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2019 Ultimaker B.V. // Uranium is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 @@ -7,26 +7,24 @@ import QtQuick.Layouts 1.3 import QtQuick.Dialogs 1.2 import UM 1.2 as UM -import Cura 1.0 as Cura +import Cura 1.6 as Cura Item { id: base - property QtObject qualityManager: CuraApplication.getQualityManager() property var resetEnabled: false // Keep PreferencesDialog happy property var extrudersModel: CuraApplication.getExtrudersModel() + property var qualityManagementModel: CuraApplication.getQualityManagementModel() UM.I18nCatalog { id: catalog; name: "cura"; } - Cura.QualityManagementModel { - id: qualitiesModel - } - - Label { + Label + { id: titleLabel - anchors { + anchors + { top: parent.top left: parent.left right: parent.right @@ -38,28 +36,41 @@ Item property var hasCurrentItem: base.currentItem != null - property var currentItem: { + property var currentItem: + { var current_index = qualityListView.currentIndex; - return (current_index == -1) ? null : qualitiesModel.getItem(current_index); + return (current_index == -1) ? null : base.qualityManagementModel.getItem(current_index); } property var currentItemName: hasCurrentItem ? base.currentItem.name : "" + property var currentItemDisplayName: hasCurrentItem ? base.qualityManagementModel.getQualityItemDisplayName(base.currentItem) : "" - property var isCurrentItemActivated: { - if (!base.currentItem) { + property var isCurrentItemActivated: + { + if (!base.currentItem) + { return false; } - return base.currentItem.name == Cura.MachineManager.activeQualityOrQualityChangesName; + if (base.currentItem.is_read_only) + { + return (base.currentItem.name == Cura.MachineManager.activeQualityOrQualityChangesName) && (base.currentItem.intent_category == Cura.MachineManager.activeIntentCategory); + } + else + { + return base.currentItem.name == Cura.MachineManager.activeQualityOrQualityChangesName; + } } - property var canCreateProfile: { + property var canCreateProfile: + { return isCurrentItemActivated && Cura.MachineManager.hasUserSettings; } Row // Button Row { id: buttonRow - anchors { + anchors + { left: parent.left right: parent.right top: titleLabel.bottom @@ -73,10 +84,14 @@ Item text: catalog.i18nc("@action:button", "Activate") iconName: "list-activate" enabled: !isCurrentItemActivated - onClicked: { - if (base.currentItem.is_read_only) { - Cura.MachineManager.setQualityGroup(base.currentItem.quality_group); - } else { + onClicked: + { + if (base.currentItem.is_read_only) + { + Cura.IntentManager.selectIntent(base.currentItem.intent_category, base.currentItem.quality_type); + } + else + { Cura.MachineManager.setQualityChangesGroup(base.currentItem.quality_changes_group); } } @@ -91,7 +106,8 @@ Item enabled: base.canCreateProfile && !Cura.MachineManager.stacksHaveErrors visible: base.canCreateProfile - onClicked: { + onClicked: + { createQualityDialog.object = Cura.ContainerManager.makeUniqueName(base.currentItem.name); createQualityDialog.open(); createQualityDialog.selectText(); @@ -107,7 +123,8 @@ Item enabled: !base.canCreateProfile visible: !base.canCreateProfile - onClicked: { + onClicked: + { duplicateQualityDialog.object = Cura.ContainerManager.makeUniqueName(base.currentItem.name); duplicateQualityDialog.open(); duplicateQualityDialog.selectText(); @@ -121,7 +138,8 @@ Item text: catalog.i18nc("@action:button", "Remove") iconName: "list-remove" enabled: base.hasCurrentItem && !base.currentItem.is_read_only && !base.isCurrentItemActivated - onClicked: { + onClicked: + { forceActiveFocus(); confirmRemoveQualityDialog.open(); } @@ -134,7 +152,8 @@ Item text: catalog.i18nc("@action:button", "Rename") iconName: "edit-rename" enabled: base.hasCurrentItem && !base.currentItem.is_read_only - onClicked: { + onClicked: + { renameQualityDialog.object = base.currentItem.name; renameQualityDialog.open(); renameQualityDialog.selectText(); @@ -147,7 +166,8 @@ Item id: importMenuButton text: catalog.i18nc("@action:button", "Import") iconName: "document-import" - onClicked: { + onClicked: + { importDialog.open(); } } @@ -159,7 +179,8 @@ Item text: catalog.i18nc("@action:button", "Export") iconName: "document-export" enabled: base.hasCurrentItem && !base.currentItem.is_read_only - onClicked: { + onClicked: + { exportDialog.open(); } } @@ -185,7 +206,7 @@ Item { base.newQualityNameToSelect = newName; // We want to switch to the new profile once it's created base.toActivateNewQuality = true; - base.qualityManager.createQualityChanges(newName); + base.qualityManagementModel.createQualityChanges(newName); } } @@ -195,7 +216,7 @@ Item // This connection makes sure that we will switch to the correct quality after the model gets updated Connections { - target: qualitiesModel + target: base.qualityManagementModel onItemsChanged: { var toSelectItemName = base.currentItem == null ? "" : base.currentItem.name; @@ -208,9 +229,9 @@ Item if (toSelectItemName != "") { // Select the required quality name if given - for (var idx = 0; idx < qualitiesModel.count; ++idx) + for (var idx = 0; idx < base.qualityManagementModel.count; ++idx) { - var item = qualitiesModel.getItem(idx); + var item = base.qualityManagementModel.getItem(idx); if (item.name == toSelectItemName) { // Switch to the newly created profile if needed @@ -240,7 +261,7 @@ Item object: "" onAccepted: { - base.qualityManager.duplicateQualityChanges(newName, base.currentItem); + base.qualityManagementModel.duplicateQualityChanges(newName, base.currentItem); } } @@ -257,7 +278,7 @@ Item onYes: { - base.qualityManager.removeQualityChangesGroup(base.currentItem.quality_changes_group); + base.qualityManagementModel.removeQualityChangesGroup(base.currentItem.quality_changes_group); // reset current item to the first if available qualityListView.currentIndex = -1; // Reset selection. } @@ -271,7 +292,7 @@ Item object: "" onAccepted: { - var actualNewName = base.qualityManager.renameQualityChangesGroup(base.currentItem.quality_changes_group, newName); + var actualNewName = base.qualityManagementModel.renameQualityChangesGroup(base.currentItem.quality_changes_group, newName); base.newQualityNameToSelect = actualNewName; // Select the new name after the model gets updated } } @@ -282,19 +303,22 @@ Item id: importDialog title: catalog.i18nc("@title:window", "Import Profile") selectExisting: true - nameFilters: qualitiesModel.getFileNameFilters("profile_reader") + nameFilters: base.qualityManagementModel.getFileNameFilters("profile_reader") folder: CuraApplication.getDefaultPath("dialog_profile_path") onAccepted: { var result = Cura.ContainerManager.importProfile(fileUrl); messageDialog.text = result.message; - if (result.status == "ok") { + if (result.status == "ok") + { messageDialog.icon = StandardIcon.Information; } - else if (result.status == "duplicate") { + else if (result.status == "duplicate") + { messageDialog.icon = StandardIcon.Warning; } - else { + else + { messageDialog.icon = StandardIcon.Critical; } messageDialog.open(); @@ -308,14 +332,15 @@ Item id: exportDialog title: catalog.i18nc("@title:window", "Export Profile") selectExisting: false - nameFilters: qualitiesModel.getFileNameFilters("profile_writer") + nameFilters: base.qualityManagementModel.getFileNameFilters("profile_writer") folder: CuraApplication.getDefaultPath("dialog_profile_path") onAccepted: { var result = Cura.ContainerManager.exportQualityChangesGroup(base.currentItem.quality_changes_group, fileUrl, selectedNameFilter); - if (result && result.status == "error") { + if (result && result.status == "error") + { messageDialog.icon = StandardIcon.Critical; messageDialog.text = result.message; messageDialog.open(); @@ -326,10 +351,12 @@ Item } } - Item { + Item + { id: contentsItem - anchors { + anchors + { top: titleLabel.bottom left: parent.left right: parent.right @@ -343,7 +370,8 @@ Item Item { - anchors { + anchors + { top: buttonRow.bottom topMargin: UM.Theme.getSize("default_margin").height left: parent.left @@ -351,17 +379,21 @@ Item bottom: parent.bottom } - SystemPalette { id: palette } + SystemPalette + { + id: palette + } Label { id: captionLabel - anchors { + anchors + { top: parent.top left: parent.left } visible: text != "" - text: catalog.i18nc("@label %1 is printer name", "Printer: %1").arg(Cura.MachineManager.activeMachineName) + text: catalog.i18nc("@label %1 is printer name", "Printer: %1").arg(Cura.MachineManager.activeMachine.name) width: profileScrollView.width elide: Text.ElideRight } @@ -369,14 +401,16 @@ Item ScrollView { id: profileScrollView - anchors { + anchors + { top: captionLabel.visible ? captionLabel.bottom : parent.top topMargin: captionLabel.visible ? UM.Theme.getSize("default_margin").height : 0 bottom: parent.bottom left: parent.left } - Rectangle { + Rectangle + { parent: viewport anchors.fill: parent color: palette.light @@ -390,16 +424,16 @@ Item { id: qualityListView - model: qualitiesModel + model: base.qualityManagementModel Component.onCompleted: { var selectedItemName = Cura.MachineManager.activeQualityOrQualityChangesName; // Select the required quality name if given - for (var idx = 0; idx < qualitiesModel.count; idx++) + for (var idx = 0; idx < base.qualityManagementModel.count; idx++) { - var item = qualitiesModel.getItem(idx); + var item = base.qualityManagementModel.getItem(idx); if (item.name == selectedItemName) { currentIndex = idx; @@ -408,7 +442,7 @@ Item } } - section.property: "is_read_only" + section.property: "section_name" section.delegate: Rectangle { height: childrenRect.height @@ -417,7 +451,7 @@ Item { anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_lining").width - text: section == "true" ? catalog.i18nc("@label", "Default profiles") : catalog.i18nc("@label", "Custom profiles") + text: section font.bold: true } } @@ -441,14 +475,27 @@ Item width: Math.floor((parent.width * 0.8)) text: model.name elide: Text.ElideRight - font.italic: model.name == Cura.MachineManager.activeQualityOrQualityChangesName + font.italic: + { + if (model.is_read_only) + { + // For built-in qualities, it needs to match both the intent category and the quality name + return model.name == Cura.MachineManager.activeQualityOrQualityChangesName && model.intent_category == Cura.MachineManager.activeIntentCategory + } + else + { + // For custom qualities, it only needs to match the name + return model.name == Cura.MachineManager.activeQualityOrQualityChangesName + } + } color: parent.isCurrentItem ? palette.highlightedText : palette.text } MouseArea { anchors.fill: parent - onClicked: { + onClicked: + { parent.ListView.view.currentIndex = model.index; } } @@ -461,7 +508,8 @@ Item { id: detailsPanel - anchors { + anchors + { left: profileScrollView.right leftMargin: UM.Theme.getSize("default_margin").width top: parent.top @@ -481,15 +529,21 @@ Item width: parent.width height: childrenRect.height - Label { - text: base.currentItemName + Label + { + anchors.left: parent.left + anchors.right: parent.right + text: base.currentItemDisplayName font: UM.Theme.getFont("large_bold") + elide: Text.ElideRight + renderType: Text.NativeRendering } } - Flow { + Flow + { id: currentSettingsActions - visible: base.hasCurrentItem && base.currentItem.name == Cura.MachineManager.activeQualityOrQualityChangesName + visible: base.hasCurrentItem && base.currentItem.name == Cura.MachineManager.activeQualityOrQualityChangesName && base.currentItem.intent_category == Cura.MachineManager.activeIntentCategory anchors.left: parent.left anchors.right: parent.right anchors.top: profileName.bottom @@ -510,7 +564,8 @@ Item } } - Column { + Column + { id: profileNotices anchors.top: currentSettingsActions.visible ? currentSettingsActions.bottom : currentSettingsActions.anchors.top anchors.topMargin: UM.Theme.getSize("default_margin").height @@ -518,14 +573,16 @@ Item anchors.right: parent.right spacing: UM.Theme.getSize("default_margin").height - Label { + Label + { id: defaultsMessage visible: false text: catalog.i18nc("@action:label", "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below.") wrapMode: Text.WordWrap width: parent.width } - Label { + Label + { id: noCurrentSettingsMessage visible: base.isCurrentItemActivated && !Cura.MachineManager.hasUserSettings text: catalog.i18nc("@action:label", "Your current settings match the selected profile.") @@ -534,7 +591,6 @@ Item } } - TabView { anchors.left: parent.left diff --git a/resources/qml/Preferences/ReadOnlySpinBox.qml b/resources/qml/Preferences/ReadOnlySpinBox.qml index 1bbef82b1e..11e47b38b2 100644 --- a/resources/qml/Preferences/ReadOnlySpinBox.qml +++ b/resources/qml/Preferences/ReadOnlySpinBox.qml @@ -34,8 +34,8 @@ Item anchors.fill: parent onEditingFinished: base.editingFinished() - Keys.onEnterPressed: base.editingFinished() - Keys.onReturnPressed: base.editingFinished() + Keys.onEnterPressed: spinBox.focus = false + Keys.onReturnPressed: spinBox.focus = false } Label diff --git a/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml index 98bb5c0405..46297659ff 100644 --- a/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml +++ b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml @@ -1,12 +1,14 @@ // 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.0 +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Controls 1.4 as OldControls +import QtQuick.Layouts 1.3 import UM 1.3 as UM -import Cura 1.0 as Cura - +import Cura 1.6 as Cura +import ".." Item { @@ -17,19 +19,187 @@ Item property var extrudersModel: CuraApplication.getExtrudersModel() - // Profile selector row - GlobalProfileSelector + Item { - id: globalProfileRow + id: intent + height: childrenRect.height + anchors { top: parent.top - topMargin: parent.padding + topMargin: UM.Theme.getSize("default_margin").height left: parent.left leftMargin: parent.padding right: parent.right rightMargin: parent.padding } + + Label + { + id: profileLabel + anchors + { + top: parent.top + bottom: parent.bottom + left: parent.left + right: intentSelection.left + } + text: catalog.i18nc("@label", "Profile") + font: UM.Theme.getFont("medium") + renderType: Text.NativeRendering + color: UM.Theme.getColor("text") + verticalAlignment: Text.AlignVCenter + } + + NoIntentIcon + { + affected_extruders: Cura.MachineManager.extruderPositionsWithNonActiveIntent + intent_type: Cura.MachineManager.activeIntentCategory + anchors.right: intentSelection.left + anchors.rightMargin: UM.Theme.getSize("narrow_margin").width + width: Math.round(profileLabel.height * 0.5) + anchors.verticalCenter: parent.verticalCenter + height: width + visible: affected_extruders.length + } + + Button + { + id: intentSelection + onClicked: menu.opened ? menu.close() : menu.open() + + anchors.right: parent.right + width: UM.Theme.getSize("print_setup_big_item").width + height: textLabel.contentHeight + 2 * UM.Theme.getSize("narrow_margin").height + hoverEnabled: true + + baselineOffset: null // If we don't do this, there is a binding loop. WHich is a bit weird, since we override the contentItem anyway... + + contentItem: RowLayout + { + spacing: 0 + anchors.left: parent.left + anchors.right: customisedSettings.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + + Label + { + id: textLabel + text: Cura.MachineManager.activeQualityDisplayNameMap["main"] + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + Layout.margins: 0 + Layout.maximumWidth: Math.floor(parent.width * 0.7) // Always leave >= 30% for the rest of the row. + height: contentHeight + verticalAlignment: Text.AlignVCenter + renderType: Text.NativeRendering + elide: Text.ElideRight + } + + Label + { + text: activeQualityDetailText() + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text_detail") + Layout.margins: 0 + Layout.fillWidth: true + + height: contentHeight + verticalAlignment: Text.AlignVCenter + renderType: Text.NativeRendering + elide: Text.ElideRight + + function activeQualityDetailText() + { + var resultMap = Cura.MachineManager.activeQualityDisplayNameMap + var resultSuffix = resultMap["suffix"] + var result = "" + + if (Cura.MachineManager.isActiveQualityExperimental) + { + resultSuffix += " (Experimental)" + } + + if (Cura.MachineManager.isActiveQualitySupported) + { + if (Cura.MachineManager.activeQualityLayerHeight > 0) + { + if (resultSuffix) + { + result += " - " + resultSuffix + } + result += " - " + result += Cura.MachineManager.activeQualityLayerHeight + "mm" + } + } + + return result + } + } + } + + background: Rectangle + { + id: backgroundItem + border.color: intentSelection.hovered ? UM.Theme.getColor("setting_control_border_highlight") : UM.Theme.getColor("setting_control_border") + border.width: UM.Theme.getSize("default_lining").width + radius: UM.Theme.getSize("default_radius").width + color: UM.Theme.getColor("main_background") + } + + UM.SimpleButton + { + id: customisedSettings + + visible: Cura.MachineManager.hasUserSettings + width: UM.Theme.getSize("print_setup_icon").width + height: UM.Theme.getSize("print_setup_icon").height + + anchors.verticalCenter: parent.verticalCenter + anchors.right: downArrow.left + anchors.rightMargin: UM.Theme.getSize("default_margin").width + + color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button"); + iconSource: UM.Theme.getIcon("star") + + onClicked: + { + forceActiveFocus(); + Cura.Actions.manageProfiles.trigger() + } + onEntered: + { + var content = catalog.i18nc("@tooltip", "Some setting/override values are different from the values stored in the profile.\n\nClick to open the profile manager.") + base.showTooltip(intent, Qt.point(-UM.Theme.getSize("default_margin").width, 0), content) + } + onExited: base.hideTooltip() + } + UM.RecolorImage + { + id: downArrow + + source: UM.Theme.getIcon("arrow_bottom") + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + + anchors + { + right: parent.right + verticalCenter: parent.verticalCenter + rightMargin: UM.Theme.getSize("default_margin").width + } + + color: UM.Theme.getColor("setting_control_button") + } + } + + QualitiesWithIntentMenu + { + id: menu + y: intentSelection.y + intentSelection.height + x: intentSelection.x + width: intentSelection.width + } } UM.TabRow @@ -40,7 +210,7 @@ Item anchors { - top: globalProfileRow.bottom + top: intent.bottom topMargin: UM.Theme.getSize("default_margin").height left: parent.left leftMargin: parent.padding @@ -99,7 +269,7 @@ Item { anchors { - top: tabBar.visible ? tabBar.bottom : globalProfileRow.bottom + top: tabBar.visible ? tabBar.bottom : intent.bottom topMargin: -UM.Theme.getSize("default_lining").width left: parent.left leftMargin: parent.padding diff --git a/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml b/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml deleted file mode 100644 index 32c07a52a6..0000000000 --- a/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.2 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -Item -{ - id: globalProfileRow - height: childrenRect.height - - Label - { - id: globalProfileLabel - anchors - { - top: parent.top - bottom: parent.bottom - left: parent.left - right: globalProfileSelection.left - } - text: catalog.i18nc("@label", "Profile") - font: UM.Theme.getFont("medium") - color: UM.Theme.getColor("text") - verticalAlignment: Text.AlignVCenter - } - - ToolButton - { - id: globalProfileSelection - - text: generateActiveQualityText() - width: UM.Theme.getSize("print_setup_big_item").width - height: UM.Theme.getSize("print_setup_big_item").height - anchors - { - top: parent.top - right: parent.right - } - tooltip: Cura.MachineManager.activeQualityOrQualityChangesName - style: UM.Theme.styles.print_setup_header_button - activeFocusOnPress: true - menu: Cura.ProfileMenu { } - - function generateActiveQualityText() - { - var result = Cura.MachineManager.activeQualityOrQualityChangesName - if (Cura.MachineManager.isActiveQualityExperimental) - { - result += " (Experimental)" - } - - if (Cura.MachineManager.isActiveQualitySupported) - { - if (Cura.MachineManager.activeQualityLayerHeight > 0) - { - result += " " - result += " - " - result += Cura.MachineManager.activeQualityLayerHeight + "mm" - result += "" - } - } - - return result - } - - UM.SimpleButton - { - id: customisedSettings - - visible: Cura.MachineManager.hasUserSettings - width: UM.Theme.getSize("print_setup_icon").width - height: UM.Theme.getSize("print_setup_icon").height - - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: Math.round(UM.Theme.getSize("setting_preferences_button_margin").width - UM.Theme.getSize("thick_margin").width) - - color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button"); - iconSource: UM.Theme.getIcon("star") - - onClicked: - { - forceActiveFocus(); - Cura.Actions.manageProfiles.trigger() - } - onEntered: - { - var content = catalog.i18nc("@tooltip","Some setting/override values are different from the values stored in the profile.\n\nClick to open the profile manager.") - base.showTooltip(globalProfileRow, Qt.point(-UM.Theme.getSize("default_margin").width, 0), content) - } - onExited: base.hideTooltip() - } - } -} \ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/Custom/MenuButton.qml b/resources/qml/PrintSetupSelector/Custom/MenuButton.qml new file mode 100644 index 0000000000..ffa6a68c9d --- /dev/null +++ b/resources/qml/PrintSetupSelector/Custom/MenuButton.qml @@ -0,0 +1,54 @@ +// 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.2 as UM +import Cura 1.6 as Cura + +Button +{ + // This is a work around for a qml issue. Since the default button uses a private implementation for contentItem + // (the so called IconText), which handles the mnemonic conversion (aka; ensuring that &Button) text property + // is rendered with the B underlined. Since we're also forced to mix controls 1.0 and 2.0 actions together, + // we need a special property for the text of the label if we do want it to be rendered correclty, but don't want + // another shortcut to be added (which will cause for "QQuickAction::event: Ambiguous shortcut overload: " to + // happen. + property string labelText: "" + id: button + hoverEnabled: true + + background: Rectangle + { + id: backgroundRectangle + border.width: UM.Theme.getSize("default_lining").width + border.color: button.checked ? UM.Theme.getColor("setting_control_border_highlight") : "transparent" + color: button.hovered ? UM.Theme.getColor("action_button_hovered") : "transparent" + radius: UM.Theme.getSize("action_button_radius").width + } + + // Workarround to ensure that the mnemonic highlighting happens correctly + function replaceText(txt) + { + var index = txt.indexOf("&") + if(index >= 0) + { + txt = txt.replace(txt.substr(index, 2), ("" + txt.substr(index + 1, 1) + "")) + } + return txt + } + + contentItem: Label + { + id: textLabel + text: button.text != "" ? replaceText(button.text) : replaceText(button.labelText) + height: contentHeight + verticalAlignment: Text.AlignVCenter + anchors.left: button.left + anchors.leftMargin: UM.Theme.getSize("wide_margin").width + renderType: Text.NativeRendering + font: UM.Theme.getFont("default") + color: button.enabled ? UM.Theme.getColor("text") :UM.Theme.getColor("text_inactive") + } +} \ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml b/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml new file mode 100644 index 0000000000..c5a725285c --- /dev/null +++ b/resources/qml/PrintSetupSelector/Custom/QualitiesWithIntentMenu.qml @@ -0,0 +1,334 @@ +// 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.2 as UM +import Cura 1.6 as Cura + +Popup +{ + id: popup + implicitWidth: 400 + property var dataModel: Cura.IntentCategoryModel {} + + property int defaultMargin: UM.Theme.getSize("default_margin").width + property color backgroundColor: UM.Theme.getColor("main_background") + property color borderColor: UM.Theme.getColor("lining") + + topPadding: UM.Theme.getSize("narrow_margin").height + rightPadding: UM.Theme.getSize("default_lining").width + leftPadding: UM.Theme.getSize("default_lining").width + + padding: 0 + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + background: Cura.RoundedRectangle + { + color: backgroundColor + border.width: UM.Theme.getSize("default_lining").width + border.color: borderColor + cornerSide: Cura.RoundedRectangle.Direction.Down + } + + ButtonGroup + { + id: buttonGroup + exclusive: true + onClicked: popup.visible = false + } + + contentItem: Column + { + // This repeater adds the intent labels + ScrollView + { + property real maximumHeight: screenScaleFactor * 400 + contentHeight: dataColumn.height + height: Math.min(contentHeight, maximumHeight) + clip: true + + ScrollBar.vertical.policy: height == maximumHeight ? ScrollBar.AlwaysOn: ScrollBar.AlwaysOff + + Column + { + id: dataColumn + width: parent.width + Repeater + { + model: dataModel + delegate: Item + { + // We need to set it like that, otherwise we'd have to set the sub model with model: model.qualities + // Which obviously won't work due to naming conflicts. + property variant subItemModel: model.qualities + + height: childrenRect.height + width: popup.contentWidth + + Label + { + id: headerLabel + text: model.name + color: UM.Theme.getColor("text_inactive") + renderType: Text.NativeRendering + width: parent.width + height: visible ? contentHeight: 0 + visible: qualitiesList.visibleChildren.length > 0 + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + + MouseArea // tooltip hover area + { + anchors.fill: parent + hoverEnabled: true + enabled: model.description !== undefined + acceptedButtons: Qt.NoButton // react to hover only, don't steal clicks + + onEntered: + { + base.showTooltip( + headerLabel, + Qt.point(- UM.Theme.getSize("default_margin").width, 0), + model.description + ) + } + onExited: base.hideTooltip() + } + } + + Column + { + id: qualitiesList + anchors.top: headerLabel.bottom + anchors.left: parent.left + anchors.right: parent.right + + // We set it by means of a binding, since then we can use the when condition, which we need to + // prevent a binding loop. + Binding + { + target: parent + property: "height" + value: parent.childrenRect.height + when: parent.visibleChildren.length > 0 + } + + // Add the qualities that belong to the intent + Repeater + { + visible: false + model: subItemModel + MenuButton + { + id: button + + onClicked: Cura.IntentManager.selectIntent(model.intent_category, model.quality_type) + + width: parent.width + checkable: true + visible: model.available + text: model.name + " - " + model.layer_height + " mm" + checked: + { + if (Cura.MachineManager.hasCustomQuality) + { + // When user created profile is active, no quality tickbox should be active. + return false; + } + return Cura.MachineManager.activeQualityType == model.quality_type && Cura.MachineManager.activeIntentCategory == model.intent_category; + } + ButtonGroup.group: buttonGroup + } + } + } + } + } + //Another "intent category" for custom profiles. + Item + { + height: childrenRect.height + anchors + { + left: parent.left + right: parent.right + } + + Label + { + id: customProfileHeader + text: catalog.i18nc("@label:header", "Custom profiles") + renderType: Text.NativeRendering + height: visible ? contentHeight: 0 + enabled: false + visible: profilesList.visibleChildren.length > 1 + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + } + + Column + { + id: profilesList + anchors + { + top: customProfileHeader.bottom + left: parent.left + right: parent.right + } + + //We set it by means of a binding, since then we can use the + //"when" condition, which we need to prevent a binding loop. + Binding + { + target: parent + property: "height" + value: parent.childrenRect.height + when: parent.visibleChildren.length > 1 + } + + //Add all the custom profiles. + Repeater + { + model: Cura.CustomQualityProfilesDropDownMenuModel + MenuButton + { + onClicked: Cura.MachineManager.setQualityChangesGroup(model.quality_changes_group) + + width: parent.width + checkable: true + visible: model.available + text: model.name + checked: + { + var active_quality_group = Cura.MachineManager.activeQualityChangesGroup + + if (active_quality_group != null) + { + return active_quality_group.name == model.quality_changes_group.name + } + return false + } + ButtonGroup.group: buttonGroup + } + } + } + } + } + } + + Rectangle + { + height: UM.Theme.getSize("default_lining").height + anchors.left: parent.left + anchors.right: parent.right + color: borderColor + } + + MenuButton + { + labelText: Cura.Actions.addProfile.text + + anchors.left: parent.left + anchors.right: parent.right + + enabled: Cura.Actions.addProfile.enabled + onClicked: + { + Cura.Actions.addProfile.trigger() + popup.visible = false + } + } + MenuButton + { + labelText: Cura.Actions.updateProfile.text + anchors.left: parent.left + anchors.right: parent.right + + enabled: Cura.Actions.updateProfile.enabled + + onClicked: + { + popup.visible = false + Cura.Actions.updateProfile.trigger() + } + } + MenuButton + { + text: catalog.i18nc("@action:button", "Discard current changes") + + anchors.left: parent.left + anchors.right: parent.right + + enabled: Cura.MachineManager.hasUserSettings + + onClicked: + { + popup.visible = false + Cura.ContainerManager.clearUserContainers() + } + } + + Rectangle + { + height: UM.Theme.getSize("default_lining").width + anchors.left: parent.left + anchors.right: parent.right + color: borderColor + } + + MenuButton + { + id: manageProfilesButton + text: Cura.Actions.manageProfiles.text + anchors + { + left: parent.left + right: parent.right + } + + height: textLabel.contentHeight + 2 * UM.Theme.getSize("narrow_margin").height + + contentItem: Item + { + width: parent.width + height: childrenRect.height + + Label + { + id: textLabel + text: manageProfilesButton.text + height: contentHeight + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + UM.Theme.getSize("narrow_margin").width + verticalAlignment: Text.AlignVCenter + renderType: Text.NativeRendering + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + } + Label + { + id: shortcutLabel + text: Cura.Actions.manageProfiles.shortcut + height: contentHeight + anchors.right: parent.right + anchors.rightMargin: UM.Theme.getSize("default_margin").width + verticalAlignment: Text.AlignVCenter + renderType: Text.NativeRendering + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + } + } + onClicked: + { + popup.visible = false + Cura.Actions.manageProfiles.trigger() + } + } + // spacer + Item + { + width: 2 + height: UM.Theme.getSize("default_radius").width + } + } +} diff --git a/resources/qml/PrintSetupSelector/NoIntentIcon.qml b/resources/qml/PrintSetupSelector/NoIntentIcon.qml new file mode 100644 index 0000000000..7943a05ab4 --- /dev/null +++ b/resources/qml/PrintSetupSelector/NoIntentIcon.qml @@ -0,0 +1,36 @@ +// 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.2 as UM +import Cura 1.6 as Cura + +Item +{ + id: icon + property var affected_extruders + property var intent_type: "" + + implicitWidth: UM.Theme.getSize("section_icon").width + implicitHeight: UM.Theme.getSize("section_icon").height + + UM.RecolorImage + { + source: UM.Theme.getIcon("info") + color: UM.Theme.getColor("icon") + anchors.fill: parent + } + MouseArea + { + anchors.fill: parent + hoverEnabled: parent.visible + onEntered: + { + var tooltipContent = catalog.i18ncp("@label %1 is filled in with the type of a profile. %2 is filled with a list of numbers (eg '1' or '1, 2')", "There is no %1 profile for the configuration in extruder %2. The default intent will be used instead", "There is no %1 profile for the configurations in extruders %2. The default intent will be used instead", affected_extruders.length).arg(intent_type).arg(affected_extruders) + base.showTooltip(icon.parent, Qt.point(-UM.Theme.getSize("thick_margin").width, 0), tooltipContent) + } + onExited: base.hideTooltip() + } +} \ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml b/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml index 96b244d803..1a15980693 100644 --- a/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml +++ b/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.3 @@ -20,10 +20,16 @@ RowLayout { if (Cura.MachineManager.activeStack) { - var text = Cura.MachineManager.activeQualityOrQualityChangesName + var resultMap = Cura.MachineManager.activeQualityDisplayNameMap + var text = resultMap["main"] + if (resultMap["suffix"]) + { + text += " - " + resultMap["suffix"] + } + if (!Cura.MachineManager.hasNotSupportedQuality) { - text += " " + layerHeight.properties.value + "mm" + text += " - " + layerHeight.properties.value + "mm" text += Cura.MachineManager.isActiveQualityExperimental ? " - " + catalog.i18nc("@label", "Experimental") : "" } return text @@ -31,6 +37,7 @@ RowLayout return "" } font: UM.Theme.getFont("medium") + elide: Text.ElideMiddle UM.SettingPropertyProvider { diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml index aaa10fbfcd..1ae265ab47 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml @@ -18,6 +18,7 @@ Item height: childrenRect.height property real labelColumnWidth: Math.round(width / 3) + property var curaRecommendedMode: Cura.RecommendedMode {} Cura.IconWithText { @@ -64,19 +65,7 @@ Item onClicked: { - var adhesionType = "skirt"; - if (!parent.checked) - { - // Remove the "user" setting to see if the rest of the stack prescribes a brim or a raft - platformAdhesionType.removeFromContainer(0); - adhesionType = platformAdhesionType.properties.resolve; - if(adhesionType === "skirt" || adhesionType === "none") - { - // If the rest of the stack doesn't prescribe an adhesion-type, default to a brim - adhesionType = "brim"; - } - } - platformAdhesionType.setPropertyValue("value", adhesionType); + curaRecommendedMode.setAdhesion(!parent.checked) } onEntered: diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml index 6885f8c041..a180ad6324 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 @@ -27,7 +27,6 @@ Item Column { - width: parent.width - 2 * parent.padding spacing: UM.Theme.getSize("wide_margin").height anchors diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml index 0486f5d2d7..3c7caad470 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml @@ -1,17 +1,15 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2019 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 +import QtQuick.Controls 2.3 as Controls2 import QtQuick.Controls.Styles 1.4 import UM 1.2 as UM -import Cura 1.0 as Cura +import Cura 1.6 as Cura +import ".." - -// -// Quality profile -// Item { id: qualityRow @@ -20,436 +18,171 @@ Item property real labelColumnWidth: Math.round(width / 3) property real settingsColumnWidth: width - labelColumnWidth - Timer - { - id: qualitySliderChangeTimer - interval: 50 - running: false - repeat: false - onTriggered: - { - var item = Cura.QualityProfilesDropDownMenuModel.getItem(qualitySlider.value); - Cura.MachineManager.activeQualityGroup = item.quality_group; - } - } - - Component.onCompleted: qualityModel.update() - - Connections - { - target: Cura.QualityProfilesDropDownMenuModel - onItemsChanged: qualityModel.update() - } - - Connections { - target: base - onVisibleChanged: - { - // update needs to be called when the widgets are visible, otherwise the step width calculation - // will fail because the width of an invisible item is 0. - if (visible) - { - qualityModel.update(); - } - } - } - - ListModel - { - id: qualityModel - - property var totalTicks: 0 - property var availableTotalTicks: 0 - property var existingQualityProfile: 0 - - property var qualitySliderActiveIndex: 0 - property var qualitySliderStepWidth: 0 - property var qualitySliderAvailableMin: 0 - property var qualitySliderAvailableMax: 0 - property var qualitySliderMarginRight: 0 - - function update () - { - reset() - - var availableMin = -1 - var availableMax = -1 - - for (var i = 0; i < Cura.QualityProfilesDropDownMenuModel.rowCount(); i++) - { - var qualityItem = Cura.QualityProfilesDropDownMenuModel.getItem(i) - - // Add each quality item to the UI quality model - qualityModel.append(qualityItem) - - // Set selected value - if (Cura.MachineManager.activeQualityType == qualityItem.quality_type) - { - // set to -1 when switching to user created profile so all ticks are clickable - if (Cura.MachineManager.hasCustomQuality) - { - qualityModel.qualitySliderActiveIndex = -1 - } - else - { - qualityModel.qualitySliderActiveIndex = i - } - - qualityModel.existingQualityProfile = 1 - } - - // Set min available - if (qualityItem.available && availableMin == -1) - { - availableMin = i - } - - // Set max available - if (qualityItem.available) - { - availableMax = i - } - } - - // Set total available ticks for active slider part - if (availableMin != -1) - { - qualityModel.availableTotalTicks = availableMax - availableMin + 1 - } - - // Calculate slider values - calculateSliderStepWidth(qualityModel.totalTicks) - calculateSliderMargins(availableMin, availableMax, qualityModel.totalTicks) - - qualityModel.qualitySliderAvailableMin = availableMin - qualityModel.qualitySliderAvailableMax = availableMax - } - - function calculateSliderStepWidth (totalTicks) - { - // Do not use Math.round otherwise the tickmarks won't be aligned - qualityModel.qualitySliderStepWidth = totalTicks != 0 ? - ((settingsColumnWidth - UM.Theme.getSize("print_setup_slider_handle").width) / (totalTicks)) : 0 - } - - function calculateSliderMargins (availableMin, availableMax, totalTicks) - { - if (availableMin == -1 || (availableMin == 0 && availableMax == 0)) - { - // Do not use Math.round otherwise the tickmarks won't be aligned - qualityModel.qualitySliderMarginRight = settingsColumnWidth / 2 - } - else if (availableMin == availableMax) - { - // Do not use Math.round otherwise the tickmarks won't be aligned - qualityModel.qualitySliderMarginRight = (totalTicks - availableMin) * qualitySliderStepWidth - } - else - { - // Do not use Math.round otherwise the tickmarks won't be aligned - qualityModel.qualitySliderMarginRight = (totalTicks - availableMax) * qualitySliderStepWidth - } - } - - function reset () { - qualityModel.clear() - qualityModel.availableTotalTicks = 0 - qualityModel.existingQualityProfile = 0 - - // check, the ticks count cannot be less than zero - qualityModel.totalTicks = Math.max(0, Cura.QualityProfilesDropDownMenuModel.rowCount() - 1) - } - } - // Here are the elements that are shown in the left column - Item + + Column { - id: titleRow - width: labelColumnWidth - height: childrenRect.height - - Cura.IconWithText - { - id: qualityRowTitle - source: UM.Theme.getIcon("category_layer_height") - text: catalog.i18nc("@label", "Layer Height") - font: UM.Theme.getFont("medium") - anchors.left: parent.left - anchors.right: customisedSettings.left - } - - UM.SimpleButton - { - id: customisedSettings - - visible: Cura.SimpleModeSettingsManager.isProfileCustomized || Cura.MachineManager.hasCustomQuality - height: visible ? UM.Theme.getSize("print_setup_icon").height : 0 - width: height - anchors - { - right: parent.right - rightMargin: UM.Theme.getSize("default_margin").width - leftMargin: UM.Theme.getSize("default_margin").width - verticalCenter: parent.verticalCenter - } - - color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button") - iconSource: UM.Theme.getIcon("reset") - - onClicked: - { - // if the current profile is user-created, switch to a built-in quality - Cura.MachineManager.resetToUseDefaultQuality() - } - onEntered: - { - var tooltipContent = catalog.i18nc("@tooltip","You have modified some profile settings. If you want to change these go to custom mode.") - base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("thick_margin").width, 0), tooltipContent) - } - onExited: base.hideTooltip() - } - } - - // Show titles for the each quality slider ticks - Item - { - anchors.left: speedSlider.left - anchors.top: speedSlider.bottom - height: childrenRect.height - - Repeater - { - model: qualityModel - - Label - { - anchors.verticalCenter: parent.verticalCenter - anchors.top: parent.top - // The height has to be set manually, otherwise it's not automatically calculated in the repeater - height: UM.Theme.getSize("default_margin").height - color: (Cura.MachineManager.activeMachine != null && Cura.QualityProfilesDropDownMenuModel.getItem(index).available) ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - text: - { - var result = "" - if(Cura.MachineManager.activeMachine != null) - { - result = Cura.QualityProfilesDropDownMenuModel.getItem(index).layer_height - - if(result == undefined) - { - result = ""; - } - else - { - result = Number(Math.round(result + "e+2") + "e-2"); //Round to 2 decimals. Javascript makes this difficult... - if (result == undefined || result != result) //Parse failure. - { - result = ""; - } - } - } - return result - } - - x: - { - // Make sure the text aligns correctly with each tick - if (qualityModel.totalTicks == 0) - { - // If there is only one tick, align it centrally - return Math.round(((settingsColumnWidth) - width) / 2) - } - else if (index == 0) - { - return Math.round(settingsColumnWidth / qualityModel.totalTicks) * index - } - else if (index == qualityModel.totalTicks) - { - return Math.round(settingsColumnWidth / qualityModel.totalTicks) * index - width - } - else - { - return Math.round((settingsColumnWidth / qualityModel.totalTicks) * index - (width / 2)) - } - } - font: UM.Theme.getFont("default") - } - } - } - - // Print speed slider - // Two sliders are created, one at the bottom with the unavailable qualities - // and the other at the top with the available quality profiles and so the handle to select them. - Item - { - id: speedSlider - height: childrenRect.height - anchors { - left: titleRow.right + left: parent.left right: parent.right - verticalCenter: titleRow.verticalCenter } - // Draw unavailable slider - Slider + spacing: UM.Theme.getSize("default_margin").height + + Controls2.ButtonGroup { - id: unavailableSlider + id: activeProfileButtonGroup + exclusive: true + onClicked: Cura.IntentManager.selectIntent(button.modelData.intent_category, button.modelData.quality_type) + } - width: parent.width - height: qualitySlider.height // Same height as the slider that is on top - updateValueWhileDragging : false - tickmarksEnabled: true - - minimumValue: 0 - // maximumValue must be greater than minimumValue to be able to see the handle. While the value is strictly - // speaking not always correct, it seems to have the correct behavior (switching from 0 available to 1 available) - maximumValue: qualityModel.totalTicks - stepSize: 1 - - style: SliderStyle + Item + { + height: childrenRect.height + anchors { - //Draw Unvailable line - groove: Item - { - Rectangle - { - height: UM.Theme.getSize("print_setup_slider_groove").height - width: control.width - UM.Theme.getSize("print_setup_slider_handle").width - anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter - color: UM.Theme.getColor("quality_slider_unavailable") - } - } - - handle: Item {} - - tickmarks: Repeater - { - id: qualityRepeater - model: qualityModel.totalTicks > 0 ? qualityModel : 0 - - Rectangle - { - color: Cura.QualityProfilesDropDownMenuModel.getItem(index).available ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - implicitWidth: UM.Theme.getSize("print_setup_slider_tickmarks").width - implicitHeight: UM.Theme.getSize("print_setup_slider_tickmarks").height - anchors.verticalCenter: parent.verticalCenter - - // Do not use Math.round otherwise the tickmarks won't be aligned - x: ((UM.Theme.getSize("print_setup_slider_handle").width / 2) - (implicitWidth / 2) + (qualityModel.qualitySliderStepWidth * index)) - radius: Math.round(implicitWidth / 2) - } - } + left: parent.left + right: parent.right } - - // Create a mouse area on top of the unavailable profiles to show a specific tooltip - MouseArea + Cura.IconWithText { - anchors.fill: parent - hoverEnabled: true - enabled: !Cura.MachineManager.hasCustomQuality + id: profileLabel + source: UM.Theme.getIcon("category_layer_height") + text: catalog.i18nc("@label", "Profiles") + font: UM.Theme.getFont("medium") + width: labelColumnWidth + } + UM.SimpleButton + { + id: resetToDefaultQualityButton + + visible: Cura.SimpleModeSettingsManager.isProfileCustomized || Cura.MachineManager.hasCustomQuality + height: visible ? UM.Theme.getSize("print_setup_icon").height : 0 + width: height + anchors + { + right: profileLabel.right + rightMargin: UM.Theme.getSize("default_margin").width + leftMargin: UM.Theme.getSize("default_margin").width + verticalCenter: parent.verticalCenter + } + + color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button") + iconSource: UM.Theme.getIcon("reset") + + onClicked: + { + // if the current profile is user-created, switch to a built-in quality + Cura.MachineManager.resetToUseDefaultQuality() + } onEntered: { - var tooltipContent = catalog.i18nc("@tooltip", "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile.") - base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("thick_margin").width, customisedSettings.height), tooltipContent) + var tooltipContent = catalog.i18nc("@tooltip","You have modified some profile settings. If you want to change these go to custom mode.") + base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("thick_margin").width, 0), tooltipContent) } onExited: base.hideTooltip() } - } - // Draw available slider - Slider - { - id: qualitySlider - - width: qualityModel.qualitySliderStepWidth * (qualityModel.availableTotalTicks - 1) + UM.Theme.getSize("print_setup_slider_handle").width - height: UM.Theme.getSize("print_setup_slider_handle").height // The handle is the widest element of the slider - enabled: qualityModel.totalTicks > 0 && !Cura.SimpleModeSettingsManager.isProfileCustomized - visible: qualityModel.availableTotalTicks > 0 - updateValueWhileDragging : false - - anchors + Cura.LabelBar { - right: parent.right - rightMargin: qualityModel.qualitySliderMarginRight - } - - minimumValue: qualityModel.qualitySliderAvailableMin >= 0 ? qualityModel.qualitySliderAvailableMin : 0 - // maximumValue must be greater than minimumValue to be able to see the handle. While the value is strictly - // speaking not always correct, it seems to have the correct behavior (switching from 0 available to 1 available) - maximumValue: qualityModel.qualitySliderAvailableMax >= 1 ? qualityModel.qualitySliderAvailableMax : 1 - stepSize: 1 - - value: qualityModel.qualitySliderActiveIndex - - style: SliderStyle - { - // Draw Available line - groove: Item + id: labelbar + anchors { - Rectangle - { - height: UM.Theme.getSize("print_setup_slider_groove").height - width: control.width - UM.Theme.getSize("print_setup_slider_handle").width - anchors.verticalCenter: parent.verticalCenter - - // Do not use Math.round otherwise the tickmarks won't be aligned - x: UM.Theme.getSize("print_setup_slider_handle").width / 2 - color: UM.Theme.getColor("quality_slider_available") - } + left: profileLabel.right + right: parent.right } - handle: Rectangle - { - id: qualityhandleButton - color: UM.Theme.getColor("primary") - implicitWidth: UM.Theme.getSize("print_setup_slider_handle").width - implicitHeight: implicitWidth - radius: Math.round(implicitWidth / 2) - visible: !Cura.SimpleModeSettingsManager.isProfileCustomized && !Cura.MachineManager.hasCustomQuality && qualityModel.existingQualityProfile - } - } - - onValueChanged: - { - // only change if an active machine is set and the slider is visible at all. - if (Cura.MachineManager.activeMachine != null && visible) - { - // prevent updating during view initializing. Trigger only if the value changed by user - if (qualitySlider.value != qualityModel.qualitySliderActiveIndex && qualityModel.qualitySliderActiveIndex != -1) - { - // start updating with short delay - qualitySliderChangeTimer.start() - } - } - } - - // This mouse area is only used to capture the onHover state and don't propagate it to the unavailable mouse area - MouseArea - { - anchors.fill: parent - hoverEnabled: true - acceptedButtons: Qt.NoButton - enabled: !Cura.MachineManager.hasCustomQuality + model: Cura.QualityProfilesDropDownMenuModel + modelKey: "layer_height" } } - // This mouse area will only take the mouse events and show a tooltip when the profile in use is - // a user created profile - MouseArea - { - anchors.fill: parent - hoverEnabled: true - visible: Cura.MachineManager.hasCustomQuality - onEntered: + Repeater + { + model: Cura.IntentCategoryModel {} + Item { - var tooltipContent = catalog.i18nc("@tooltip", "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab") - base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("thick_margin").width, customisedSettings.height), tooltipContent) + anchors + { + left: parent.left + right: parent.right + } + height: intentCategoryLabel.height + + Label + { + id: intentCategoryLabel + text: model.name + width: labelColumnWidth - UM.Theme.getSize("section_icon").width + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("section_icon").width + UM.Theme.getSize("narrow_margin").width + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + elide: Text.ElideRight + } + + NoIntentIcon + { + affected_extruders: Cura.MachineManager.extruderPositionsWithNonActiveIntent + intent_type: model.name + anchors.right: intentCategoryLabel.right + anchors.rightMargin: UM.Theme.getSize("narrow_margin").width + width: intentCategoryLabel.height * 0.75 + anchors.verticalCenter: parent.verticalCenter + height: width + visible: Cura.MachineManager.activeIntentCategory == model.intent_category && affected_extruders.length + } + + Cura.RadioCheckbar + { + anchors + { + left: intentCategoryLabel.right + right: parent.right + } + dataModel: model["qualities"] + buttonGroup: activeProfileButtonGroup + + function checkedFunction(modelItem) + { + if(Cura.MachineManager.hasCustomQuality) + { + // When user created profile is active, no quality tickbox should be active. + return false + } + + if(modelItem === null) + { + return false + } + return Cura.MachineManager.activeQualityType == modelItem.quality_type && Cura.MachineManager.activeIntentCategory == modelItem.intent_category + } + + isCheckedFunction: checkedFunction + } + + MouseArea // tooltip hover area + { + anchors.fill: parent + hoverEnabled: true + enabled: model.description !== undefined + acceptedButtons: Qt.NoButton // react to hover only, don't steal clicks + + onEntered: + { + base.showTooltip( + intentCategoryLabel, + Qt.point(-(intentCategoryLabel.x - qualityRow.x) - UM.Theme.getSize("thick_margin").width, 0), + model.description + ) + } + onExited: base.hideTooltip() + } } - onExited: base.hideTooltip() + } } } \ No newline at end of file diff --git a/resources/qml/PrinterOutput/ExtruderBox.qml b/resources/qml/PrinterOutput/ExtruderBox.qml index a19c02b0dd..9825c705d5 100644 --- a/resources/qml/PrinterOutput/ExtruderBox.qml +++ b/resources/qml/PrinterOutput/ExtruderBox.qml @@ -1,3 +1,6 @@ +//Copyright (c) 2019 Ultimaker B.V. +//Cura is released under the terms of the LGPLv3 or higher. + import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 @@ -35,7 +38,7 @@ Item Label //Extruder name. { - text: Cura.ExtruderManager.getExtruderName(position) != "" ? Cura.ExtruderManager.getExtruderName(position) : catalog.i18nc("@label", "Extruder") + text: Cura.MachineManager.activeMachine.extruders[position].name !== "" ? Cura.MachineManager.activeMachine.extruders[position].name : catalog.i18nc("@label", "Extruder") color: UM.Theme.getColor("text") font: UM.Theme.getFont("default") anchors.left: parent.left diff --git a/resources/qml/PrinterSelector/MachineSelectorButton.qml b/resources/qml/PrinterSelector/MachineSelectorButton.qml index c37823ba82..115957dd64 100644 --- a/resources/qml/PrinterSelector/MachineSelectorButton.qml +++ b/resources/qml/PrinterSelector/MachineSelectorButton.qml @@ -72,6 +72,7 @@ Button verticalCenter: parent.verticalCenter } spacing: UM.Theme.getSize("narrow_margin").width + visible: (updatePrinterTypesOnlyWhenChecked && machineSelectorButton.checked) || !updatePrinterTypesOnlyWhenChecked Repeater { diff --git a/resources/qml/PrinterSelector/MachineSelectorList.qml b/resources/qml/PrinterSelector/MachineSelectorList.qml index 9c52c15580..a7c041630f 100644 --- a/resources/qml/PrinterSelector/MachineSelectorList.qml +++ b/resources/qml/PrinterSelector/MachineSelectorList.qml @@ -32,7 +32,7 @@ ListView width: listView.width outputDevice: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null - checked: Cura.MachineManager.activeMachineId == model.id + checked: Cura.MachineManager.activeMachine.id == model.id onClicked: { diff --git a/resources/qml/RadioCheckbar.qml b/resources/qml/RadioCheckbar.qml new file mode 100644 index 0000000000..dfd9ca8628 --- /dev/null +++ b/resources/qml/RadioCheckbar.qml @@ -0,0 +1,152 @@ +// 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 QtQuick.Layouts 1.3 +import UM 1.1 as UM + +Item +{ + id: base + property ButtonGroup buttonGroup: null + + property color activeColor: UM.Theme.getColor("primary") + property color inactiveColor: UM.Theme.getColor("slider_groove") + property color defaultItemColor: UM.Theme.getColor("small_button_active") + property int checkboxSize: Math.round(UM.Theme.getSize("radio_button").height * 0.75) + property int inactiveMarkerSize: 2 * barSize + property int barSize: UM.Theme.getSize("slider_groove_radius").height + property var isCheckedFunction // Function that accepts the modelItem and returns if the item should be active. + + implicitWidth: 200 * screenScaleFactor + implicitHeight: checkboxSize + + property var dataModel: null + + // The horizontal inactive bar that sits behind the buttons + Rectangle + { + id: inactiveLine + color: inactiveColor + + height: barSize + + anchors + { + left: buttonBar.left + right: buttonBar.right + leftMargin: Math.round((checkboxSize - inactiveMarkerSize) / 2) + rightMargin: Math.round((checkboxSize - inactiveMarkerSize) / 2) + verticalCenter: parent.verticalCenter + } + } + + + RowLayout + { + id: buttonBar + anchors.top: parent.top + height: checkboxSize + width: parent.width + spacing: 0 + + Repeater + { + id: repeater + model: base.dataModel + height: checkboxSize + Item + { + Layout.fillWidth: true + Layout.fillHeight: true + // The last item of the repeater needs to be shorter, as we don't need another part to fit + // the horizontal bar. The others should essentially not be limited. + Layout.maximumWidth: index + 1 === repeater.count ? activeComponent.width : 200000000 + + property bool isEnabled: model.available + // The horizontal bar between the checkable options. + // Note that the horizontal bar points towards the previous item. + Rectangle + { + property Item previousItem: repeater.itemAt(index - 1) + + height: barSize + width: Math.round(buttonBar.width / (repeater.count - 1) - activeComponent.width - 2) + color: defaultItemColor + + anchors + { + right: activeComponent.left + verticalCenter: parent.verticalCenter + } + visible: previousItem !== null && previousItem.isEnabled && isEnabled + } + Loader + { + id: activeComponent + sourceComponent: isEnabled? checkboxComponent : disabledComponent + width: checkboxSize + + property var modelItem: model + } + } + } + } + + Component + { + id: disabledComponent + Item + { + height: checkboxSize + width: checkboxSize + + Rectangle + { + // This can (and should) be done wiht a verticalCenter. For some reason it does work in QtCreator + // but not when using the exact same QML in Cura. + anchors.verticalCenter: parent ? parent.verticalCenter : undefined + anchors.horizontalCenter: parent ? parent.horizontalCenter : undefined + height: inactiveMarkerSize + width: inactiveMarkerSize + radius: Math.round(width / 2) + color: inactiveColor + } + } + } + + Component + { + id: checkboxComponent + CheckBox + { + id: checkbox + ButtonGroup.group: buttonGroup + width: checkboxSize + height: checkboxSize + property var modelData: modelItem + + checked: isCheckedFunction(modelItem) + indicator: Rectangle + { + height: checkboxSize + width: checkboxSize + radius: Math.round(width / 2) + + border.color: defaultItemColor + + Rectangle + { + anchors + { + fill: parent + } + radius: Math.round(width / 2) + color: activeColor + visible: checkbox.checked + } + } + } + } +} diff --git a/resources/qml/Settings/SettingCheckBox.qml b/resources/qml/Settings/SettingCheckBox.qml index 0c7321d08a..f5100eab74 100644 --- a/resources/qml/Settings/SettingCheckBox.qml +++ b/resources/qml/Settings/SettingCheckBox.qml @@ -29,7 +29,7 @@ SettingItem // 4: variant // 5: machine var value - if ((base.resolve != "None") && (stackLevel != 0) && (stackLevel != 1)) + if ((base.resolve !== undefined && base.resolve != "None") && (stackLevel != 0) && (stackLevel != 1)) { // We have a resolve function. Indicates that the setting is not settable per extruder and that // we have to choose between the resolved value (default) and the global value @@ -91,12 +91,51 @@ SettingItem } width: height - color: + radius: UM.Theme.getSize("setting_control_radius").width + border.width: UM.Theme.getSize("default_lining").width + + border.color: { + if(!enabled) + { + return UM.Theme.getColor("setting_control_disabled_border") + } + switch (propertyProvider.properties.validationState) + { + case "ValidatorState.Invalid": + case "ValidatorState.Exception": + case "ValidatorState.MinimumError": + case "ValidatorState.MaximumError": + return UM.Theme.getColor("setting_validation_error"); + case "ValidatorState.MinimumWarning": + case "ValidatorState.MaximumWarning": + return UM.Theme.getColor("setting_validation_warning"); + } + // Validation is OK. + if (control.containsMouse || control.activeFocus || hovered) + { + return UM.Theme.getColor("setting_control_border_highlight") + } + return UM.Theme.getColor("setting_control_border") + } + + color: { if (!enabled) { return UM.Theme.getColor("setting_control_disabled") } + switch (propertyProvider.properties.validationState) + { + case "ValidatorState.Invalid": + case "ValidatorState.Exception": + case "ValidatorState.MinimumError": + case "ValidatorState.MaximumError": + return UM.Theme.getColor("setting_validation_error_background") + case "ValidatorState.MinimumWarning": + case "ValidatorState.MaximumWarning": + return UM.Theme.getColor("setting_validation_warning_background") + } + // Validation is OK. if (control.containsMouse || control.activeFocus) { return UM.Theme.getColor("setting_control_highlight") @@ -104,21 +143,6 @@ SettingItem return UM.Theme.getColor("setting_control") } - radius: UM.Theme.getSize("setting_control_radius").width - border.width: UM.Theme.getSize("default_lining").width - border.color: - { - if (!enabled) - { - return UM.Theme.getColor("setting_control_disabled_border") - } - if (control.containsMouse || control.activeFocus) - { - return UM.Theme.getColor("setting_control_border_highlight") - } - return UM.Theme.getColor("setting_control_border") - } - UM.RecolorImage { anchors.verticalCenter: parent.verticalCenter diff --git a/resources/qml/Settings/SettingComboBox.qml b/resources/qml/Settings/SettingComboBox.qml index 37df0bd9b9..cbabb3ffd4 100644 --- a/resources/qml/Settings/SettingComboBox.qml +++ b/resources/qml/Settings/SettingComboBox.qml @@ -12,7 +12,6 @@ SettingItem { id: base property var focusItem: control - contents: Cura.ComboBox { id: control @@ -54,7 +53,7 @@ SettingItem { // FIXME this needs to go away once 'resolve' is combined with 'value' in our data model. var value = undefined - if ((base.resolve != "None") && (base.stackLevel != 0) && (base.stackLevel != 1)) + if ((base.resolve !== undefined && base.resolve != "None") && (base.stackLevel != 0) && (base.stackLevel != 1)) { // We have a resolve function. Indicates that the setting is not settable per extruder and that // we have to choose between the resolved value (default) and the global value diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index a95c888176..c851b7c042 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -33,9 +33,23 @@ Item // Create properties to put property provider stuff in (bindings break in qt 5.5.1 otherwise) property var state: propertyProvider.properties.state // There is no resolve property if there is only one stack. - property var resolve: Cura.MachineManager.activeStackId !== Cura.MachineManager.activeMachineId ? propertyProvider.properties.resolve : "None" + property var resolve: Cura.MachineManager.activeStackId !== Cura.MachineManager.activeMachine.id ? propertyProvider.properties.resolve : "None" property var stackLevels: propertyProvider.stackLevels property var stackLevel: stackLevels[0] + // A list of stack levels that will trigger to show the revert button + property var showRevertStackLevels: [0] + property bool resetButtonVisible: { + var is_revert_stack_level = false; + for (var i in base.showRevertStackLevels) + { + if (base.stackLevel == i) + { + is_revert_stack_level = true + break + } + } + return is_revert_stack_level && base.showRevertButton + } signal focusReceived() signal setActiveFocusToNextSetting(bool forward) @@ -184,7 +198,7 @@ Item { id: revertButton - visible: base.stackLevel == 0 && base.showRevertButton + visible: base.resetButtonVisible height: parent.height width: height diff --git a/resources/qml/Settings/SettingTextField.qml b/resources/qml/Settings/SettingTextField.qml index 770ef53900..096f320a7c 100644 --- a/resources/qml/Settings/SettingTextField.qml +++ b/resources/qml/Settings/SettingTextField.qml @@ -42,6 +42,7 @@ SettingItem } switch(propertyProvider.properties.validationState) { + case "ValidatorState.Invalid": case "ValidatorState.Exception": case "ValidatorState.MinimumError": case "ValidatorState.MaximumError": @@ -65,6 +66,7 @@ SettingItem } switch(propertyProvider.properties.validationState) { + case "ValidatorState.Invalid": case "ValidatorState.Exception": case "ValidatorState.MinimumError": case "ValidatorState.MaximumError": diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 848dc7d5cb..c2f23a6f1d 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -65,7 +65,7 @@ Item anchors.right: clearFilterButton.left anchors.rightMargin: Math.round(UM.Theme.getSize("thick_margin").width) - placeholderText: "" + "
" + catalog.i18nc("@label:textbox", "search settings") + placeholderText: "" + "
" + catalog.i18nc("@label:textbox", "Search settings") style: TextFieldStyle { @@ -512,12 +512,7 @@ Item text: catalog.i18nc("@action:menu", "Hide this setting"); onTriggered: { - definitionsModel.hide(contextMenu.key); - // visible settings have changed, so we're no longer showing a preset - if (settingVisibilityPresetsModel.activePreset != "") - { - settingVisibilityPresetsModel.setActivePreset("custom"); - } + definitionsModel.hide(contextMenu.key) } } MenuItem @@ -545,11 +540,6 @@ Item { definitionsModel.show(contextMenu.key); } - // visible settings have changed, so we're no longer showing a preset - if (settingVisibilityPresetsModel.activePreset != "") - { - settingVisibilityPresetsModel.setActivePreset("custom"); - } } } MenuItem diff --git a/resources/qml/ViewOrientationControls.qml b/resources/qml/ViewOrientationControls.qml index 51ed6e3dcb..97f2bb9400 100644 --- a/resources/qml/ViewOrientationControls.qml +++ b/resources/qml/ViewOrientationControls.qml @@ -6,7 +6,7 @@ import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 import UM 1.4 as UM - +import Cura 1.1 as Cura // A row of buttons that control the view direction Row { @@ -19,30 +19,65 @@ Row ViewOrientationButton { iconSource: UM.Theme.getIcon("view_3d") - onClicked: UM.Controller.rotateView("3d", 0) + onClicked: Cura.Actions.view3DCamera.trigger() + + UM.TooltipArea + { + anchors.fill: parent + text: catalog.i18nc("@info:tooltip", "3D View") + acceptedButtons: Qt.NoButton + } } ViewOrientationButton { iconSource: UM.Theme.getIcon("view_front") - onClicked: UM.Controller.rotateView("home", 0) + onClicked: Cura.Actions.viewFrontCamera.trigger() + + UM.TooltipArea + { + anchors.fill: parent + text: catalog.i18nc("@info:tooltip", "Front View") + acceptedButtons: Qt.NoButton + } } ViewOrientationButton { iconSource: UM.Theme.getIcon("view_top") - onClicked: UM.Controller.rotateView("y", 90) + onClicked: Cura.Actions.viewTopCamera.trigger() + + UM.TooltipArea + { + anchors.fill: parent + text: catalog.i18nc("@info:tooltip", "Top View") + acceptedButtons: Qt.NoButton + } } ViewOrientationButton { iconSource: UM.Theme.getIcon("view_left") - onClicked: UM.Controller.rotateView("x", 90) + onClicked: Cura.Actions.viewLeftSideCamera.trigger() + + UM.TooltipArea + { + anchors.fill: parent + text: catalog.i18nc("@info:tooltip", "Left View") + acceptedButtons: Qt.NoButton + } } ViewOrientationButton { iconSource: UM.Theme.getIcon("view_right") - onClicked: UM.Controller.rotateView("x", -90) + onClicked: Cura.Actions.viewRightSideCamera.trigger() + + UM.TooltipArea + { + anchors.fill: parent + text: catalog.i18nc("@info:tooltip", "Right View") + acceptedButtons: Qt.NoButton + } } } diff --git a/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml b/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml index 3dd9e86ee9..e4a7a98308 100644 --- a/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml +++ b/resources/qml/WelcomePages/AddLocalPrinterScrollView.qml @@ -22,9 +22,12 @@ Item ? machineList.model.getItem(machineList.currentIndex) : null // The currently active (expanded) section/category, where section/category is the grouping of local machine items. - property string currentSection: preferredCategory + property string currentSection: "Ultimaker B.V." // By default (when this list shows up) we always expand the "Ultimaker" section. - property string preferredCategory: "Ultimaker" + property var preferredCategories: { + "Ultimaker B.V.": -2, + "Custom": -1 + } property int maxItemCountAtOnce: 10 // show at max 10 items at once, otherwise you need to scroll. @@ -83,14 +86,18 @@ Item { id: machineList - cacheBuffer: 1000000 // Set a large cache to effectively just cache every list item. + // CURA-6793 + // Enabling the buffer seems to cause the blank items issue. When buffer is enabled, if the ListView's + // individual item has a dynamic change on its visibility, the ListView doesn't redraw itself. + // The default value of cacheBuffer is platform-dependent, so we explicitly disable it here. + cacheBuffer: 0 model: UM.DefinitionContainersModel { id: machineDefinitionsModel filter: { "visible": true } - sectionProperty: "category" - preferredSectionValue: preferredCategory + sectionProperty: "manufacturer" + preferredSections: preferredCategories } section.property: "section" diff --git a/resources/qml/WelcomePages/AddPrinterByIpContent.qml b/resources/qml/WelcomePages/AddPrinterByIpContent.qml index 4aec5879c1..5ab0217f01 100644 --- a/resources/qml/WelcomePages/AddPrinterByIpContent.qml +++ b/resources/qml/WelcomePages/AddPrinterByIpContent.qml @@ -99,7 +99,7 @@ Item font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") renderType: Text.NativeRendering - text: catalog.i18nc("@label", "Enter the IP address or hostname of your printer on the network.") + text: catalog.i18nc("@label", "Enter the IP address of your printer on the network.") } Item diff --git a/resources/qml/Widgets/ComboBox.qml b/resources/qml/Widgets/ComboBox.qml index 6ce7c6da45..5a1ff16b95 100644 --- a/resources/qml/Widgets/ComboBox.qml +++ b/resources/qml/Widgets/ComboBox.qml @@ -15,39 +15,33 @@ ComboBox { id: control + states: [ + State + { + name: "disabled" + when: !control.enabled + PropertyChanges { target: backgroundRectangle.border; color: UM.Theme.getColor("setting_control_disabled_border")} + PropertyChanges { target: backgroundRectangle; color: UM.Theme.getColor("setting_control_disabled")} + PropertyChanges { target: contentLabel; color: UM.Theme.getColor("setting_control_disabled_text")} + }, + State + { + name: "highlighted" + when: control.hovered || control.activeFocus + PropertyChanges { target: backgroundRectangle.border; color: UM.Theme.getColor("setting_control_border_highlight") } + PropertyChanges { target: backgroundRectangle; color: UM.Theme.getColor("setting_control_highlight")} + } + ] + background: Rectangle { - color: - { - if (!enabled) - { - return UM.Theme.getColor("setting_control_disabled") - } - - if (control.hovered || control.activeFocus) - { - return UM.Theme.getColor("setting_control_highlight") - } - - return UM.Theme.getColor("setting_control") - } + id: backgroundRectangle + color: UM.Theme.getColor("setting_control") radius: UM.Theme.getSize("setting_control_radius").width border.width: UM.Theme.getSize("default_lining").width - border.color: - { - if (!enabled) - { - return UM.Theme.getColor("setting_control_disabled_border") - } + border.color: UM.Theme.getColor("setting_control_border") - if (control.hovered || control.activeFocus) - { - return UM.Theme.getColor("setting_control_border_highlight") - } - - return UM.Theme.getColor("setting_control_border") - } } indicator: UM.RecolorImage @@ -67,6 +61,7 @@ ComboBox contentItem: Label { + id: contentLabel anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("setting_unit_margin").width anchors.verticalCenter: parent.verticalCenter @@ -76,7 +71,7 @@ ComboBox textFormat: Text.PlainText renderType: Text.NativeRendering font: UM.Theme.getFont("default") - color: !enabled ? UM.Theme.getColor("setting_control_disabled_text") : UM.Theme.getColor("setting_control_text") + color: UM.Theme.getColor("setting_control_text") elide: Text.ElideRight verticalAlignment: Text.AlignVCenter } diff --git a/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg b/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg index 875812f950..b975628e11 100644 --- a/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = abax_pri3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/abax_pri3/apri3_pla_high.inst.cfg b/resources/quality/abax_pri3/apri3_pla_high.inst.cfg index ed614faecd..55fde0e4f9 100644 --- a/resources/quality/abax_pri3/apri3_pla_high.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = abax_pri3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg b/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg index 855335780e..7ecd48919b 100644 --- a/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = abax_pri3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg b/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg index 55bfc6a755..08d0696860 100644 --- a/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = abax_pri5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/abax_pri5/apri5_pla_high.inst.cfg b/resources/quality/abax_pri5/apri5_pla_high.inst.cfg index 4d6abb7f78..c3375f12a6 100644 --- a/resources/quality/abax_pri5/apri5_pla_high.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = abax_pri5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg b/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg index a23f1808a1..f18e38f468 100644 --- a/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = abax_pri5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/abax_titan/atitan_pla_fast.inst.cfg b/resources/quality/abax_titan/atitan_pla_fast.inst.cfg index bd099abec2..3d66e6a212 100644 --- a/resources/quality/abax_titan/atitan_pla_fast.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = abax_titan [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/abax_titan/atitan_pla_high.inst.cfg b/resources/quality/abax_titan/atitan_pla_high.inst.cfg index 49482953cf..9804541e1f 100644 --- a/resources/quality/abax_titan/atitan_pla_high.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = abax_titan [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/abax_titan/atitan_pla_normal.inst.cfg b/resources/quality/abax_titan/atitan_pla_normal.inst.cfg index 65cfb075f0..163797dff4 100644 --- a/resources/quality/abax_titan/atitan_pla_normal.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = abax_titan [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_draft.inst.cfg b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_draft.inst.cfg index 47d6d80527..d006c5d47b 100644 --- a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_draft.inst.cfg +++ b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_high.inst.cfg b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_high.inst.cfg index 5f8e38800c..9965525d59 100644 --- a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_high.inst.cfg +++ b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_normal.inst.cfg b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_normal.inst.cfg index 9fc17d2294..96655e7b0f 100644 --- a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_normal.inst.cfg +++ b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/anycubic_4max/anycubic_4max_draft.inst.cfg b/resources/quality/anycubic_4max/anycubic_4max_draft.inst.cfg index 3d3f9fdca6..13716895a5 100644 --- a/resources/quality/anycubic_4max/anycubic_4max_draft.inst.cfg +++ b/resources/quality/anycubic_4max/anycubic_4max_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/anycubic_4max/anycubic_4max_high.inst.cfg b/resources/quality/anycubic_4max/anycubic_4max_high.inst.cfg index f30a53af78..7801e1462b 100644 --- a/resources/quality/anycubic_4max/anycubic_4max_high.inst.cfg +++ b/resources/quality/anycubic_4max/anycubic_4max_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/anycubic_4max/anycubic_4max_normal.inst.cfg b/resources/quality/anycubic_4max/anycubic_4max_normal.inst.cfg index e687709bd2..c97b5fa0d6 100644 --- a/resources/quality/anycubic_4max/anycubic_4max_normal.inst.cfg +++ b/resources/quality/anycubic_4max/anycubic_4max_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_draft.inst.cfg b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_draft.inst.cfg index 69c5b4684c..f878a78bc2 100644 --- a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_draft.inst.cfg +++ b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_high.inst.cfg b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_high.inst.cfg index 7fcdbf065e..eb867e9898 100644 --- a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_high.inst.cfg +++ b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_normal.inst.cfg b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_normal.inst.cfg index dd1babf627..47bf46ffd0 100644 --- a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_normal.inst.cfg +++ b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_draft.inst.cfg b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_draft.inst.cfg index 84b11721de..d26f8a7eba 100644 --- a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_draft.inst.cfg +++ b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_high.inst.cfg b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_high.inst.cfg index 90277985bb..4299c74820 100644 --- a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_high.inst.cfg +++ b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_normal.inst.cfg b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_normal.inst.cfg index 3ce5342684..dfc6bbc8ae 100644 --- a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_normal.inst.cfg +++ b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_draft.inst.cfg b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_draft.inst.cfg index 9fce900fc2..70549350ef 100644 --- a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_draft.inst.cfg +++ b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_high.inst.cfg b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_high.inst.cfg index 5bc075d316..5d4fe3f047 100644 --- a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_high.inst.cfg +++ b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_normal.inst.cfg b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_normal.inst.cfg index 50fd145fd2..16a7132b02 100644 --- a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_normal.inst.cfg +++ b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = anycubic_4max [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/anycubic_chiron/anycubic_chiron_draft.inst.cfg b/resources/quality/anycubic_chiron/anycubic_chiron_draft.inst.cfg index 6011fdbb32..0789dd5837 100644 --- a/resources/quality/anycubic_chiron/anycubic_chiron_draft.inst.cfg +++ b/resources/quality/anycubic_chiron/anycubic_chiron_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = anycubic_chiron [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/anycubic_chiron/anycubic_chiron_high.inst.cfg b/resources/quality/anycubic_chiron/anycubic_chiron_high.inst.cfg index 93561d9956..53027f220c 100644 --- a/resources/quality/anycubic_chiron/anycubic_chiron_high.inst.cfg +++ b/resources/quality/anycubic_chiron/anycubic_chiron_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = anycubic_chiron [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/anycubic_chiron/anycubic_chiron_normal.inst.cfg b/resources/quality/anycubic_chiron/anycubic_chiron_normal.inst.cfg index d1496ff187..fedbac5a1c 100644 --- a/resources/quality/anycubic_chiron/anycubic_chiron_normal.inst.cfg +++ b/resources/quality/anycubic_chiron/anycubic_chiron_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = anycubic_chiron [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg index dddc657296..868c0a088e 100644 --- a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg +++ b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = anycubic_i3_mega [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg index 87ec96ed96..6c7eb77fac 100644 --- a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg +++ b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = anycubic_i3_mega [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg index 526cb9bc5e..d4d578d4cb 100644 --- a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg +++ b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = anycubic_i3_mega [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg index c5ccd5a864..42e658333e 100644 --- a/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg index b2a5811bfa..cefd8d6b0a 100644 --- a/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg index 8c727d9bd3..e087a95b96 100644 --- a/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg index 07f6404f62..580b296860 100644 --- a/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg index df42b0ee3b..8cefa3a69d 100644 --- a/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg index dca42bc4c0..718b4e7c26 100644 --- a/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg index a5099b36b8..fbf9ababf9 100644 --- a/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg index cad98cba5c..16515f76a9 100644 --- a/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg index dcf7974c4c..cb3b0a7adb 100644 --- a/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg index 4eec6d3d4f..7d4a0247fa 100644 --- a/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg index a94bfab748..391174b1f2 100644 --- a/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg index 83fe257b96..ac6ca153b4 100644 --- a/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg index 06e337be77..dd111f5958 100644 --- a/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg index e2f002343e..28cdd75af6 100644 --- a/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg index 0e026befb2..b4bf76d3ef 100644 --- a/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg index 2638a06d89..ab3cd5f97c 100644 --- a/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg index 89b6720617..b30e902e99 100644 --- a/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg index 68c9f5102b..f8272e1aa6 100644 --- a/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg index fd1a1ece09..b919c0f74f 100644 --- a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg index 909a23edeb..7232de4e4e 100644 --- a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg index b66931ef40..5c9efabda7 100644 --- a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg index d29b3acf65..2b48f4d213 100644 --- a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg index dc910c5e06..dfc2f61659 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg index 2792261dd6..ce0b49d016 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg index 498afd9772..1028df1210 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg index 66b467de07..6aed341c87 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg index d030257fb0..90c2b26490 100644 --- a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg index c606e778b6..b3a51a71fa 100644 --- a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg index 77a1c7312c..c47cfd8a98 100644 --- a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg index 8f9d28bbac..d15d00d1f4 100644 --- a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extra coarse weight = -4 diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg index 9faeef3b42..dd41219d64 100644 --- a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg index 3dae1d45d7..244f0ca147 100644 --- a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg index 61000f0912..71edea47d1 100644 --- a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg index 4d4cf5e37d..b77d4ee730 100644 --- a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg index 76071d46bc..a7482e50b2 100644 --- a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg index 304f38e105..7064d34ae1 100644 --- a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg index 5aaede062d..28a0faee3b 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg index 75a4b94541..0b1e060a42 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg index 391c87f28c..9a7df57f76 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg index 415951f4ee..48e61387d0 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg index f75dd933a6..39eda78f37 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg index e95037c242..b6655bf6ac 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg index 4896d60aca..b444618d43 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg index 803cb2b849..3dbeb498d8 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg index 7217d3524d..5f95a7a049 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg index 8a7b46a817..dea47eb923 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg index 41dd55cfce..e72ccd529f 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg index 75cd29e4a3..7a37916357 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg index 66c425078d..04b6832974 100644 --- a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg index eea872ed0f..2a75d4a716 100644 --- a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg index 12327636a7..d038937fb4 100644 --- a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg index 70c4f68135..701ecc115f 100644 --- a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg index cd4f112370..6721d6dc96 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg index 9fae8bfe23..3228949fe5 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg index bebffc072b..5b5894f8e8 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg index 40c47b24a1..f62ddc947e 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg index 3b6e326495..2e755ac25d 100644 --- a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg index 17efcfc1ce..0f70febcc2 100644 --- a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg index 9c6840d5ba..ad6933bfac 100644 --- a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg index 9fe00be066..cac3dbca16 100644 --- a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg index 6da3d2100a..7eeb544314 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg index c6d45d5faa..15b87d513b 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg index 4a06499b5f..966cac8e2f 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg index 2ab3fe3340..0bf96f083b 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg index 7d19528283..6fefd1eb64 100644 --- a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg index 994f9b886a..8a9131edf5 100644 --- a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg index f8227cfcd9..0c66584e80 100644 --- a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg index 385b79e368..6e790bc1c1 100644 --- a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg index b99a972195..3136f27a62 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg index 31fd7ddb8a..c2f80ae30d 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extra coarse weight = -4 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg index c93923e70a..648b34d05c 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg index 98e2a9bbbb..1d1b697c6b 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg index 444ac7bbc4..b7c8ff5291 100644 --- a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg index 0b03607e34..8cb38eb36a 100644 --- a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg index b08e0d2671..b06d646eca 100644 --- a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg index 32ce160df1..a40f56ed48 100644 --- a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg index a6fdd82b5c..05a5a9521c 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg index 496ecc085d..65982c8085 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg index e440fdfe3f..344868276b 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg index c1ad10abe1..b0cc949d2d 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/coarse.inst.cfg b/resources/quality/coarse.inst.cfg index 3f5e3f47ce..1d68ca93af 100644 --- a/resources/quality/coarse.inst.cfg +++ b/resources/quality/coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = fdmprinter [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/creality/base/base_0.2_ABS_super.inst.cfg b/resources/quality/creality/base/base_0.2_ABS_super.inst.cfg new file mode 100644 index 0000000000..866f7a38c5 --- /dev/null +++ b/resources/quality/creality/base/base_0.2_ABS_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_abs +variant = 0.2mm Nozzle + +[values] +wall_thickness = =line_width*8 diff --git a/resources/quality/creality/base/base_0.2_ABS_ultra.inst.cfg b/resources/quality/creality/base/base_0.2_ABS_ultra.inst.cfg new file mode 100644 index 0000000000..a17ead7619 --- /dev/null +++ b/resources/quality/creality/base/base_0.2_ABS_ultra.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Ultra Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = ultra +material = generic_abs +variant = 0.2mm Nozzle + +[values] +wall_thickness = =line_width*8 diff --git a/resources/quality/creality/base/base_0.2_PETG_super.inst.cfg b/resources/quality/creality/base/base_0.2_PETG_super.inst.cfg new file mode 100644 index 0000000000..4d583e8297 --- /dev/null +++ b/resources/quality/creality/base/base_0.2_PETG_super.inst.cfg @@ -0,0 +1,17 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_petg +variant = 0.2mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*8 +#retraction_extra_prime_amount = 0.5 + diff --git a/resources/quality/creality/base/base_0.2_PETG_ultra.inst.cfg b/resources/quality/creality/base/base_0.2_PETG_ultra.inst.cfg new file mode 100644 index 0000000000..2cd3ca81a6 --- /dev/null +++ b/resources/quality/creality/base/base_0.2_PETG_ultra.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Ultra Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = ultra +material = generic_petg +variant = 0.2mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*8 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.2_PLA_super.inst.cfg b/resources/quality/creality/base/base_0.2_PLA_super.inst.cfg new file mode 100644 index 0000000000..5121fde104 --- /dev/null +++ b/resources/quality/creality/base/base_0.2_PLA_super.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_pla +variant = 0.2mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.2_PLA_ultra.inst.cfg b/resources/quality/creality/base/base_0.2_PLA_ultra.inst.cfg new file mode 100644 index 0000000000..0ff4f900a6 --- /dev/null +++ b/resources/quality/creality/base/base_0.2_PLA_ultra.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Ultra Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = ultra +material = generic_pla +variant = 0.2mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.3_ABS_adaptive.inst.cfg b/resources/quality/creality/base/base_0.3_ABS_adaptive.inst.cfg new file mode 100644 index 0000000000..93bcfb6a94 --- /dev/null +++ b/resources/quality/creality/base/base_0.3_ABS_adaptive.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Dynamic Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = adaptive +material = generic_abs +variant = 0.3mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/creality/base/base_0.3_ABS_low.inst.cfg b/resources/quality/creality/base/base_0.3_ABS_low.inst.cfg new file mode 100644 index 0000000000..0c171dbe8f --- /dev/null +++ b/resources/quality/creality/base/base_0.3_ABS_low.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Low Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = low +material = generic_abs +variant = 0.3mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/creality/base/base_0.3_ABS_standard.inst.cfg b/resources/quality/creality/base/base_0.3_ABS_standard.inst.cfg new file mode 100644 index 0000000000..1dfa94777e --- /dev/null +++ b/resources/quality/creality/base/base_0.3_ABS_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_abs +variant = 0.3mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/creality/base/base_0.3_ABS_super.inst.cfg b/resources/quality/creality/base/base_0.3_ABS_super.inst.cfg new file mode 100644 index 0000000000..dbe3b2f2ed --- /dev/null +++ b/resources/quality/creality/base/base_0.3_ABS_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_abs +variant = 0.3mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/creality/base/base_0.3_PETG_adaptive.inst.cfg b/resources/quality/creality/base/base_0.3_PETG_adaptive.inst.cfg new file mode 100644 index 0000000000..e36587e18d --- /dev/null +++ b/resources/quality/creality/base/base_0.3_PETG_adaptive.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Dynamic Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = adaptive +material = generic_petg +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.3_PETG_low.inst.cfg b/resources/quality/creality/base/base_0.3_PETG_low.inst.cfg new file mode 100644 index 0000000000..16bfd42486 --- /dev/null +++ b/resources/quality/creality/base/base_0.3_PETG_low.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Low Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = low +material = generic_petg +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.3_PETG_standard.inst.cfg b/resources/quality/creality/base/base_0.3_PETG_standard.inst.cfg new file mode 100644 index 0000000000..ba1f772400 --- /dev/null +++ b/resources/quality/creality/base/base_0.3_PETG_standard.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_petg +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.3_PETG_super.inst.cfg b/resources/quality/creality/base/base_0.3_PETG_super.inst.cfg new file mode 100644 index 0000000000..ea413ae19a --- /dev/null +++ b/resources/quality/creality/base/base_0.3_PETG_super.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_petg +variant = 0.3mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.3_PLA_adaptive.inst.cfg b/resources/quality/creality/base/base_0.3_PLA_adaptive.inst.cfg new file mode 100644 index 0000000000..002967d7a7 --- /dev/null +++ b/resources/quality/creality/base/base_0.3_PLA_adaptive.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Dynamic Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = adaptive +material = generic_pla +variant = 0.3mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.3_PLA_low.inst.cfg b/resources/quality/creality/base/base_0.3_PLA_low.inst.cfg new file mode 100644 index 0000000000..f2d98137a7 --- /dev/null +++ b/resources/quality/creality/base/base_0.3_PLA_low.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Low Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = low +material = generic_pla +variant = 0.3mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.3_PLA_standard.inst.cfg b/resources/quality/creality/base/base_0.3_PLA_standard.inst.cfg new file mode 100644 index 0000000000..a8bbd71d89 --- /dev/null +++ b/resources/quality/creality/base/base_0.3_PLA_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_pla +variant = 0.3mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.3_PLA_super.inst.cfg b/resources/quality/creality/base/base_0.3_PLA_super.inst.cfg new file mode 100644 index 0000000000..9d10e6512a --- /dev/null +++ b/resources/quality/creality/base/base_0.3_PLA_super.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_pla +variant = 0.3mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.3_TPU_adaptive.inst.cfg b/resources/quality/creality/base/base_0.3_TPU_adaptive.inst.cfg new file mode 100644 index 0000000000..93deb58aa7 --- /dev/null +++ b/resources/quality/creality/base/base_0.3_TPU_adaptive.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Dynamic Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = adaptive +material = generic_tpu +variant = 0.3mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.3_TPU_standard.inst.cfg b/resources/quality/creality/base/base_0.3_TPU_standard.inst.cfg new file mode 100644 index 0000000000..3311cd309a --- /dev/null +++ b/resources/quality/creality/base/base_0.3_TPU_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_tpu +variant = 0.3mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.3_TPU_super.inst.cfg b/resources/quality/creality/base/base_0.3_TPU_super.inst.cfg new file mode 100644 index 0000000000..ef0a275474 --- /dev/null +++ b/resources/quality/creality/base/base_0.3_TPU_super.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_tpu +variant = 0.3mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.4_ABS_adaptive.inst.cfg b/resources/quality/creality/base/base_0.4_ABS_adaptive.inst.cfg new file mode 100644 index 0000000000..bddaac624e --- /dev/null +++ b/resources/quality/creality/base/base_0.4_ABS_adaptive.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Dynamic Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = adaptive +material = generic_abs +variant = 0.4mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/creality/base/base_0.4_ABS_low.inst.cfg b/resources/quality/creality/base/base_0.4_ABS_low.inst.cfg new file mode 100644 index 0000000000..f064cd7395 --- /dev/null +++ b/resources/quality/creality/base/base_0.4_ABS_low.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Low Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = low +material = generic_abs +variant = 0.4mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/creality/base/base_0.4_ABS_standard.inst.cfg b/resources/quality/creality/base/base_0.4_ABS_standard.inst.cfg new file mode 100644 index 0000000000..b3adb0fa35 --- /dev/null +++ b/resources/quality/creality/base/base_0.4_ABS_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_abs +variant = 0.4mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/creality/base/base_0.4_ABS_super.inst.cfg b/resources/quality/creality/base/base_0.4_ABS_super.inst.cfg new file mode 100644 index 0000000000..6cebb415ea --- /dev/null +++ b/resources/quality/creality/base/base_0.4_ABS_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_abs +variant = 0.4mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/creality/base/base_0.4_PETG_adaptive.inst.cfg b/resources/quality/creality/base/base_0.4_PETG_adaptive.inst.cfg new file mode 100644 index 0000000000..fd9f1daaf8 --- /dev/null +++ b/resources/quality/creality/base/base_0.4_PETG_adaptive.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Dynamic Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = adaptive +material = generic_petg +variant = 0.4mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.4_PETG_low.inst.cfg b/resources/quality/creality/base/base_0.4_PETG_low.inst.cfg new file mode 100644 index 0000000000..7b0480ac5f --- /dev/null +++ b/resources/quality/creality/base/base_0.4_PETG_low.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Low Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = low +material = generic_petg +variant = 0.4mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.4_PETG_standard.inst.cfg b/resources/quality/creality/base/base_0.4_PETG_standard.inst.cfg new file mode 100644 index 0000000000..a2ebc522b7 --- /dev/null +++ b/resources/quality/creality/base/base_0.4_PETG_standard.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_petg +variant = 0.4mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.4_PETG_super.inst.cfg b/resources/quality/creality/base/base_0.4_PETG_super.inst.cfg new file mode 100644 index 0000000000..182d681e8c --- /dev/null +++ b/resources/quality/creality/base/base_0.4_PETG_super.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_petg +variant = 0.4mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.4_PLA_adaptive.inst.cfg b/resources/quality/creality/base/base_0.4_PLA_adaptive.inst.cfg new file mode 100644 index 0000000000..238ab3c2b8 --- /dev/null +++ b/resources/quality/creality/base/base_0.4_PLA_adaptive.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Dynamic Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = adaptive +material = generic_pla +variant = 0.4mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.4_PLA_low.inst.cfg b/resources/quality/creality/base/base_0.4_PLA_low.inst.cfg new file mode 100644 index 0000000000..da84b3115d --- /dev/null +++ b/resources/quality/creality/base/base_0.4_PLA_low.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Low Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = low +material = generic_pla +variant = 0.4mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.4_PLA_standard.inst.cfg b/resources/quality/creality/base/base_0.4_PLA_standard.inst.cfg new file mode 100644 index 0000000000..3141a28f38 --- /dev/null +++ b/resources/quality/creality/base/base_0.4_PLA_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_pla +variant = 0.4mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.4_PLA_super.inst.cfg b/resources/quality/creality/base/base_0.4_PLA_super.inst.cfg new file mode 100644 index 0000000000..65bbed31f2 --- /dev/null +++ b/resources/quality/creality/base/base_0.4_PLA_super.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_pla +variant = 0.4mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.4_TPU_adaptive.inst.cfg b/resources/quality/creality/base/base_0.4_TPU_adaptive.inst.cfg new file mode 100644 index 0000000000..467a530878 --- /dev/null +++ b/resources/quality/creality/base/base_0.4_TPU_adaptive.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Dynamic Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = adaptive +material = generic_tpu +variant = 0.4mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.4_TPU_standard.inst.cfg b/resources/quality/creality/base/base_0.4_TPU_standard.inst.cfg new file mode 100644 index 0000000000..8e623e67b5 --- /dev/null +++ b/resources/quality/creality/base/base_0.4_TPU_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_tpu +variant = 0.4mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.4_TPU_super.inst.cfg b/resources/quality/creality/base/base_0.4_TPU_super.inst.cfg new file mode 100644 index 0000000000..abf1714251 --- /dev/null +++ b/resources/quality/creality/base/base_0.4_TPU_super.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_tpu +variant = 0.4mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.5_ABS_adaptive.inst.cfg b/resources/quality/creality/base/base_0.5_ABS_adaptive.inst.cfg new file mode 100644 index 0000000000..384f182ebe --- /dev/null +++ b/resources/quality/creality/base/base_0.5_ABS_adaptive.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Dynamic Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = adaptive +material = generic_abs +variant = 0.5mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/creality/base/base_0.5_ABS_low.inst.cfg b/resources/quality/creality/base/base_0.5_ABS_low.inst.cfg new file mode 100644 index 0000000000..e7fbe50ff4 --- /dev/null +++ b/resources/quality/creality/base/base_0.5_ABS_low.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Low Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = low +material = generic_abs +variant = 0.5mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/creality/base/base_0.5_ABS_standard.inst.cfg b/resources/quality/creality/base/base_0.5_ABS_standard.inst.cfg new file mode 100644 index 0000000000..d24eb2b7f8 --- /dev/null +++ b/resources/quality/creality/base/base_0.5_ABS_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_abs +variant = 0.5mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/creality/base/base_0.5_ABS_super.inst.cfg b/resources/quality/creality/base/base_0.5_ABS_super.inst.cfg new file mode 100644 index 0000000000..1705611dc2 --- /dev/null +++ b/resources/quality/creality/base/base_0.5_ABS_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_abs +variant = 0.5mm Nozzle + +[values] +wall_thickness = =line_width*4 diff --git a/resources/quality/creality/base/base_0.5_PETG_adaptive.inst.cfg b/resources/quality/creality/base/base_0.5_PETG_adaptive.inst.cfg new file mode 100644 index 0000000000..1e369ab79d --- /dev/null +++ b/resources/quality/creality/base/base_0.5_PETG_adaptive.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Dynamic Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = adaptive +material = generic_petg +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.5_PETG_low.inst.cfg b/resources/quality/creality/base/base_0.5_PETG_low.inst.cfg new file mode 100644 index 0000000000..69401e5903 --- /dev/null +++ b/resources/quality/creality/base/base_0.5_PETG_low.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Low Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = low +material = generic_petg +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.5_PETG_standard.inst.cfg b/resources/quality/creality/base/base_0.5_PETG_standard.inst.cfg new file mode 100644 index 0000000000..55783954a4 --- /dev/null +++ b/resources/quality/creality/base/base_0.5_PETG_standard.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_petg +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.5_PETG_super.inst.cfg b/resources/quality/creality/base/base_0.5_PETG_super.inst.cfg new file mode 100644 index 0000000000..d61bfa0b89 --- /dev/null +++ b/resources/quality/creality/base/base_0.5_PETG_super.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_petg +variant = 0.5mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*4 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.5_PLA_adaptive.inst.cfg b/resources/quality/creality/base/base_0.5_PLA_adaptive.inst.cfg new file mode 100644 index 0000000000..8784ff1e61 --- /dev/null +++ b/resources/quality/creality/base/base_0.5_PLA_adaptive.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Dynamic Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = adaptive +material = generic_pla +variant = 0.5mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.5_PLA_low.inst.cfg b/resources/quality/creality/base/base_0.5_PLA_low.inst.cfg new file mode 100644 index 0000000000..93adb3d881 --- /dev/null +++ b/resources/quality/creality/base/base_0.5_PLA_low.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Low Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = low +material = generic_pla +variant = 0.5mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.5_PLA_standard.inst.cfg b/resources/quality/creality/base/base_0.5_PLA_standard.inst.cfg new file mode 100644 index 0000000000..38664d876a --- /dev/null +++ b/resources/quality/creality/base/base_0.5_PLA_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_pla +variant = 0.5mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.5_PLA_super.inst.cfg b/resources/quality/creality/base/base_0.5_PLA_super.inst.cfg new file mode 100644 index 0000000000..49ddb00090 --- /dev/null +++ b/resources/quality/creality/base/base_0.5_PLA_super.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_pla +variant = 0.5mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.5_TPU_adaptive.inst.cfg b/resources/quality/creality/base/base_0.5_TPU_adaptive.inst.cfg new file mode 100644 index 0000000000..8c3831a06d --- /dev/null +++ b/resources/quality/creality/base/base_0.5_TPU_adaptive.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Dynamic Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = adaptive +material = generic_tpu +variant = 0.5mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.5_TPU_standard.inst.cfg b/resources/quality/creality/base/base_0.5_TPU_standard.inst.cfg new file mode 100644 index 0000000000..5a2e73d7f0 --- /dev/null +++ b/resources/quality/creality/base/base_0.5_TPU_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_tpu +variant = 0.5mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.5_TPU_super.inst.cfg b/resources/quality/creality/base/base_0.5_TPU_super.inst.cfg new file mode 100644 index 0000000000..fe1b11ccab --- /dev/null +++ b/resources/quality/creality/base/base_0.5_TPU_super.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +material = generic_tpu +variant = 0.5mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.6_ABS_standard.inst.cfg b/resources/quality/creality/base/base_0.6_ABS_standard.inst.cfg new file mode 100644 index 0000000000..856883153c --- /dev/null +++ b/resources/quality/creality/base/base_0.6_ABS_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_abs +variant = 0.6mm Nozzle + +[values] +wall_thickness = =line_width*3 diff --git a/resources/quality/creality/base/base_0.6_PETG_standard.inst.cfg b/resources/quality/creality/base/base_0.6_PETG_standard.inst.cfg new file mode 100644 index 0000000000..b4d8142b48 --- /dev/null +++ b/resources/quality/creality/base/base_0.6_PETG_standard.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_petg +variant = 0.6mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*3 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.6_PLA_draft.inst.cfg b/resources/quality/creality/base/base_0.6_PLA_draft.inst.cfg new file mode 100644 index 0000000000..94c0471d18 --- /dev/null +++ b/resources/quality/creality/base/base_0.6_PLA_draft.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Draft Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +material = generic_pla +variant = 0.6mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.6_PLA_low.inst.cfg b/resources/quality/creality/base/base_0.6_PLA_low.inst.cfg new file mode 100644 index 0000000000..e916b7a0fd --- /dev/null +++ b/resources/quality/creality/base/base_0.6_PLA_low.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Low Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = low +material = generic_pla +variant = 0.6mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.6_PLA_standard.inst.cfg b/resources/quality/creality/base/base_0.6_PLA_standard.inst.cfg new file mode 100644 index 0000000000..007478277f --- /dev/null +++ b/resources/quality/creality/base/base_0.6_PLA_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_pla +variant = 0.6mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.6_TPU_standard.inst.cfg b/resources/quality/creality/base/base_0.6_TPU_standard.inst.cfg new file mode 100644 index 0000000000..8cdf0afac0 --- /dev/null +++ b/resources/quality/creality/base/base_0.6_TPU_standard.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +material = generic_tpu +variant = 0.6mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.8_ABS_draft.inst.cfg b/resources/quality/creality/base/base_0.8_ABS_draft.inst.cfg new file mode 100644 index 0000000000..23a9a6dfb6 --- /dev/null +++ b/resources/quality/creality/base/base_0.8_ABS_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Draft Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +material = generic_abs +variant = 0.8mm Nozzle + +[values] +wall_thickness = =line_width*3 diff --git a/resources/quality/creality/base/base_0.8_PETG_draft.inst.cfg b/resources/quality/creality/base/base_0.8_PETG_draft.inst.cfg new file mode 100644 index 0000000000..8090d45bd2 --- /dev/null +++ b/resources/quality/creality/base/base_0.8_PETG_draft.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Draft Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +material = generic_petg +variant = 0.8mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*3 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_0.8_PLA_draft.inst.cfg b/resources/quality/creality/base/base_0.8_PLA_draft.inst.cfg new file mode 100644 index 0000000000..afc92ab32f --- /dev/null +++ b/resources/quality/creality/base/base_0.8_PLA_draft.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Draft Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +material = generic_pla +variant = 0.8mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_0.8_TPU_draft.inst.cfg b/resources/quality/creality/base/base_0.8_TPU_draft.inst.cfg new file mode 100644 index 0000000000..694fc9a0a8 --- /dev/null +++ b/resources/quality/creality/base/base_0.8_TPU_draft.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Draft Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +material = generic_tpu +variant = 0.8mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_1.0_ABS_draft.inst.cfg b/resources/quality/creality/base/base_1.0_ABS_draft.inst.cfg new file mode 100644 index 0000000000..5aeee9302f --- /dev/null +++ b/resources/quality/creality/base/base_1.0_ABS_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Draft Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +material = generic_abs +variant = 1.0mm Nozzle + +[values] +wall_thickness = =line_width*3 diff --git a/resources/quality/creality/base/base_1.0_PETG_draft.inst.cfg b/resources/quality/creality/base/base_1.0_PETG_draft.inst.cfg new file mode 100644 index 0000000000..ac1cf05f9b --- /dev/null +++ b/resources/quality/creality/base/base_1.0_PETG_draft.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Draft Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +material = generic_petg +variant = 1.0mm Nozzle + +[values] +speed_layer_0 = 15 +wall_thickness = =line_width*3 +#retraction_extra_prime_amount = 0.5 diff --git a/resources/quality/creality/base/base_1.0_PLA_draft.inst.cfg b/resources/quality/creality/base/base_1.0_PLA_draft.inst.cfg new file mode 100644 index 0000000000..dd293a7585 --- /dev/null +++ b/resources/quality/creality/base/base_1.0_PLA_draft.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Draft Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +material = generic_pla +variant = 1.0mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_1.0_TPU_draft.inst.cfg b/resources/quality/creality/base/base_1.0_TPU_draft.inst.cfg new file mode 100644 index 0000000000..6f3276085f --- /dev/null +++ b/resources/quality/creality/base/base_1.0_TPU_draft.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 4 +name = Draft Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +material = generic_tpu +variant = 1.0mm Nozzle + +[values] diff --git a/resources/quality/creality/base/base_global_adaptive.inst.cfg b/resources/quality/creality/base/base_global_adaptive.inst.cfg new file mode 100644 index 0000000000..9372dd97a1 --- /dev/null +++ b/resources/quality/creality/base/base_global_adaptive.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = Dynamic Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = adaptive +weight = -2 +global_quality = True + +[values] +layer_height = 0.16 +layer_height_0 = 0.20 +top_bottom_thickness = =layer_height_0+layer_height*4 +wall_thickness = =line_width*3 +support_interface_height = =layer_height*6 +adaptive_layer_height_enabled = true diff --git a/resources/quality/creality/base/base_global_draft.inst.cfg b/resources/quality/creality/base/base_global_draft.inst.cfg new file mode 100644 index 0000000000..156ff0bb53 --- /dev/null +++ b/resources/quality/creality/base/base_global_draft.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Draft Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -5 +global_quality = True + +[values] +layer_height = 0.32 +layer_height_0 = 0.32 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*2 +support_interface_height = =layer_height*4 diff --git a/resources/quality/creality/base/base_global_low.inst.cfg b/resources/quality/creality/base/base_global_low.inst.cfg new file mode 100644 index 0000000000..47f621ae73 --- /dev/null +++ b/resources/quality/creality/base/base_global_low.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Low Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = low +weight = -4 +global_quality = True + +[values] +layer_height = 0.28 +layer_height_0 = 0.28 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*2 +support_interface_height = =layer_height*4 diff --git a/resources/quality/creality/base/base_global_standard.inst.cfg b/resources/quality/creality/base/base_global_standard.inst.cfg new file mode 100644 index 0000000000..c498b5b7db --- /dev/null +++ b/resources/quality/creality/base/base_global_standard.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Standard Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = standard +weight = -3 +global_quality = True + +[values] +layer_height = 0.2 +layer_height_0 = 0.2 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*3 +support_interface_height = =layer_height*5 diff --git a/resources/quality/creality/base/base_global_super.inst.cfg b/resources/quality/creality/base/base_global_super.inst.cfg new file mode 100644 index 0000000000..ae44762626 --- /dev/null +++ b/resources/quality/creality/base/base_global_super.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Super Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = super +weight = -1 +global_quality = True + +[values] +layer_height = 0.12 +layer_height_0 = 0.12 +top_bottom_thickness = =layer_height_0+layer_height*6 +wall_thickness = =line_width*3 +support_interface_height = =layer_height*8 diff --git a/resources/quality/creality/base/base_global_ultra.inst.cfg b/resources/quality/creality/base/base_global_ultra.inst.cfg new file mode 100644 index 0000000000..6f4d8797ba --- /dev/null +++ b/resources/quality/creality/base/base_global_ultra.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Ultra Quality +definition = creality_base + +[metadata] +setting_version = 10 +type = quality +quality_type = ultra +weight = 0 +global_quality = True + +[values] +layer_height = 0.08 +layer_height_0 = 0.12 +top_bottom_thickness = =layer_height_0+layer_height*10 +wall_thickness = =line_width*3 +support_interface_height = =layer_height*12 diff --git a/resources/quality/dagoma/dagoma_discoeasy200_pla_fast.inst.cfg b/resources/quality/dagoma/dagoma_discoeasy200_pla_fast.inst.cfg index 89c5c957f6..e0edca4275 100644 --- a/resources/quality/dagoma/dagoma_discoeasy200_pla_fast.inst.cfg +++ b/resources/quality/dagoma/dagoma_discoeasy200_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = dagoma_discoeasy200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/dagoma/dagoma_discoeasy200_pla_fine.inst.cfg b/resources/quality/dagoma/dagoma_discoeasy200_pla_fine.inst.cfg index 5b24e6edcf..4f2b31a819 100644 --- a/resources/quality/dagoma/dagoma_discoeasy200_pla_fine.inst.cfg +++ b/resources/quality/dagoma/dagoma_discoeasy200_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = dagoma_discoeasy200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/dagoma/dagoma_discoeasy200_pla_standard.inst.cfg b/resources/quality/dagoma/dagoma_discoeasy200_pla_standard.inst.cfg index c9bc62a72a..71117230b4 100644 --- a/resources/quality/dagoma/dagoma_discoeasy200_pla_standard.inst.cfg +++ b/resources/quality/dagoma/dagoma_discoeasy200_pla_standard.inst.cfg @@ -4,7 +4,7 @@ name = Standard definition = dagoma_discoeasy200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/dagoma/dagoma_global_fast.inst.cfg b/resources/quality/dagoma/dagoma_global_fast.inst.cfg index a37d3fb579..8ed08f69fb 100644 --- a/resources/quality/dagoma/dagoma_global_fast.inst.cfg +++ b/resources/quality/dagoma/dagoma_global_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = dagoma_discoeasy200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/dagoma/dagoma_global_fine.inst.cfg b/resources/quality/dagoma/dagoma_global_fine.inst.cfg index 4815dc44cd..7f6fc41a33 100644 --- a/resources/quality/dagoma/dagoma_global_fine.inst.cfg +++ b/resources/quality/dagoma/dagoma_global_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = dagoma_discoeasy200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/dagoma/dagoma_global_standard.inst.cfg b/resources/quality/dagoma/dagoma_global_standard.inst.cfg index 5be7fb75c9..7c9bc4c12e 100644 --- a/resources/quality/dagoma/dagoma_global_standard.inst.cfg +++ b/resources/quality/dagoma/dagoma_global_standard.inst.cfg @@ -4,7 +4,7 @@ name = Standard definition = dagoma_discoeasy200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/dagoma/dagoma_magis_pla_fast.inst.cfg b/resources/quality/dagoma/dagoma_magis_pla_fast.inst.cfg index 99a1f9e61b..563aa1556c 100644 --- a/resources/quality/dagoma/dagoma_magis_pla_fast.inst.cfg +++ b/resources/quality/dagoma/dagoma_magis_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = dagoma_magis [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/dagoma/dagoma_magis_pla_fine.inst.cfg b/resources/quality/dagoma/dagoma_magis_pla_fine.inst.cfg index 12e7f2c62f..b25ec2d714 100644 --- a/resources/quality/dagoma/dagoma_magis_pla_fine.inst.cfg +++ b/resources/quality/dagoma/dagoma_magis_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = dagoma_magis [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/dagoma/dagoma_magis_pla_standard.inst.cfg b/resources/quality/dagoma/dagoma_magis_pla_standard.inst.cfg index 62054acb4e..5d2611d20c 100644 --- a/resources/quality/dagoma/dagoma_magis_pla_standard.inst.cfg +++ b/resources/quality/dagoma/dagoma_magis_pla_standard.inst.cfg @@ -4,7 +4,7 @@ name = Standard definition = dagoma_magis [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/dagoma/dagoma_neva_pla_fast.inst.cfg b/resources/quality/dagoma/dagoma_neva_pla_fast.inst.cfg index ea024726ac..1cc9faddbb 100644 --- a/resources/quality/dagoma/dagoma_neva_pla_fast.inst.cfg +++ b/resources/quality/dagoma/dagoma_neva_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = dagoma_neva [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/dagoma/dagoma_neva_pla_fine.inst.cfg b/resources/quality/dagoma/dagoma_neva_pla_fine.inst.cfg index a69798ff2e..3c87cd672f 100644 --- a/resources/quality/dagoma/dagoma_neva_pla_fine.inst.cfg +++ b/resources/quality/dagoma/dagoma_neva_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = dagoma_neva [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/dagoma/dagoma_neva_pla_standard.inst.cfg b/resources/quality/dagoma/dagoma_neva_pla_standard.inst.cfg index fd92ed4416..81d230d038 100644 --- a/resources/quality/dagoma/dagoma_neva_pla_standard.inst.cfg +++ b/resources/quality/dagoma/dagoma_neva_pla_standard.inst.cfg @@ -4,7 +4,7 @@ name = Standard definition = dagoma_neva [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg index 3defed4dbc..1d02afbb12 100755 --- a/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast (beta) definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg index bcbeba5964..e6964a9c38 100755 --- a/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal (beta) definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg index d4b9185108..1e122045c2 100755 --- a/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine (beta) definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg index 843176f4a1..6e123740ab 100755 --- a/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine (beta) definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg index 5035bad786..a94dd97b50 100755 --- a/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast (beta) definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg index 6f63b0f5b4..8580b58217 100755 --- a/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg index 2d76f87d66..4c1b266b5a 100755 --- a/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg index 9b8c8080a2..d2ee402ea9 100755 --- a/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg index 7bd4591064..ecfeaa7369 100755 --- a/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg index a13d029c1a..411d3395fe 100755 --- a/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/deltacomb/deltacomb_petg_Draft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_petg_Draft_Quality.inst.cfg index 003f312fa8..f4422cb9cc 100644 --- a/resources/quality/deltacomb/deltacomb_petg_Draft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_petg_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/deltacomb/deltacomb_petg_Fast_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_petg_Fast_Quality.inst.cfg index 6dbdb759d1..8b7911dbd3 100644 --- a/resources/quality/deltacomb/deltacomb_petg_Fast_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_petg_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_petg_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_petg_High_Quality.inst.cfg index 275edfe4d1..7f2a9f4029 100644 --- a/resources/quality/deltacomb/deltacomb_petg_High_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_petg_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_petg_Normal_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_petg_Normal_Quality.inst.cfg index 5d746aad68..d7392dbe30 100644 --- a/resources/quality/deltacomb/deltacomb_petg_Normal_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_petg_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_petg_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_petg_Verydraft_Quality.inst.cfg index 8dd0f1fbb6..e4a3b9de4b 100644 --- a/resources/quality/deltacomb/deltacomb_petg_Verydraft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_petg_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg index 9c966d726c..9f1125557f 100755 --- a/resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg index a1a1fde055..e0ab33459d 100755 --- a/resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg index 0872d6d0a2..71926d3123 100755 --- a/resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg index cae00671c4..3fdd9555a0 100755 --- a/resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg index c26cec5127..3d338892a8 100755 --- a/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/deltacomb/deltacomb_tpu_Draft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_tpu_Draft_Quality.inst.cfg index 5fcbd76229..bd717a95f5 100755 --- a/resources/quality/deltacomb/deltacomb_tpu_Draft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_tpu_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/deltacomb/deltacomb_tpu_Fast_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_tpu_Fast_Quality.inst.cfg index 299d12ac00..7cd970b1e2 100755 --- a/resources/quality/deltacomb/deltacomb_tpu_Fast_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_tpu_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_tpu_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_tpu_High_Quality.inst.cfg index 32b2aadd0b..4f0de85125 100755 --- a/resources/quality/deltacomb/deltacomb_tpu_High_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_tpu_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_tpu_Normal_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_tpu_Normal_Quality.inst.cfg index 880c35c14e..33af4c368b 100755 --- a/resources/quality/deltacomb/deltacomb_tpu_Normal_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_tpu_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_tpu_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_tpu_Verydraft_Quality.inst.cfg index 104df50eee..8dfc1226f2 100755 --- a/resources/quality/deltacomb/deltacomb_tpu_Verydraft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_tpu_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = deltacomb [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/draft.inst.cfg b/resources/quality/draft.inst.cfg index 9fe798dfd4..517037e1f6 100644 --- a/resources/quality/draft.inst.cfg +++ b/resources/quality/draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = fdmprinter [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/extra_coarse.inst.cfg b/resources/quality/extra_coarse.inst.cfg index 1a9ade143d..fd11ebce5f 100644 --- a/resources/quality/extra_coarse.inst.cfg +++ b/resources/quality/extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = fdmprinter [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extra coarse weight = -4 diff --git a/resources/quality/extra_fast.inst.cfg b/resources/quality/extra_fast.inst.cfg index 1fcc9bc42d..5ed73ad867 100644 --- a/resources/quality/extra_fast.inst.cfg +++ b/resources/quality/extra_fast.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = fdmprinter [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg index ddcdc0632d..a5627610c4 100644 --- a/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg @@ -4,7 +4,7 @@ definition = fabtotum name = Fast Quality [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg b/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg index 66faed5084..c0caeb3437 100644 --- a/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg @@ -4,7 +4,7 @@ definition = fabtotum name = High Quality [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg index 2bd980889b..c425c874ce 100644 --- a/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg @@ -4,7 +4,7 @@ definition = fabtotum name = Normal Quality [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg index cec7056ff1..6afab75165 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast Quality definition = fabtotum [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg index d5a893c408..08bf81bac5 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = fabtotum [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg index 7fe1b8b8f3..3936d38d3b 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal Quality definition = fabtotum [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg index 5ebe5bbdc2..23235f5e16 100644 --- a/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg @@ -4,7 +4,7 @@ definition = fabtotum name = Fast Quality [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg b/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg index 5d5b582b82..55669eca85 100644 --- a/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg @@ -4,7 +4,7 @@ definition = fabtotum name = High Quality [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg index 1c510293a1..a1443e4b8c 100644 --- a/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg @@ -4,7 +4,7 @@ definition = fabtotum name = Normal Quality [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/fabtotum/fabtotum_tpu_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_tpu_fast.inst.cfg index 21a0c9bc09..b07b182d24 100644 --- a/resources/quality/fabtotum/fabtotum_tpu_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_tpu_fast.inst.cfg @@ -5,7 +5,7 @@ name = Fast Quality [metadata] type = quality -setting_version = 7 +setting_version = 10 material = generic_tpu quality_type = fast weight = -1 diff --git a/resources/quality/fabtotum/fabtotum_tpu_high.inst.cfg b/resources/quality/fabtotum/fabtotum_tpu_high.inst.cfg index dd27372a07..611cefb3c5 100644 --- a/resources/quality/fabtotum/fabtotum_tpu_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_tpu_high.inst.cfg @@ -5,7 +5,7 @@ name = High Quality [metadata] type = quality -setting_version = 7 +setting_version = 10 material = generic_tpu quality_type = high weight = 1 diff --git a/resources/quality/fabtotum/fabtotum_tpu_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_tpu_normal.inst.cfg index b7eefeeeeb..99fb7db62b 100644 --- a/resources/quality/fabtotum/fabtotum_tpu_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_tpu_normal.inst.cfg @@ -5,7 +5,7 @@ name = Normal Quality [metadata] type = quality -setting_version = 7 +setting_version = 10 material = generic_tpu quality_type = normal weight = 0 diff --git a/resources/quality/fast.inst.cfg b/resources/quality/fast.inst.cfg index d92eeb3ed2..f881832356 100644 --- a/resources/quality/fast.inst.cfg +++ b/resources/quality/fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = fdmprinter [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/gmax15plus/gmax15plus_global_dual_normal.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_dual_normal.inst.cfg index 7ea63ba7f9..4fb63a7cd6 100644 --- a/resources/quality/gmax15plus/gmax15plus_global_dual_normal.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_dual_normal.inst.cfg @@ -4,7 +4,7 @@ name = gMax 1.5+ Dual Normal Layers definition = gmax15plus_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/gmax15plus/gmax15plus_global_dual_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_dual_thick.inst.cfg index 95182aad2d..15454d383a 100644 --- a/resources/quality/gmax15plus/gmax15plus_global_dual_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_dual_thick.inst.cfg @@ -4,7 +4,7 @@ name = gMax 1.5+ Dual Thick Layers definition = gmax15plus_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = course weight = -2 diff --git a/resources/quality/gmax15plus/gmax15plus_global_dual_thin.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_dual_thin.inst.cfg index 05e9a84bb4..8bd446e63a 100644 --- a/resources/quality/gmax15plus/gmax15plus_global_dual_thin.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_dual_thin.inst.cfg @@ -4,7 +4,7 @@ name = gMax 1.5+ Dual Thin Layers definition = gmax15plus_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/gmax15plus/gmax15plus_global_dual_very_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_dual_very_thick.inst.cfg index fd986e6c1f..c186684944 100644 --- a/resources/quality/gmax15plus/gmax15plus_global_dual_very_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_dual_very_thick.inst.cfg @@ -4,7 +4,7 @@ name = gMax 1.5+ Dual Very Thick Layers definition = gmax15plus_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extra_course weight = -3 diff --git a/resources/quality/gmax15plus/gmax15plus_global_normal.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_normal.inst.cfg index fa50fcee4c..3340696664 100644 --- a/resources/quality/gmax15plus/gmax15plus_global_normal.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_normal.inst.cfg @@ -4,7 +4,7 @@ name = gMax 1.5+ Normal Layers definition = gmax15plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/gmax15plus/gmax15plus_global_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_thick.inst.cfg index e5fd46edbc..4681dbd659 100644 --- a/resources/quality/gmax15plus/gmax15plus_global_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_thick.inst.cfg @@ -4,7 +4,7 @@ name = gMax 1.5+ Thick Layers definition = gmax15plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = course weight = -2 diff --git a/resources/quality/gmax15plus/gmax15plus_global_thin.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_thin.inst.cfg index cc19a478e5..d310b44878 100644 --- a/resources/quality/gmax15plus/gmax15plus_global_thin.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_thin.inst.cfg @@ -4,7 +4,7 @@ name = gMax 1.5+ Thin Layers definition = gmax15plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/gmax15plus/gmax15plus_global_very_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_very_thick.inst.cfg index 0c2661b3fd..908e90fe15 100644 --- a/resources/quality/gmax15plus/gmax15plus_global_very_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_very_thick.inst.cfg @@ -4,7 +4,7 @@ name = gMax 1.5+ Very Thick Layers definition = gmax15plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extra_course weight = -3 diff --git a/resources/quality/high.inst.cfg b/resources/quality/high.inst.cfg index 8d306c9de4..30e2b47c07 100644 --- a/resources/quality/high.inst.cfg +++ b/resources/quality/high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = fdmprinter [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/hms434/hms434_global_Coarse_Quality.inst.cfg b/resources/quality/hms434/hms434_global_Coarse_Quality.inst.cfg index 9bdd52a6be..62d3ceaf21 100644 --- a/resources/quality/hms434/hms434_global_Coarse_Quality.inst.cfg +++ b/resources/quality/hms434/hms434_global_Coarse_Quality.inst.cfg @@ -4,12 +4,12 @@ name = Coarse definition = hms434 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse -weight = -3 +weight = -1 global_quality = True [values] layer_height = 0.4 -layer_height_0 = 0.4 +layer_height_0 = 0.2 diff --git a/resources/quality/hms434/hms434_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/hms434/hms434_global_Extra_Coarse_Quality.inst.cfg deleted file mode 100644 index e997f8297f..0000000000 --- a/resources/quality/hms434/hms434_global_Extra_Coarse_Quality.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 4 -name = Extra Coarse -definition = hms434 - -[metadata] -setting_version = 7 -type = quality -quality_type = extra coarse -weight = -4 -global_quality = True - -[values] -layer_height = 0.6 -layer_height_0 = 0.6 diff --git a/resources/quality/hms434/hms434_global_High_Quality.inst.cfg b/resources/quality/hms434/hms434_global_High_Quality.inst.cfg index 4515c1199b..4f99b136b8 100644 --- a/resources/quality/hms434/hms434_global_High_Quality.inst.cfg +++ b/resources/quality/hms434/hms434_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = hms434 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/hms434/hms434_global_Normal_Quality.inst.cfg b/resources/quality/hms434/hms434_global_Normal_Quality.inst.cfg index 931e8db9f0..4dbefdadea 100644 --- a/resources/quality/hms434/hms434_global_Normal_Quality.inst.cfg +++ b/resources/quality/hms434/hms434_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = hms434 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/hms434/hms434_global_Super_Coarse_Quality.inst.cfg b/resources/quality/hms434/hms434_global_Super_Coarse_Quality.inst.cfg deleted file mode 100644 index d6647df7a7..0000000000 --- a/resources/quality/hms434/hms434_global_Super_Coarse_Quality.inst.cfg +++ /dev/null @@ -1,16 +0,0 @@ -[general] -version = 4 -name = Super Coarse -definition = hms434 - -[metadata] -setting_version = 7 -type = quality -quality_type = super coarse -weight = -4 -global_quality = True - -[values] -layer_height = 0.8 -layer_height_0 = 0.8 - diff --git a/resources/quality/hms434/hms434_global_Ultra_Coarse_Quality.inst.cfg b/resources/quality/hms434/hms434_global_Ultra_Coarse_Quality.inst.cfg deleted file mode 100644 index 5640ca21cc..0000000000 --- a/resources/quality/hms434/hms434_global_Ultra_Coarse_Quality.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 4 -name = Ultra Coarse -definition = hms434 - -[metadata] -setting_version = 7 -type = quality -quality_type = ultra coarse -weight = -4 -global_quality = True - -[values] -layer_height = 1.0 -layer_height_0 = 1.0 diff --git a/resources/quality/hms434/pla/hms434_0.4_pla_high.inst.cfg b/resources/quality/hms434/pla/hms434_0.4_pla_high.inst.cfg new file mode 100644 index 0000000000..551978870e --- /dev/null +++ b/resources/quality/hms434/pla/hms434_0.4_pla_high.inst.cfg @@ -0,0 +1,36 @@ +[general] +version = 4 +name = High +definition = hms434 + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = generic_pla +variant = 0.4mm TP extruder + +[values] + +wall_0_wipe_dist = 0.0 + +infill_overlap_mm = -0.1 +infill_wipe_dist = 0 + +default_material_print_temperature = 190 +material_standby_temperature = 160 +default_material_bed_temperature = 45 +build_volume_temperature = 43 +material_flow = 100 +retraction_amount = 1 +retraction_speed = 40 +retraction_prime_speed = 8 +retraction_extra_prime_amount = 0 +switch_extruder_retraction_amount = 2 + +speed_print = 50 + +coasting_volume = 0.05 +coasting_min_volume = 0.17 +coasting_speed = 100 diff --git a/resources/quality/hms434/pla/hms434_0.4_pla_normal.inst.cfg b/resources/quality/hms434/pla/hms434_0.4_pla_normal.inst.cfg new file mode 100644 index 0000000000..3952acec60 --- /dev/null +++ b/resources/quality/hms434/pla/hms434_0.4_pla_normal.inst.cfg @@ -0,0 +1,36 @@ +[general] +version = 4 +name = Normal +definition = hms434 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_pla +variant = 0.4mm TP extruder + +[values] + +wall_0_wipe_dist = 0.0 + +infill_overlap_mm = -0.1 +infill_wipe_dist = 0 + +default_material_print_temperature = 190 +material_standby_temperature = 160 +default_material_bed_temperature = 45 +build_volume_temperature = 43 +material_flow = 100 +retraction_amount = 1 +retraction_speed = 40 +retraction_prime_speed = 8 +retraction_extra_prime_amount = 0 +switch_extruder_retraction_amount = 2 + +speed_print = 50 + +coasting_volume = 0.05 +coasting_min_volume = 0.17 +coasting_speed = 100 diff --git a/resources/quality/hms434/pla/hms434_0.8_pla_coarse.inst.cfg b/resources/quality/hms434/pla/hms434_0.8_pla_coarse.inst.cfg new file mode 100644 index 0000000000..897209b098 --- /dev/null +++ b/resources/quality/hms434/pla/hms434_0.8_pla_coarse.inst.cfg @@ -0,0 +1,36 @@ +[general] +version = 4 +name = Coarse +definition = hms434 + +[metadata] +setting_version = 10 +type = quality +quality_type = coarse +weight = -1 +material = generic_pla +variant = 0.8mm TP extruder + +[values] + +wall_0_wipe_dist = 0.0 + +infill_overlap_mm = -0.1 +infill_wipe_dist = 0 + +default_material_print_temperature = 190 +material_standby_temperature = 160 +default_material_bed_temperature = 45 +build_volume_temperature = 43 +material_flow = 100 +retraction_amount = 1 +retraction_speed = 40 +retraction_prime_speed = 8 +retraction_extra_prime_amount = 0 +switch_extruder_retraction_amount = 2 + +speed_print = 50 + +coasting_volume = 0.05 +coasting_min_volume = 0.17 +coasting_speed = 100 diff --git a/resources/quality/hms434/pla/hms434_0.8_pla_normal.inst.cfg b/resources/quality/hms434/pla/hms434_0.8_pla_normal.inst.cfg new file mode 100644 index 0000000000..53630ffd84 --- /dev/null +++ b/resources/quality/hms434/pla/hms434_0.8_pla_normal.inst.cfg @@ -0,0 +1,40 @@ +[general] +version = 4 +name = Normal +definition = hms434 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_pla +variant = 0.8mm TP extruder + +[values] + +wall_0_wipe_dist = 0.0 + +infill_overlap_mm = -0.1 +infill_sparse_thickness = =0.4 if infill_sparse_density < 90 else 0.2 +infill_wipe_dist = 0 + +default_material_print_temperature = 190 +material_standby_temperature = 160 +default_material_bed_temperature = 45 +build_volume_temperature = 43 +material_flow = 100 +retraction_amount = 1 +retraction_speed = 40 +retraction_prime_speed = 8 +retraction_extra_prime_amount = 0 +switch_extruder_retraction_amount = 2 + +speed_print = 50 +speed_infill = 42 + +support_infill_sparse_thickness = 0.4 + +coasting_volume = 0.05 +coasting_min_volume = 0.17 +coasting_speed = 100 diff --git a/resources/quality/imade3d_jellybox/PETG/jbo_generic_petg_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox/PETG/jbo_generic_petg_0.4_coarse.inst.cfg new file mode 100644 index 0000000000..0c051bd0be --- /dev/null +++ b/resources/quality/imade3d_jellybox/PETG/jbo_generic_petg_0.4_coarse.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = imade3d_jellybox + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -1 +material = generic_petg +variant = 0.4 mm + +[values] +speed_print = 45 diff --git a/resources/quality/imade3d_jellybox/PETG/jbo_generic_petg_0.4_fine.inst.cfg b/resources/quality/imade3d_jellybox/PETG/jbo_generic_petg_0.4_fine.inst.cfg new file mode 100644 index 0000000000..95e51dee0b --- /dev/null +++ b/resources/quality/imade3d_jellybox/PETG/jbo_generic_petg_0.4_fine.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Fine +definition = imade3d_jellybox + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = generic_petg +variant = 0.4 mm + +[values] +speed_print = 50 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox/PETG/jbo_generic_petg_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox/PETG/jbo_generic_petg_0.4_medium.inst.cfg new file mode 100644 index 0000000000..7aa8c122ee --- /dev/null +++ b/resources/quality/imade3d_jellybox/PETG/jbo_generic_petg_0.4_medium.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Medium +definition = imade3d_jellybox + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_petg +variant = 0.4 mm + +[values] +speed_print = 45 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox/PLA/jbo_generic_pla_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox/PLA/jbo_generic_pla_0.4_coarse.inst.cfg new file mode 100644 index 0000000000..fa0ec0a16b --- /dev/null +++ b/resources/quality/imade3d_jellybox/PLA/jbo_generic_pla_0.4_coarse.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = imade3d_jellybox + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -1 +material = generic_pla +variant = 0.4 mm + +[values] +speed_print = 45 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox/PLA/jbo_generic_pla_0.4_fine.inst.cfg b/resources/quality/imade3d_jellybox/PLA/jbo_generic_pla_0.4_fine.inst.cfg new file mode 100644 index 0000000000..7e08040eae --- /dev/null +++ b/resources/quality/imade3d_jellybox/PLA/jbo_generic_pla_0.4_fine.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Fine +definition = imade3d_jellybox + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = generic_pla +variant = 0.4 mm + +[values] +speed_print = 50 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox/PLA/jbo_generic_pla_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox/PLA/jbo_generic_pla_0.4_medium.inst.cfg new file mode 100644 index 0000000000..c29b468b49 --- /dev/null +++ b/resources/quality/imade3d_jellybox/PLA/jbo_generic_pla_0.4_medium.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Medium +definition = imade3d_jellybox + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_pla +variant = 0.4 mm + +[values] +speed_print = 45 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox/PLA/jbo_generic_pla_0.4_ultrafine.inst.cfg b/resources/quality/imade3d_jellybox/PLA/jbo_generic_pla_0.4_ultrafine.inst.cfg new file mode 100644 index 0000000000..2742f86f31 --- /dev/null +++ b/resources/quality/imade3d_jellybox/PLA/jbo_generic_pla_0.4_ultrafine.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = UltraFine +definition = imade3d_jellybox + +[metadata] +setting_version = 10 +type = quality +quality_type = ultrahigh +weight = 2 +material = generic_pla +variant = 0.4 mm + +[values] +speed_print = 55 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg deleted file mode 100644 index a9138ec70b..0000000000 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg +++ /dev/null @@ -1,55 +0,0 @@ -[general] -version = 4 -name = Coarse -definition = imade3d_jellybox - -[metadata] -setting_version = 7 -type = quality -quality_type = fast -weight = -1 -material = generic_petg -variant = 0.4 mm - -[values] -adhesion_type = skirt -bottom_thickness = 0.6 -coasting_enable = True -coasting_speed = 95 -cool_fan_full_at_height = 1.2 -cool_fan_speed_max = 60 -cool_fan_speed_min = 20 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 10 -cool_min_speed = 10 -infill_before_walls = False -infill_line_width = 0.6 -infill_overlap = 15 -infill_pattern = zigzag -infill_sparse_density = 20 -line_width = 0.4 -material_bed_temperature = 50 -material_bed_temperature_layer_0 = 55 -material_flow = 100 -meshfix_union_all = False -retraction_amount = 1.3 -retraction_combing = all -retraction_hop_enabled = 0.1 -retraction_min_travel = 1.2 -retraction_prime_speed = 25 -retraction_retract_speed = 35 -retraction_speed = 70 -skin_no_small_gaps_heuristic = False -skirt_brim_minimal_length = 100 -skirt_brim_speed = 25 -skirt_line_count = 2 -speed_layer_0 = =math.ceil(speed_print * 14 / 40) -speed_print = 40 -speed_slowdown_layers = 1 -speed_topbottom = =math.ceil(speed_print * 20 / 40) -speed_travel = 120 -speed_travel_layer_0 = 60 -speed_wall = =math.ceil(speed_print * 25 / 40) -speed_wall_x = =math.ceil(speed_print * 35 / 40) -top_thickness = =top_bottom_thickness -wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg deleted file mode 100644 index 227072b3a1..0000000000 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg +++ /dev/null @@ -1,55 +0,0 @@ -[general] -version = 4 -name = Coarse -definition = imade3d_jellybox - -[metadata] -setting_version = 7 -type = quality -quality_type = fast -weight = -1 -material = generic_petg -variant = 0.4 mm 2-fans - -[values] -adhesion_type = skirt -bottom_thickness = 0.6 -coasting_enable = True -coasting_speed = 95 -cool_fan_full_at_height = 1.2 -cool_fan_speed_max = 40 -cool_fan_speed_min = 20 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 10 -cool_min_speed = 10 -infill_before_walls = False -infill_line_width = 0.6 -infill_overlap = 15 -infill_pattern = zigzag -infill_sparse_density = 20 -line_width = 0.4 -material_bed_temperature = 50 -material_bed_temperature_layer_0 = 55 -material_flow = 100 -meshfix_union_all = False -retraction_amount = 1.3 -retraction_combing = all -retraction_hop_enabled = 0.1 -retraction_min_travel = 1.2 -retraction_prime_speed = 25 -retraction_retract_speed = 35 -retraction_speed = 70 -skin_no_small_gaps_heuristic = False -skirt_brim_minimal_length = 100 -skirt_brim_speed = 25 -skirt_line_count = 2 -speed_layer_0 = =math.ceil(speed_print * 14 / 40) -speed_print = 40 -speed_slowdown_layers = 1 -speed_topbottom = =math.ceil(speed_print * 20 / 40) -speed_travel = 120 -speed_travel_layer_0 = 60 -speed_wall = =math.ceil(speed_print * 25 / 40) -speed_wall_x = =math.ceil(speed_print * 35 / 40) -top_thickness = =top_bottom_thickness -wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg deleted file mode 100644 index a8bcd8d4b0..0000000000 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg +++ /dev/null @@ -1,55 +0,0 @@ -[general] -version = 4 -name = Medium -definition = imade3d_jellybox - -[metadata] -setting_version = 7 -type = quality -quality_type = normal -weight = 0 -material = generic_petg -variant = 0.4 mm - -[values] -adhesion_type = skirt -bottom_thickness = 0.6 -coasting_enable = True -coasting_speed = 95 -cool_fan_full_at_height = 1.2 -cool_fan_speed_max = 60 -cool_fan_speed_min = 20 -cool_min_layer_time = 7 -cool_min_layer_time_fan_speed_max = 10 -cool_min_speed = 10 -infill_before_walls = False -infill_line_width = 0.6 -infill_overlap = 15 -infill_pattern = zigzag -infill_sparse_density = 20 -line_width = 0.4 -material_bed_temperature = 50 -material_bed_temperature_layer_0 = 55 -material_flow = 100 -meshfix_union_all = False -retraction_amount = 1.3 -retraction_combing = all -retraction_hop_enabled = 0.1 -retraction_min_travel = 1.2 -retraction_prime_speed = 25 -retraction_retract_speed = 35 -retraction_speed = 70 -skin_no_small_gaps_heuristic = False -skirt_brim_minimal_length = 100 -skirt_brim_speed = 25 -skirt_line_count = 2 -speed_layer_0 = =math.ceil(speed_print * 14 / 40) -speed_print = 40 -speed_slowdown_layers = 1 -speed_topbottom = =math.ceil(speed_print * 20 / 40) -speed_travel = 120 -speed_travel_layer_0 = 60 -speed_wall = =math.ceil(speed_print * 25 / 40) -speed_wall_x = =math.ceil(speed_print * 35 / 40) -top_thickness = =top_bottom_thickness -wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg deleted file mode 100644 index 7dd26b4f70..0000000000 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg +++ /dev/null @@ -1,55 +0,0 @@ -[general] -version = 4 -name = Medium -definition = imade3d_jellybox - -[metadata] -setting_version = 7 -type = quality -quality_type = normal -weight = 0 -material = generic_petg -variant = 0.4 mm 2-fans - -[values] -adhesion_type = skirt -bottom_thickness = 0.6 -coasting_enable = True -coasting_speed = 95 -cool_fan_full_at_height = 1.2 -cool_fan_speed_max = 40 -cool_fan_speed_min = 20 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 10 -cool_min_speed = 10 -infill_before_walls = False -infill_line_width = 0.6 -infill_overlap = 15 -infill_pattern = zigzag -infill_sparse_density = 20 -line_width = 0.4 -material_bed_temperature = 50 -material_bed_temperature_layer_0 = 55 -material_flow = 100 -meshfix_union_all = False -retraction_amount = 1.3 -retraction_combing = all -retraction_hop_enabled = 0.1 -retraction_min_travel = 1.2 -retraction_prime_speed = 25 -retraction_retract_speed = 35 -retraction_speed = 70 -skin_no_small_gaps_heuristic = False -skirt_brim_minimal_length = 100 -skirt_brim_speed = 25 -skirt_line_count = 2 -speed_layer_0 = =math.ceil(speed_print * 14 / 40) -speed_print = 40 -speed_slowdown_layers = 1 -speed_topbottom = =math.ceil(speed_print * 20 / 40) -speed_travel = 120 -speed_travel_layer_0 = 60 -speed_wall = =math.ceil(speed_print * 25 / 40) -speed_wall_x = =math.ceil(speed_print * 35 / 40) -top_thickness = =top_bottom_thickness -wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg deleted file mode 100644 index 055e804c9c..0000000000 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg +++ /dev/null @@ -1,53 +0,0 @@ -[general] -version = 4 -name = Coarse -definition = imade3d_jellybox - -[metadata] -setting_version = 7 -type = quality -quality_type = fast -weight = -1 -material = generic_pla -variant = 0.4 mm - -[values] -adhesion_type = skirt -bottom_thickness = 0.6 -coasting_enable = True -coasting_speed = 95 -cool_fan_full_at_height = 0.65 -cool_fan_speed_max = 100 -cool_fan_speed_min = 50 -cool_min_layer_time = 7 -cool_min_layer_time_fan_speed_max = 10 -cool_min_speed = 10 -infill_before_walls = False -infill_line_width = 0.6 -infill_overlap = 15 -infill_pattern = zigzag -infill_sparse_density = 20 -line_width = 0.4 -material_flow = 90 -meshfix_union_all = False -retraction_amount = 1.3 -retraction_combing = all -retraction_hop_enabled = 0.1 -retraction_min_travel = 1.2 -retraction_prime_speed = 30 -retraction_retract_speed = 70 -retraction_speed = 70 -skin_no_small_gaps_heuristic = False -skirt_brim_minimal_length = 100 -skirt_brim_speed = 20 -skirt_line_count = 3 -speed_layer_0 = =math.ceil(speed_print * 20 / 45) -speed_print = 45 -speed_slowdown_layers = 1 -speed_topbottom = =math.ceil(speed_print * 25 / 45) -speed_travel = 120 -speed_travel_layer_0 = 60 -speed_wall = =math.ceil(speed_print * 25 / 45) -speed_wall_x = =math.ceil(speed_print * 35 / 45) -top_thickness = 0.8 -wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg deleted file mode 100644 index 7909892c18..0000000000 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg +++ /dev/null @@ -1,53 +0,0 @@ -[general] -version = 4 -name = Coarse -definition = imade3d_jellybox - -[metadata] -setting_version = 7 -type = quality -quality_type = fast -weight = -1 -material = generic_pla -variant = 0.4 mm 2-fans - -[values] -adhesion_type = skirt -bottom_thickness = 0.6 -coasting_enable = True -coasting_speed = 95 -cool_fan_full_at_height = 0.65 -cool_fan_speed_max = 100 -cool_fan_speed_min = 20 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 10 -cool_min_speed = 10 -infill_before_walls = False -infill_line_width = 0.6 -infill_overlap = 15 -infill_pattern = zigzag -infill_sparse_density = 20 -line_width = 0.4 -material_flow = 90 -meshfix_union_all = False -retraction_amount = 1.3 -retraction_combing = all -retraction_hop_enabled = 0.1 -retraction_min_travel = 1.2 -retraction_prime_speed = 30 -retraction_retract_speed = 70 -retraction_speed = 70 -skin_no_small_gaps_heuristic = False -skirt_brim_minimal_length = 100 -skirt_brim_speed = 20 -skirt_line_count = 3 -speed_layer_0 = =math.ceil(speed_print * 20 / 45) -speed_print = 45 -speed_slowdown_layers = 1 -speed_topbottom = =math.ceil(speed_print * 25 / 45) -speed_travel = 120 -speed_travel_layer_0 = 60 -speed_wall = =math.ceil(speed_print * 25 / 45) -speed_wall_x = =math.ceil(speed_print * 35 / 45) -top_thickness = 0.8 -wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg deleted file mode 100644 index 979158fdcf..0000000000 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg +++ /dev/null @@ -1,54 +0,0 @@ -[general] -version = 4 -name = Fine -definition = imade3d_jellybox - -[metadata] -setting_version = 7 -type = quality -quality_type = high -weight = 1 -material = generic_pla -variant = 0.4 mm - -[values] -adhesion_type = skirt -bottom_thickness = 0.6 -coasting_enable = True -coasting_speed = 95 -cool_fan_full_at_height = 0.65 -cool_fan_speed_max = 100 -cool_fan_speed_min = 50 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 10 -cool_min_speed = 10 -infill_before_walls = False -infill_line_width = 0.6 -infill_overlap = 15 -infill_pattern = zigzag -infill_sparse_density = 20 -line_width = 0.4 -material_flow = 90 -material_print_temperature = 205 -meshfix_union_all = False -retraction_amount = 1.3 -retraction_combing = all -retraction_hop_enabled = 0.1 -retraction_min_travel = 1.2 -retraction_prime_speed = 30 -retraction_retract_speed = 70 -retraction_speed = 70 -skin_no_small_gaps_heuristic = False -skirt_brim_minimal_length = 100 -skirt_brim_speed = 20 -skirt_line_count = 3 -speed_layer_0 = =math.ceil(speed_print * 20 / 45) -speed_print = 45 -speed_slowdown_layers = 1 -speed_topbottom = =math.ceil(speed_print * 25 / 45) -speed_travel = 120 -speed_travel_layer_0 = 60 -speed_wall = =math.ceil(speed_print * 25 / 45) -speed_wall_x = =math.ceil(speed_print * 35 / 45) -top_thickness = 0.8 -wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg deleted file mode 100644 index 8cc3108d0e..0000000000 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg +++ /dev/null @@ -1,54 +0,0 @@ -[general] -version = 4 -name = Fine -definition = imade3d_jellybox - -[metadata] -setting_version = 7 -type = quality -quality_type = high -weight = 1 -material = generic_pla -variant = 0.4 mm 2-fans - -[values] -adhesion_type = skirt -bottom_thickness = 0.6 -coasting_enable = True -coasting_speed = 95 -cool_fan_full_at_height = 0.65 -cool_fan_speed_max = 100 -cool_fan_speed_min = 20 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 10 -cool_min_speed = 10 -infill_before_walls = False -infill_line_width = 0.6 -infill_overlap = 15 -infill_pattern = zigzag -infill_sparse_density = 20 -line_width = 0.4 -material_flow = 90 -material_print_temperature = 205 -meshfix_union_all = False -retraction_amount = 1.3 -retraction_combing = all -retraction_hop_enabled = 0.1 -retraction_min_travel = 1.2 -retraction_prime_speed = 30 -retraction_retract_speed = 70 -retraction_speed = 70 -skin_no_small_gaps_heuristic = False -skirt_brim_minimal_length = 100 -skirt_brim_speed = 20 -skirt_line_count = 3 -speed_layer_0 = =math.ceil(speed_print * 20 / 45) -speed_print = 45 -speed_slowdown_layers = 1 -speed_topbottom = =math.ceil(speed_print * 25 / 45) -speed_travel = 120 -speed_travel_layer_0 = 60 -speed_wall = =math.ceil(speed_print * 25 / 45) -speed_wall_x = =math.ceil(speed_print * 35 / 45) -top_thickness = 0.8 -wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg deleted file mode 100644 index 5620ac43f8..0000000000 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg +++ /dev/null @@ -1,53 +0,0 @@ -[general] -version = 4 -name = Medium -definition = imade3d_jellybox - -[metadata] -setting_version = 7 -type = quality -quality_type = normal -weight = 0 -material = generic_pla -variant = 0.4 mm - -[values] -adhesion_type = skirt -bottom_thickness = 0.6 -coasting_enable = True -coasting_speed = 95 -cool_fan_full_at_height = 0.65 -cool_fan_speed_max = 100 -cool_fan_speed_min = 50 -cool_min_layer_time = 7 -cool_min_layer_time_fan_speed_max = 10 -cool_min_speed = 10 -infill_before_walls = False -infill_line_width = 0.6 -infill_overlap = 15 -infill_pattern = zigzag -infill_sparse_density = 20 -line_width = 0.4 -material_flow = 90 -meshfix_union_all = False -retraction_amount = 1.3 -retraction_combing = all -retraction_hop_enabled = 0.1 -retraction_min_travel = 1.2 -retraction_prime_speed = 30 -retraction_retract_speed = 70 -retraction_speed = 70 -skin_no_small_gaps_heuristic = False -skirt_brim_minimal_length = 100 -skirt_brim_speed = 20 -skirt_line_count = 3 -speed_layer_0 = =math.ceil(speed_print * 20 / 45) -speed_print = 45 -speed_slowdown_layers = 1 -speed_topbottom = =math.ceil(speed_print * 25 / 45) -speed_travel = 120 -speed_travel_layer_0 = 60 -speed_wall = =math.ceil(speed_print * 25 / 45) -speed_wall_x = =math.ceil(speed_print * 35 / 45) -top_thickness = 0.8 -wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg deleted file mode 100644 index 4c6d81e643..0000000000 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg +++ /dev/null @@ -1,53 +0,0 @@ -[general] -version = 4 -name = Medium -definition = imade3d_jellybox - -[metadata] -setting_version = 7 -type = quality -quality_type = normal -weight = 0 -material = generic_pla -variant = 0.4 mm 2-fans - -[values] -adhesion_type = skirt -bottom_thickness = 0.6 -coasting_enable = True -coasting_speed = 95 -cool_fan_full_at_height = 0.65 -cool_fan_speed_max = 100 -cool_fan_speed_min = 20 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 10 -cool_min_speed = 10 -infill_before_walls = False -infill_line_width = 0.6 -infill_overlap = 15 -infill_pattern = zigzag -infill_sparse_density = 20 -line_width = 0.4 -material_flow = 90 -meshfix_union_all = False -retraction_amount = 1.3 -retraction_combing = all -retraction_hop_enabled = 0.1 -retraction_min_travel = 1.2 -retraction_prime_speed = 30 -retraction_retract_speed = 70 -retraction_speed = 70 -skin_no_small_gaps_heuristic = False -skirt_brim_minimal_length = 100 -skirt_brim_speed = 20 -skirt_line_count = 3 -speed_layer_0 = =math.ceil(speed_print * 20 / 45) -speed_print = 45 -speed_slowdown_layers = 1 -speed_topbottom = =math.ceil(speed_print * 25 / 45) -speed_travel = 120 -speed_travel_layer_0 = 60 -speed_wall = =math.ceil(speed_print * 25 / 45) -speed_wall_x = =math.ceil(speed_print * 35 / 45) -top_thickness = 0.8 -wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg deleted file mode 100644 index 3eb99a52ea..0000000000 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg +++ /dev/null @@ -1,55 +0,0 @@ -[general] -version = 4 -name = UltraFine -definition = imade3d_jellybox - -[metadata] -setting_version = 7 -type = quality -quality_type = ultrahigh -weight = 2 -material = generic_pla -variant = 0.4 mm - -[values] -adhesion_type = skirt -bottom_thickness = 0.6 -coasting_enable = True -coasting_speed = 95 -cool_fan_full_at_height = 0.65 -cool_fan_speed_max = 100 -cool_fan_speed_min = 50 -cool_min_layer_time = 5 -cool_min_layer_time_fan_speed_max = 10 -cool_min_speed = 10 -infill_before_walls = False -infill_line_width = 0.6 -infill_overlap = 15 -infill_pattern = zigzag -infill_sparse_density = 20 -line_width = 0.4 -material_flow = 90 -material_print_temperature = 202 -material_print_temperature_layer_0 = 210 -meshfix_union_all = False -retraction_amount = 1.3 -retraction_combing = all -retraction_hop_enabled = 0.1 -retraction_min_travel = 1.2 -retraction_prime_speed = 30 -retraction_retract_speed = 70 -retraction_speed = 70 -skin_no_small_gaps_heuristic = False -skirt_brim_minimal_length = 100 -skirt_brim_speed = 20 -skirt_line_count = 3 -speed_layer_0 = =math.ceil(speed_print * 20 / 45) -speed_print = 45 -speed_slowdown_layers = 1 -speed_topbottom = =math.ceil(speed_print * 25 / 45) -speed_travel = 120 -speed_travel_layer_0 = 60 -speed_wall = =math.ceil(speed_print * 25 / 45) -speed_wall_x = =math.ceil(speed_print * 35 / 45) -top_thickness = 0.8 -wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg deleted file mode 100644 index 4a044228c0..0000000000 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg +++ /dev/null @@ -1,55 +0,0 @@ -[general] -version = 4 -name = UltraFine -definition = imade3d_jellybox - -[metadata] -setting_version = 7 -type = quality -quality_type = ultrahigh -weight = 2 -material = generic_pla -variant = 0.4 mm 2-fans - -[values] -adhesion_type = skirt -bottom_thickness = 0.6 -coasting_enable = True -coasting_speed = 95 -cool_fan_full_at_height = 0.65 -cool_fan_speed_max = 100 -cool_fan_speed_min = 20 -cool_min_layer_time = 4 -cool_min_layer_time_fan_speed_max = 10 -cool_min_speed = 10 -infill_before_walls = False -infill_line_width = 0.6 -infill_overlap = 15 -infill_pattern = zigzag -infill_sparse_density = 20 -line_width = 0.4 -material_flow = 90 -material_print_temperature = 202 -material_print_temperature_layer_0 = 210 -meshfix_union_all = False -retraction_amount = 1.3 -retraction_combing = all -retraction_hop_enabled = 0.1 -retraction_min_travel = 1.2 -retraction_prime_speed = 30 -retraction_retract_speed = 70 -retraction_speed = 70 -skin_no_small_gaps_heuristic = False -skirt_brim_minimal_length = 100 -skirt_brim_speed = 20 -skirt_line_count = 3 -speed_layer_0 = =math.ceil(speed_print * 20 / 45) -speed_print = 45 -speed_slowdown_layers = 1 -speed_topbottom = =math.ceil(speed_print * 25 / 45) -speed_travel = 120 -speed_travel_layer_0 = 60 -speed_wall = =math.ceil(speed_print * 25 / 45) -speed_wall_x = =math.ceil(speed_print * 35 / 45) -top_thickness = 0.8 -wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg index 62fe55a619..cc4f3de913 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = imade3d_jellybox [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 @@ -14,3 +14,65 @@ global_quality = True adhesion_type = skirt layer_height = 0.3 layer_height_0 = 0.3 +retraction_hop = 0.2 +bottom_thickness = =top_bottom_thickness +coasting_enable = True +coasting_min_volume = 2 +coasting_volume = 0.032 +cool_fan_speed_max = =cool_fan_speed +infill_before_walls = False +infill_line_width = =round(line_width * 1.5, 2) +infill_pattern = zigzag +infill_sparse_density = 25 +line_width = =machine_nozzle_size +material_bed_temperature = =default_material_bed_temperature +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 5 +print_sequence = all_at_once +retract_at_layer_change = True +retraction_combing = noskin +retraction_hop_enabled = True +retraction_min_travel = =machine_nozzle_size * 3 +retraction_retract_speed = =retraction_speed +retraction_prime_speed = =retraction_speed - 30 +roofing_layer_count = 1 +skin_line_width = =line_width * 1.2 +skin_outline_count = 2 +skirt_brim_minimal_length = 100 +skirt_brim_speed = =speed_layer_0 +skirt_gap = 5 +skirt_line_count = 1 +speed_layer_0 = 20 +speed_roofing = 20 +speed_topbottom = 25 +speed_travel = =speed_print if magic_spiralize else 120 +speed_travel_layer_0 = 60 +support_angle = 60 +support_bottom_enable = False +support_bottom_height = 0 +support_connect_zigzags = False +support_enable = False +support_infill_rate = 20 +support_interface_density = 70 +support_interface_enable = True +support_interface_height = 2 +support_interface_pattern = concentric +support_interface_skip_height = 0.1 +support_type = everywhere +support_use_towers = False +support_xy_distance = 0.8 +support_xy_distance_overhang = =machine_nozzle_size / 2 +support_z_distance = 0.2 +travel_compensate_overlapping_walls_0_enabled = =travel_compensate_overlapping_walls_enabled +travel_compensate_overlapping_walls_x_enabled = =travel_compensate_overlapping_walls_enabled +travel_retract_before_outer_wall = True +wall_0_wipe_dist = =round(line_width * 1.2,1) +bridge_settings_enabled = True +bridge_enable_more_layers = False +bridge_skin_material_flow = 85 +bridge_skin_speed = 20 +bridge_wall_material_flow = 85 +bridge_wall_speed = 20 +infill_enable_travel_optimization = True +retraction_combing_max_distance = 50 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg index f808d5657f..48111629d0 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = imade3d_jellybox [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 @@ -14,3 +14,65 @@ global_quality = True adhesion_type = skirt layer_height = 0.1 layer_height_0 = 0.3 +retraction_hop = 0.1 +bottom_thickness = =top_bottom_thickness +coasting_enable = True +coasting_min_volume = 2 +coasting_volume = 0.032 +cool_fan_speed_max = =cool_fan_speed +infill_before_walls = False +infill_line_width = =round(line_width * 1.5, 2) +infill_pattern = zigzag +infill_sparse_density = 25 +line_width = =machine_nozzle_size +material_bed_temperature = =default_material_bed_temperature +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 5 +print_sequence = all_at_once +retract_at_layer_change = True +retraction_combing = noskin +retraction_hop_enabled = True +retraction_min_travel = =machine_nozzle_size * 3 +retraction_retract_speed = =retraction_speed +retraction_prime_speed = =retraction_speed - 30 +roofing_layer_count = 1 +skin_line_width = =line_width * 1.2 +skin_outline_count = 2 +skirt_brim_minimal_length = 100 +skirt_brim_speed = =speed_layer_0 +skirt_gap = 5 +skirt_line_count = 1 +speed_layer_0 = 20 +speed_roofing = 20 +speed_topbottom = 25 +speed_travel = =speed_print if magic_spiralize else 120 +speed_travel_layer_0 = 60 +support_angle = 60 +support_bottom_enable = False +support_bottom_height = 0 +support_connect_zigzags = False +support_enable = False +support_infill_rate = 20 +support_interface_density = 70 +support_interface_enable = True +support_interface_height = 2 +support_interface_pattern = concentric +support_interface_skip_height = 0.1 +support_type = everywhere +support_use_towers = False +support_xy_distance = 0.8 +support_xy_distance_overhang = =machine_nozzle_size / 2 +support_z_distance = 0.2 +travel_compensate_overlapping_walls_0_enabled = =travel_compensate_overlapping_walls_enabled +travel_compensate_overlapping_walls_x_enabled = =travel_compensate_overlapping_walls_enabled +travel_retract_before_outer_wall = True +wall_0_wipe_dist = =round(line_width * 1.2,1) +bridge_settings_enabled = True +bridge_enable_more_layers = False +bridge_skin_material_flow = 85 +bridge_skin_speed = 20 +bridge_wall_material_flow = 85 +bridge_wall_speed = 20 +infill_enable_travel_optimization = True +retraction_combing_max_distance = 50 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg index c09bbed35e..9827a272c0 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg @@ -4,7 +4,7 @@ name = Medium definition = imade3d_jellybox [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 @@ -14,3 +14,65 @@ global_quality = True adhesion_type = skirt layer_height = 0.2 layer_height_0 = 0.3 +retraction_hop = 0.2 +bottom_thickness = =top_bottom_thickness +coasting_enable = True +coasting_min_volume = 2 +coasting_volume = 0.032 +cool_fan_speed_max = =cool_fan_speed +infill_before_walls = False +infill_line_width = =round(line_width * 1.5, 2) +infill_pattern = zigzag +infill_sparse_density = 25 +line_width = =machine_nozzle_size +material_bed_temperature = =default_material_bed_temperature +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 5 +print_sequence = all_at_once +retract_at_layer_change = True +retraction_combing = noskin +retraction_hop_enabled = True +retraction_min_travel = =machine_nozzle_size * 3 +retraction_retract_speed = =retraction_speed +retraction_prime_speed = =retraction_speed - 30 +roofing_layer_count = 1 +skin_line_width = =line_width * 1.2 +skin_outline_count = 2 +skirt_brim_minimal_length = 100 +skirt_brim_speed = =speed_layer_0 +skirt_gap = 5 +skirt_line_count = 1 +speed_layer_0 = 20 +speed_roofing = 20 +speed_topbottom = 25 +speed_travel = =speed_print if magic_spiralize else 120 +speed_travel_layer_0 = 60 +support_angle = 60 +support_bottom_enable = False +support_bottom_height = 0 +support_connect_zigzags = False +support_enable = False +support_infill_rate = 20 +support_interface_density = 70 +support_interface_enable = True +support_interface_height = 2 +support_interface_pattern = concentric +support_interface_skip_height = 0.1 +support_type = everywhere +support_use_towers = False +support_xy_distance = 0.8 +support_xy_distance_overhang = =machine_nozzle_size / 2 +support_z_distance = 0.2 +travel_compensate_overlapping_walls_0_enabled = =travel_compensate_overlapping_walls_enabled +travel_compensate_overlapping_walls_x_enabled = =travel_compensate_overlapping_walls_enabled +travel_retract_before_outer_wall = True +wall_0_wipe_dist = =round(line_width * 1.2,1) +bridge_settings_enabled = True +bridge_enable_more_layers = False +bridge_skin_material_flow = 85 +bridge_skin_speed = 20 +bridge_wall_material_flow = 85 +bridge_wall_speed = 20 +infill_enable_travel_optimization = True +retraction_combing_max_distance = 50 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg index 27bfbbaf58..6c882498bd 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg @@ -4,7 +4,7 @@ name = UltraFine definition = imade3d_jellybox [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = ultrahigh weight = 2 @@ -14,3 +14,65 @@ global_quality = True adhesion_type = skirt layer_height = 0.05 layer_height_0 = 0.3 +retraction_hop = 0.1 +bottom_thickness = =top_bottom_thickness +coasting_enable = True +coasting_min_volume = 2 +coasting_volume = 0.032 +cool_fan_speed_max = =cool_fan_speed +infill_before_walls = False +infill_line_width = =round(line_width * 1.5, 2) +infill_pattern = zigzag +infill_sparse_density = 25 +line_width = =machine_nozzle_size +material_bed_temperature = =default_material_bed_temperature +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 5 +print_sequence = all_at_once +retract_at_layer_change = True +retraction_combing = noskin +retraction_hop_enabled = True +retraction_min_travel = =machine_nozzle_size * 3 +retraction_retract_speed = =retraction_speed +retraction_prime_speed = =retraction_speed - 30 +roofing_layer_count = 1 +skin_line_width = =line_width * 1.2 +skin_outline_count = 2 +skirt_brim_minimal_length = 100 +skirt_brim_speed = =speed_layer_0 +skirt_gap = 5 +skirt_line_count = 1 +speed_layer_0 = 20 +speed_roofing = 20 +speed_topbottom = 25 +speed_travel = =speed_print if magic_spiralize else 120 +speed_travel_layer_0 = 60 +support_angle = 60 +support_bottom_enable = False +support_bottom_height = 0 +support_connect_zigzags = False +support_enable = False +support_infill_rate = 20 +support_interface_density = 70 +support_interface_enable = True +support_interface_height = 2 +support_interface_pattern = concentric +support_interface_skip_height = 0.1 +support_type = everywhere +support_use_towers = False +support_xy_distance = 0.8 +support_xy_distance_overhang = =machine_nozzle_size / 2 +support_z_distance = 0.2 +travel_compensate_overlapping_walls_0_enabled = =travel_compensate_overlapping_walls_enabled +travel_compensate_overlapping_walls_x_enabled = =travel_compensate_overlapping_walls_enabled +travel_retract_before_outer_wall = True +wall_0_wipe_dist = =round(line_width * 1.2,1) +bridge_settings_enabled = True +bridge_enable_more_layers = False +bridge_skin_material_flow = 85 +bridge_skin_speed = 20 +bridge_wall_material_flow = 85 +bridge_wall_speed = 20 +infill_enable_travel_optimization = True +retraction_combing_max_distance = 50 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox_2/PETG/jb2_generic_petg_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox_2/PETG/jb2_generic_petg_0.4_coarse.inst.cfg new file mode 100644 index 0000000000..423e2d0987 --- /dev/null +++ b/resources/quality/imade3d_jellybox_2/PETG/jb2_generic_petg_0.4_coarse.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = imade3d_jellybox_2 + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -1 +material = generic_petg +variant = 0.4 mm + +[values] +speed_print = 45 diff --git a/resources/quality/imade3d_jellybox_2/PETG/jb2_generic_petg_0.4_fine.inst.cfg b/resources/quality/imade3d_jellybox_2/PETG/jb2_generic_petg_0.4_fine.inst.cfg new file mode 100644 index 0000000000..7c058ac68a --- /dev/null +++ b/resources/quality/imade3d_jellybox_2/PETG/jb2_generic_petg_0.4_fine.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Fine +definition = imade3d_jellybox_2 + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = generic_petg +variant = 0.4 mm + +[values] +speed_print = 50 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox_2/PETG/jb2_generic_petg_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox_2/PETG/jb2_generic_petg_0.4_medium.inst.cfg new file mode 100644 index 0000000000..d8c2f46e59 --- /dev/null +++ b/resources/quality/imade3d_jellybox_2/PETG/jb2_generic_petg_0.4_medium.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Medium +definition = imade3d_jellybox_2 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_petg +variant = 0.4 mm + +[values] +speed_print = 45 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox_2/PLA/jb2_generic_pla_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox_2/PLA/jb2_generic_pla_0.4_coarse.inst.cfg new file mode 100644 index 0000000000..a20fe163d0 --- /dev/null +++ b/resources/quality/imade3d_jellybox_2/PLA/jb2_generic_pla_0.4_coarse.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse +definition = imade3d_jellybox_2 + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -1 +material = generic_pla +variant = 0.4 mm + +[values] +speed_print = 45 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox_2/PLA/jb2_generic_pla_0.4_fine.inst.cfg b/resources/quality/imade3d_jellybox_2/PLA/jb2_generic_pla_0.4_fine.inst.cfg new file mode 100644 index 0000000000..2f8286c1b8 --- /dev/null +++ b/resources/quality/imade3d_jellybox_2/PLA/jb2_generic_pla_0.4_fine.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Fine +definition = imade3d_jellybox_2 + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = generic_pla +variant = 0.4 mm + +[values] +speed_print = 50 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox_2/PLA/jb2_generic_pla_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox_2/PLA/jb2_generic_pla_0.4_medium.inst.cfg new file mode 100644 index 0000000000..db32843e2c --- /dev/null +++ b/resources/quality/imade3d_jellybox_2/PLA/jb2_generic_pla_0.4_medium.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Medium +definition = imade3d_jellybox_2 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_pla +variant = 0.4 mm + +[values] +speed_print = 45 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox_2/PLA/jb2_generic_pla_0.4_ultrafine.inst.cfg b/resources/quality/imade3d_jellybox_2/PLA/jb2_generic_pla_0.4_ultrafine.inst.cfg new file mode 100644 index 0000000000..2727007967 --- /dev/null +++ b/resources/quality/imade3d_jellybox_2/PLA/jb2_generic_pla_0.4_ultrafine.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = UltraFine +definition = imade3d_jellybox_2 + +[metadata] +setting_version = 10 +type = quality +quality_type = ultrahigh +weight = 2 +material = generic_pla +variant = 0.4 mm + +[values] +speed_print = 55 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox_2/jb2_global_coarse.inst.cfg b/resources/quality/imade3d_jellybox_2/jb2_global_coarse.inst.cfg new file mode 100644 index 0000000000..90768577f3 --- /dev/null +++ b/resources/quality/imade3d_jellybox_2/jb2_global_coarse.inst.cfg @@ -0,0 +1,78 @@ +[general] +version = 4 +name = Coarse +definition = imade3d_jellybox_2 + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -1 +global_quality = True + +[values] +adhesion_type = skirt +layer_height = 0.3 +layer_height_0 = 0.3 +retraction_hop = 0.2 +bottom_thickness = =top_bottom_thickness +coasting_enable = True +coasting_min_volume = 2 +coasting_volume = 0.032 +cool_fan_speed_max = =cool_fan_speed +infill_before_walls = False +infill_line_width = =round(line_width * 1.5, 2) +infill_pattern = zigzag +infill_sparse_density = 25 +line_width = =machine_nozzle_size +material_bed_temperature = =default_material_bed_temperature +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 5 +print_sequence = all_at_once +retract_at_layer_change = True +retraction_combing = noskin +retraction_hop_enabled = True +retraction_min_travel = =machine_nozzle_size * 3 +retraction_retract_speed = =retraction_speed +retraction_prime_speed = =retraction_speed - 30 +roofing_layer_count = 1 +skin_line_width = =line_width * 1.2 +skin_outline_count = 2 +skirt_brim_minimal_length = 100 +skirt_brim_speed = =speed_layer_0 +skirt_gap = 5 +skirt_line_count = 1 +speed_layer_0 = 20 +speed_roofing = 20 +speed_topbottom = 25 +speed_travel = =speed_print if magic_spiralize else 120 +speed_travel_layer_0 = 60 +support_angle = 60 +support_bottom_enable = False +support_bottom_height = 0 +support_connect_zigzags = False +support_enable = False +support_infill_rate = 20 +support_interface_density = 70 +support_interface_enable = True +support_interface_height = 2 +support_interface_pattern = concentric +support_interface_skip_height = 0.1 +support_type = everywhere +support_use_towers = False +support_xy_distance = 0.8 +support_xy_distance_overhang = =machine_nozzle_size / 2 +support_z_distance = 0.2 +travel_compensate_overlapping_walls_0_enabled = =travel_compensate_overlapping_walls_enabled +travel_compensate_overlapping_walls_x_enabled = =travel_compensate_overlapping_walls_enabled +travel_retract_before_outer_wall = True +wall_0_wipe_dist = =round(line_width * 1.2,1) +bridge_settings_enabled = True +bridge_enable_more_layers = False +bridge_skin_material_flow = 85 +bridge_skin_speed = 20 +bridge_wall_material_flow = 85 +bridge_wall_speed = 20 +infill_enable_travel_optimization = True +retraction_combing_max_distance = 50 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox_2/jb2_global_fine.inst.cfg b/resources/quality/imade3d_jellybox_2/jb2_global_fine.inst.cfg new file mode 100644 index 0000000000..e447bc79fd --- /dev/null +++ b/resources/quality/imade3d_jellybox_2/jb2_global_fine.inst.cfg @@ -0,0 +1,78 @@ +[general] +version = 4 +name = Fine +definition = imade3d_jellybox_2 + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +global_quality = True + +[values] +adhesion_type = skirt +layer_height = 0.1 +layer_height_0 = 0.3 +retraction_hop = 0.1 +bottom_thickness = =top_bottom_thickness +coasting_enable = True +coasting_min_volume = 2 +coasting_volume = 0.032 +cool_fan_speed_max = =cool_fan_speed +infill_before_walls = False +infill_line_width = =round(line_width * 1.5, 2) +infill_pattern = zigzag +infill_sparse_density = 25 +line_width = =machine_nozzle_size +material_bed_temperature = =default_material_bed_temperature +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 5 +print_sequence = all_at_once +retract_at_layer_change = True +retraction_combing = noskin +retraction_hop_enabled = True +retraction_min_travel = =machine_nozzle_size * 3 +retraction_retract_speed = =retraction_speed +retraction_prime_speed = =retraction_speed - 30 +roofing_layer_count = 1 +skin_line_width = =line_width * 1.2 +skin_outline_count = 2 +skirt_brim_minimal_length = 100 +skirt_brim_speed = =speed_layer_0 +skirt_gap = 5 +skirt_line_count = 1 +speed_layer_0 = 20 +speed_roofing = 20 +speed_topbottom = 25 +speed_travel = =speed_print if magic_spiralize else 120 +speed_travel_layer_0 = 60 +support_angle = 60 +support_bottom_enable = False +support_bottom_height = 0 +support_connect_zigzags = False +support_enable = False +support_infill_rate = 20 +support_interface_density = 70 +support_interface_enable = True +support_interface_height = 2 +support_interface_pattern = concentric +support_interface_skip_height = 0.1 +support_type = everywhere +support_use_towers = False +support_xy_distance = 0.8 +support_xy_distance_overhang = =machine_nozzle_size / 2 +support_z_distance = 0.2 +travel_compensate_overlapping_walls_0_enabled = =travel_compensate_overlapping_walls_enabled +travel_compensate_overlapping_walls_x_enabled = =travel_compensate_overlapping_walls_enabled +travel_retract_before_outer_wall = True +wall_0_wipe_dist = =round(line_width * 1.2,1) +bridge_settings_enabled = True +bridge_enable_more_layers = False +bridge_skin_material_flow = 85 +bridge_skin_speed = 20 +bridge_wall_material_flow = 85 +bridge_wall_speed = 20 +infill_enable_travel_optimization = True +retraction_combing_max_distance = 50 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox_2/jb2_global_normal.inst.cfg b/resources/quality/imade3d_jellybox_2/jb2_global_normal.inst.cfg new file mode 100644 index 0000000000..afd6b5f06c --- /dev/null +++ b/resources/quality/imade3d_jellybox_2/jb2_global_normal.inst.cfg @@ -0,0 +1,78 @@ +[general] +version = 4 +name = Medium +definition = imade3d_jellybox_2 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +global_quality = True + +[values] +adhesion_type = skirt +layer_height = 0.2 +layer_height_0 = 0.3 +retraction_hop = 0.2 +bottom_thickness = =top_bottom_thickness +coasting_enable = True +coasting_min_volume = 2 +coasting_volume = 0.032 +cool_fan_speed_max = =cool_fan_speed +infill_before_walls = False +infill_line_width = =round(line_width * 1.5, 2) +infill_pattern = zigzag +infill_sparse_density = 25 +line_width = =machine_nozzle_size +material_bed_temperature = =default_material_bed_temperature +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 5 +print_sequence = all_at_once +retract_at_layer_change = True +retraction_combing = noskin +retraction_hop_enabled = True +retraction_min_travel = =machine_nozzle_size * 3 +retraction_retract_speed = =retraction_speed +retraction_prime_speed = =retraction_speed - 30 +roofing_layer_count = 1 +skin_line_width = =line_width * 1.2 +skin_outline_count = 2 +skirt_brim_minimal_length = 100 +skirt_brim_speed = =speed_layer_0 +skirt_gap = 5 +skirt_line_count = 1 +speed_layer_0 = 20 +speed_roofing = 20 +speed_topbottom = 25 +speed_travel = =speed_print if magic_spiralize else 120 +speed_travel_layer_0 = 60 +support_angle = 60 +support_bottom_enable = False +support_bottom_height = 0 +support_connect_zigzags = False +support_enable = False +support_infill_rate = 20 +support_interface_density = 70 +support_interface_enable = True +support_interface_height = 2 +support_interface_pattern = concentric +support_interface_skip_height = 0.1 +support_type = everywhere +support_use_towers = False +support_xy_distance = 0.8 +support_xy_distance_overhang = =machine_nozzle_size / 2 +support_z_distance = 0.2 +travel_compensate_overlapping_walls_0_enabled = =travel_compensate_overlapping_walls_enabled +travel_compensate_overlapping_walls_x_enabled = =travel_compensate_overlapping_walls_enabled +travel_retract_before_outer_wall = True +wall_0_wipe_dist = =round(line_width * 1.2,1) +bridge_settings_enabled = True +bridge_enable_more_layers = False +bridge_skin_material_flow = 85 +bridge_skin_speed = 20 +bridge_wall_material_flow = 85 +bridge_wall_speed = 20 +infill_enable_travel_optimization = True +retraction_combing_max_distance = 50 \ No newline at end of file diff --git a/resources/quality/imade3d_jellybox_2/jb2_global_ultrafine.inst.cfg b/resources/quality/imade3d_jellybox_2/jb2_global_ultrafine.inst.cfg new file mode 100644 index 0000000000..f2e109909d --- /dev/null +++ b/resources/quality/imade3d_jellybox_2/jb2_global_ultrafine.inst.cfg @@ -0,0 +1,78 @@ +[general] +version = 4 +name = UltraFine +definition = imade3d_jellybox_2 + +[metadata] +setting_version = 10 +type = quality +quality_type = ultrahigh +weight = 2 +global_quality = True + +[values] +adhesion_type = skirt +layer_height = 0.05 +layer_height_0 = 0.3 +retraction_hop = 0.1 +bottom_thickness = =top_bottom_thickness +coasting_enable = True +coasting_min_volume = 2 +coasting_volume = 0.032 +cool_fan_speed_max = =cool_fan_speed +infill_before_walls = False +infill_line_width = =round(line_width * 1.5, 2) +infill_pattern = zigzag +infill_sparse_density = 25 +line_width = =machine_nozzle_size +material_bed_temperature = =default_material_bed_temperature +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 5 +print_sequence = all_at_once +retract_at_layer_change = True +retraction_combing = noskin +retraction_hop_enabled = True +retraction_min_travel = =machine_nozzle_size * 3 +retraction_retract_speed = =retraction_speed +retraction_prime_speed = =retraction_speed - 30 +roofing_layer_count = 1 +skin_line_width = =line_width * 1.2 +skin_outline_count = 2 +skirt_brim_minimal_length = 100 +skirt_brim_speed = =speed_layer_0 +skirt_gap = 5 +skirt_line_count = 1 +speed_layer_0 = 20 +speed_roofing = 20 +speed_topbottom = 25 +speed_travel = =speed_print if magic_spiralize else 120 +speed_travel_layer_0 = 60 +support_angle = 60 +support_bottom_enable = False +support_bottom_height = 0 +support_connect_zigzags = False +support_enable = False +support_infill_rate = 20 +support_interface_density = 70 +support_interface_enable = True +support_interface_height = 2 +support_interface_pattern = concentric +support_interface_skip_height = 0.1 +support_type = everywhere +support_use_towers = False +support_xy_distance = 0.8 +support_xy_distance_overhang = =machine_nozzle_size / 2 +support_z_distance = 0.2 +travel_compensate_overlapping_walls_0_enabled = =travel_compensate_overlapping_walls_enabled +travel_compensate_overlapping_walls_x_enabled = =travel_compensate_overlapping_walls_enabled +travel_retract_before_outer_wall = True +wall_0_wipe_dist = =round(line_width * 1.2,1) +bridge_settings_enabled = True +bridge_enable_more_layers = False +bridge_skin_material_flow = 85 +bridge_skin_speed = 20 +bridge_wall_material_flow = 85 +bridge_wall_speed = 20 +infill_enable_travel_optimization = True +retraction_combing_max_distance = 50 \ No newline at end of file diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg index bda943ccb3..322cb7481c 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = kemiq_q2_beta [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg index 17a61de974..326049b02b 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = kemiq_q2_beta [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg index 310d93a32a..ea93a2931b 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = kemiq_q2_beta [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg index 4d738769b4..8bb74c3dae 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg @@ -4,7 +4,7 @@ name = Low definition = kemiq_q2_beta [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg index 55593d7bc2..b14647fb95 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = kemiq_q2_beta [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg index a270353100..497d45efa2 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = kemiq_q2_beta [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg index 9efb3ccb63..e305dc760b 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = kemiq_q2_beta [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg index 8c41234af8..3be1fb2883 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = kemiq_q2_beta [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg index 957d009be3..f3462ef32a 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg @@ -4,7 +4,7 @@ name = Low definition = kemiq_q2_beta [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg index 546572b2a6..95cd03ab29 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = kemiq_q2_beta [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg index 743cc19a20..e98449db9c 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = kemiq_q2_gama [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg index ece0fa19c7..10645593dc 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = kemiq_q2_gama [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg index 71338c8c5f..8432a9ead9 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = kemiq_q2_gama [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg index 60066b5f28..c8e17a772d 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg @@ -4,7 +4,7 @@ name = Low definition = kemiq_q2_gama [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg index 42ded06db1..9a234a59cc 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = kemiq_q2_gama [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/key3d/key3d_tyro_best.inst.cfg b/resources/quality/key3d/key3d_tyro_best.inst.cfg new file mode 100644 index 0000000000..0b9289b042 --- /dev/null +++ b/resources/quality/key3d/key3d_tyro_best.inst.cfg @@ -0,0 +1,128 @@ +[general] +version = 4 +name = Best Quality +definition = key3d_tyro + +[metadata] +setting_version = 10 +type = quality +quality_type = best +weight = 1 +global_quality = True + +[values] +layer_height = 0.08 +layer_height_0 = 0.24 +line_width = 0.4 +wall_line_width_0 = 0.4 +initial_layer_line_width_factor = 100 +wall_thickness = 0.8 +wall_0_wipe_dist = 0.2 +roofing_layer_count = 1 +top_bottom_thickness = 0.6 +top_thickness = 0.8 +top_layers = 5 +bottom_thickness = 0.6 +bottom_layers = 3 +top_bottom_pattern = lines +top_bottom_pattern_0 = lines +wall_0_inset = 0 +optimize_wall_printing_order = False +outer_inset_first = False +alternate_extra_perimeter = False +travel_compensate_overlapping_walls_enabled = True +travel_compensate_overlapping_walls_0_enabled = True +travel_compensate_overlapping_walls_x_enabled = True +wall_min_flow = 0 +fill_perimeter_gaps = everywhere +filter_out_tiny_gaps = True +fill_outline_gaps = True +xy_offset = 0 +skin_no_small_gaps_heuristic = True +skin_outline_count = 1 +ironing_enabled = False +infill_sparse_density = 20 +zig_zaggify_infill = False +infill_multiplier = 1 +infill_wall_line_count = 0 +infill_overlap = 10 +skin_overlap = 5 +infill_wipe_dist = 0.1 +gradual_infill_steps = 0 +infill_before_walls = False +infill_support_enabled = False +max_skin_angle_for_expansion = 90 +material_diameter = 1.75 +default_material_print_temperature = 220 +material_print_temperature = 220 +material_print_temperature_layer_0 = 220 +material_initial_print_temperature = 220 +material_final_print_temperature = 220 +default_material_bed_temperature = 0 +material_bed_temperature = 0 +build_volume_temperature = 0 +material_flow = 100 +retraction_enable = True +retract_at_layer_change = False +retraction_amount = 5 +retraction_speed = 45 +retraction_extra_prime_amount = 0 +retraction_min_travel = 0.8 +retraction_count_max = 90 +retraction_extrusion_window = 5 +limit_support_retractions = True +switch_extruder_retraction_amount = 16 +switch_extruder_retraction_speeds = 20 +speed_print = 30 +speed_travel = 150 +speed_layer_0 = 10 +speed_travel_layer_0 = 50 +speed_slowdown_layers = 2 +speed_equalize_flow_enabled = False +acceleration_enabled = False +acceleration_roofing = 3000 +jerk_enabled = False +retraction_combing = off +travel_retract_before_outer_wall = False +retraction_hop_enabled = False +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_0 = 0 +cool_fan_full_at_height = 0.24 +cool_lift_head = False +support_enable = True +support_type = everywhere +support_angle = 50 +support_pattern = grid +support_wall_count = 0 +zig_zaggify_support = False +support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20 +support_infill_angles = [0] +support_brim_enable = True +support_brim_line_count = 5 +support_z_distance = 0.2 +support_xy_distance = 0.7 +support_xy_distance_overhang = 0.2 +support_bottom_stair_step_height = 0.3 +support_bottom_stair_step_width = 5.0 +support_join_distance = 2.0 +support_offset = 0.2 +gradual_support_infill_steps = 0 +support_roof_enable = True +support_bottom_enable = False +support_roof_height = 0.45 +support_roof_density = 45 +support_roof_pattern = lines +support_fan_enable = False +support_use_towers = True +support_tower_diameter = 3 +support_tower_roof_angle = 65 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 3 +meshfix_union_all = True +meshfix_union_all_remove_holes = False +meshfix_extensive_stitching = False +meshfix_keep_open_polygons = False +multiple_mesh_overlap = 0.16 +carve_multiple_volumes = False diff --git a/resources/quality/key3d/key3d_tyro_fast.inst.cfg b/resources/quality/key3d/key3d_tyro_fast.inst.cfg new file mode 100644 index 0000000000..7ab9776b4e --- /dev/null +++ b/resources/quality/key3d/key3d_tyro_fast.inst.cfg @@ -0,0 +1,127 @@ +[general] +version = 4 +name = Fast Quality +definition = key3d_tyro + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -1 +global_quality = True + +[values] +layer_height = 0.24 +layer_height_0 = 0.24 +line_width = 0.4 +initial_layer_line_width_factor = 100 +wall_thickness = 0.8 +wall_0_wipe_dist = 0.2 +roofing_layer_count = 1 +top_bottom_thickness = 0.6 +top_thickness = 0.8 +top_layers = 5 +bottom_thickness = 0.6 +bottom_layers = 3 +top_bottom_pattern = lines +top_bottom_pattern_0 = lines +wall_0_inset = 0 +optimize_wall_printing_order = False +outer_inset_first = False +alternate_extra_perimeter = False +travel_compensate_overlapping_walls_enabled = True +travel_compensate_overlapping_walls_0_enabled = True +travel_compensate_overlapping_walls_x_enabled = True +wall_min_flow = 0 +fill_perimeter_gaps = everywhere +filter_out_tiny_gaps = True +fill_outline_gaps = True +xy_offset = 0 +skin_no_small_gaps_heuristic = True +skin_outline_count = 1 +ironing_enabled = False +infill_sparse_density = 15 +zig_zaggify_infill = False +infill_multiplier = 1 +infill_wall_line_count = 0 +infill_overlap = 10 +skin_overlap = 5 +infill_wipe_dist = 0.1 +gradual_infill_steps = 0 +infill_before_walls = False +infill_support_enabled = False +max_skin_angle_for_expansion = 90 +material_diameter = 1.75 +default_material_print_temperature = 220 +material_print_temperature = 220 +material_print_temperature_layer_0 = 220 +material_initial_print_temperature = 220 +material_final_print_temperature = 220 +default_material_bed_temperature = 0 +material_bed_temperature = 0 +build_volume_temperature = 0 +material_flow = 100 +retraction_enable = True +retract_at_layer_change = False +retraction_amount = 5 +retraction_speed = 45 +retraction_extra_prime_amount = 0 +retraction_min_travel = 0.8 +retraction_count_max = 90 +retraction_extrusion_window = 5 +limit_support_retractions = True +switch_extruder_retraction_amount = 16 +switch_extruder_retraction_speeds = 20 +speed_print = 60 +speed_travel = 150 +speed_layer_0 = 10 +speed_travel_layer_0 = 50 +speed_slowdown_layers = 2 +speed_equalize_flow_enabled = False +acceleration_enabled = False +acceleration_roofing = 3000 +jerk_enabled = False +retraction_combing = off +travel_retract_before_outer_wall = False +retraction_hop_enabled = False +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_0 = 0 +cool_fan_full_at_height = 0.48 +cool_lift_head = False +support_enable = True +support_type = everywhere +support_angle = 50 +support_pattern = grid +support_wall_count = 0 +zig_zaggify_support = False +support_infill_rate = =15 if support_enable else 0 if support_tree_enable else 15 +support_infill_angles = [0] +support_brim_enable = True +support_brim_line_count = 5 +support_z_distance = 0.3 +support_xy_distance = 0.7 +support_xy_distance_overhang = 0.2 +support_bottom_stair_step_height = 0.3 +support_bottom_stair_step_width = 5.0 +support_join_distance = 2.0 +support_offset = 0.2 +gradual_support_infill_steps = 0 +support_roof_enable = True +support_bottom_enable = False +support_roof_height = 0.45 +support_roof_density = 45 +support_roof_pattern = lines +support_fan_enable = False +support_use_towers = True +support_tower_diameter = 3 +support_tower_roof_angle = 65 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 3 +meshfix_union_all = True +meshfix_union_all_remove_holes = False +meshfix_extensive_stitching = False +meshfix_keep_open_polygons = False +multiple_mesh_overlap = 0.16 +carve_multiple_volumes = False diff --git a/resources/quality/key3d/key3d_tyro_normal.inst.cfg b/resources/quality/key3d/key3d_tyro_normal.inst.cfg new file mode 100644 index 0000000000..7ed3791edc --- /dev/null +++ b/resources/quality/key3d/key3d_tyro_normal.inst.cfg @@ -0,0 +1,127 @@ +[general] +version = 4 +name = Normal Quality +definition = key3d_tyro + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +global_quality = True + +[values] +layer_height = 0.16 +layer_height_0 = 0.24 +line_width = 0.4 +initial_layer_line_width_factor = 100 +wall_thickness = 0.8 +wall_0_wipe_dist = 0.2 +roofing_layer_count = 1 +top_bottom_thickness = 0.6 +top_thickness = 0.8 +top_layers = 5 +bottom_thickness = 0.6 +bottom_layers = 3 +top_bottom_pattern = lines +top_bottom_pattern_0 = lines +wall_0_inset = 0 +optimize_wall_printing_order = False +outer_inset_first = False +alternate_extra_perimeter = False +travel_compensate_overlapping_walls_enabled = True +travel_compensate_overlapping_walls_0_enabled = True +travel_compensate_overlapping_walls_x_enabled = True +wall_min_flow = 0 +fill_perimeter_gaps = everywhere +filter_out_tiny_gaps = True +fill_outline_gaps = True +xy_offset = 0 +skin_no_small_gaps_heuristic = True +skin_outline_count = 1 +ironing_enabled = False +infill_sparse_density = 20 +zig_zaggify_infill = False +infill_multiplier = 1 +infill_wall_line_count = 0 +infill_overlap = 10 +skin_overlap = 5 +infill_wipe_dist = 0.1 +gradual_infill_steps = 0 +infill_before_walls = False +infill_support_enabled = False +max_skin_angle_for_expansion = 90 +material_diameter = 1.75 +default_material_print_temperature = 220 +material_print_temperature = 220 +material_print_temperature_layer_0 = 220 +material_initial_print_temperature = 220 +material_final_print_temperature = 220 +default_material_bed_temperature = 0 +material_bed_temperature = 0 +build_volume_temperature = 0 +material_flow = 100 +retraction_enable = True +retract_at_layer_change = False +retraction_amount = 5 +retraction_speed = 45 +retraction_extra_prime_amount = 0 +retraction_min_travel = 0.8 +retraction_count_max = 90 +retraction_extrusion_window = 5 +limit_support_retractions = True +switch_extruder_retraction_amount = 16 +switch_extruder_retraction_speeds = 20 +speed_print = 50 +speed_travel = 150 +speed_layer_0 = 10 +speed_travel_layer_0 = 50 +speed_slowdown_layers = 2 +speed_equalize_flow_enabled = False +acceleration_enabled = False +acceleration_roofing = 3000 +jerk_enabled = False +retraction_combing = off +travel_retract_before_outer_wall = False +retraction_hop_enabled = False +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_0 = 0 +cool_fan_full_at_height = 0.32 +cool_lift_head = False +support_enable = True +support_type = everywhere +support_angle = 50 +support_pattern = grid +support_wall_count = 0 +zig_zaggify_support = False +support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20 +support_infill_angles = [0] +support_brim_enable = True +support_brim_line_count = 5 +support_z_distance = 0.21 +support_xy_distance = 0.7 +support_xy_distance_overhang = 0.2 +support_bottom_stair_step_height = 0.3 +support_bottom_stair_step_width = 5.0 +support_join_distance = 2.0 +support_offset = 0.2 +gradual_support_infill_steps = 0 +support_roof_enable = True +support_bottom_enable = False +support_roof_height = 0.45 +support_roof_density = 45 +support_roof_pattern = lines +support_fan_enable = False +support_use_towers = True +support_tower_diameter = 3 +support_tower_roof_angle = 65 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 3 +meshfix_union_all = True +meshfix_union_all_remove_holes = False +meshfix_extensive_stitching = False +meshfix_keep_open_polygons = False +multiple_mesh_overlap = 0.16 +carve_multiple_volumes = False diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_draft.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_draft.inst.cfg index 6e430754cf..eb4c97cf27 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_draft.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_fast.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_fast.inst.cfg index 71af7efca1..44b09f9547 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_fast.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_high.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_high.inst.cfg index adc8128e6f..898e4eda11 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_high.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_normal.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_normal.inst.cfg index c66aec810e..80fac2dffe 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_normal.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_superdraft.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_superdraft.inst.cfg index 9d8d46e5ca..ac135f6bf1 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_superdraft.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_thickerdraft.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_thickerdraft.inst.cfg index 058fb2fa3c..b93ed65fe4 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_thickerdraft.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_ultra.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_ultra.inst.cfg index 6cbd615d48..3fa7d76b0a 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_ultra.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_verydraft.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_verydraft.inst.cfg index 5c4dfe8a86..07f0ed7898 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_verydraft.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_verydraft.inst.cfg @@ -4,7 +4,7 @@ name = Low Detail Draft definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg index dd99af5356..0f685ab4ab 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg index 20ea357fba..6d8f228c2c 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg index 5d6e1ed7b7..e35f68a495 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg index c573ba3eb2..32e2246ecf 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg index 9e9181b195..776b240c21 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg index 54cec5c3f0..8c86bc7a42 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg index d8aded3c63..76bc0e962e 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg index 84a5bd316a..f7194347a5 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Low Detail Draft definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_draft.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_draft.inst.cfg index 6aad899773..ae3de2e5b4 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_draft.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_fast.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_fast.inst.cfg index 05917d9769..d6b338fb43 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_fast.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_high.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_high.inst.cfg index e2fe95f8d8..1c3966036b 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_high.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_normal.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_normal.inst.cfg index 387a051d64..24a4a71292 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_normal.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_superdraft.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_superdraft.inst.cfg index f659c78f80..b44212f2fd 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_superdraft.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_thickerdraft.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_thickerdraft.inst.cfg index 9e19c78b35..6ed2d68813 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_thickerdraft.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_ultra.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_ultra.inst.cfg index 5ae85d1eef..436d4750f1 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_ultra.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_verydraft.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_verydraft.inst.cfg index 627f70badb..dd2af59f56 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_verydraft.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_verydraft.inst.cfg @@ -4,7 +4,7 @@ name = Low Detail Draft definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_draft.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_draft.inst.cfg index 7f970601b7..8cccd0d887 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_draft.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_fast.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_fast.inst.cfg index b4f5ea7388..b3941891b7 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_fast.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_high.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_high.inst.cfg index 7bc3141980..c901bed90e 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_high.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_normal.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_normal.inst.cfg index c7eb38439c..9196423af0 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_normal.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_superdraft.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_superdraft.inst.cfg index ce0604c7cc..d415ea159c 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_superdraft.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_thickerdraft.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_thickerdraft.inst.cfg index 5ef6b1027d..7533aeca55 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_thickerdraft.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_ultra.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_ultra.inst.cfg index 2a24855305..c98b98695e 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_ultra.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_verydraft.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_verydraft.inst.cfg index 24c6c205fa..b1983e11af 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_verydraft.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_verydraft.inst.cfg @@ -4,7 +4,7 @@ name = Low Detail Draft definition = malyan_m200 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_draft.inst.cfg index 7364bdaa36..5703ed70ba 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_fast.inst.cfg index fd1e5b9a6a..61f721bc6e 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_high.inst.cfg index 836be1bad9..f482c167d0 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_normal.inst.cfg index 30672cda4a..e1b75f9735 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_superdraft.inst.cfg index 1ef32bd44c..9ebdd4fe40 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_thickerdraft.inst.cfg index 9a2c26b034..91a87bb0cd 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_ultra.inst.cfg index d4bf86569b..1209095246 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = thickerdraft weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_verydraft.inst.cfg index b0f626bdaf..5f8d7e964d 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_verydraft.inst.cfg @@ -4,7 +4,7 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg index 6e3de45b42..48977d2631 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg index db7a7f891f..23a7a91006 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg index 145c1a2fd2..7fc15ac57e 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg index 3b264639ad..3d8138452a 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg index 030d82ec0f..f34136d4bd 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg index a075cd54a1..0c852fa4d9 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg index 6846f451b1..ab23462d6e 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg index adee263981..e1189b5c92 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_draft.inst.cfg index fd1cb1969e..0fa5602385 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_fast.inst.cfg index 350ecb9e6c..9956a32d47 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_high.inst.cfg index 661690da24..e022337fd8 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_normal.inst.cfg index b056628016..dc49747ff2 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_superdraft.inst.cfg index 5fe909d1b8..98a2f6a13b 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_thickerdraft.inst.cfg index e423d179e0..72495c6975 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_ultra.inst.cfg index 6e3dc051de..57b306426a 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_verydraft.inst.cfg index ca6bd27c56..97426a8689 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_verydraft.inst.cfg @@ -4,7 +4,7 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_draft.inst.cfg index e33d685f11..939706e27c 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_fast.inst.cfg index e348f871b2..af06b692ae 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_high.inst.cfg index 311c7b23f8..906d0d0c6d 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_normal.inst.cfg index 4c6f55d812..477135c108 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_superdraft.inst.cfg index 13e57bf86a..64f1811850 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_thickerdraft.inst.cfg index c2e07310d1..6679dbe999 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_ultra.inst.cfg index 41bc8a8431..d94e228912 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_verydraft.inst.cfg index 50b10e3078..bd3f404abf 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_verydraft.inst.cfg @@ -4,7 +4,7 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_draft.inst.cfg index 107dfc3d24..47c439da4e 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_fast.inst.cfg index 6e55583184..211e4f780f 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_high.inst.cfg index f809902f60..853a17ace9 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_normal.inst.cfg index 770a51e1dd..5b2b0fac23 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_superdraft.inst.cfg index e2116bdd85..134bb4d4a1 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_thickerdraft.inst.cfg index ce902318f8..0094f4d1dc 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_ultra.inst.cfg index 6b5d2604d0..b990a5d60a 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_verydraft.inst.cfg index b777e97444..7275fb136b 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_verydraft.inst.cfg @@ -4,7 +4,7 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_draft.inst.cfg index f1080c776c..04687ec000 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_fast.inst.cfg index 7b7525f007..46c5067b23 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_high.inst.cfg index d0bfe599a4..19c5c6d1d2 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_normal.inst.cfg index 07b08619d1..6a68d6110a 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_superdraft.inst.cfg index 74a03b7cbc..46e1797e16 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_thickerdraft.inst.cfg index fc3ec719d0..fb54021f50 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_ultra.inst.cfg index 316c4a2d17..1b43dcc27f 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_verydraft.inst.cfg index fbbefb9937..fcda0b6bc6 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_verydraft.inst.cfg @@ -4,7 +4,7 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 7 +setting_version = 10 type = quality material = generic_pla weight = 0 diff --git a/resources/quality/normal.inst.cfg b/resources/quality/normal.inst.cfg index b8828f07e0..fb28bd7310 100644 --- a/resources/quality/normal.inst.cfg +++ b/resources/quality/normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = fdmprinter [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/nwa3d_a31/nwa3d_a31_best.inst.cfg b/resources/quality/nwa3d_a31/nwa3d_a31_best.inst.cfg new file mode 100644 index 0000000000..53649d3742 --- /dev/null +++ b/resources/quality/nwa3d_a31/nwa3d_a31_best.inst.cfg @@ -0,0 +1,128 @@ + +[general] +version = 4 +name = Best Quality +definition = nwa3d_a31 + +[metadata] +setting_version = 10 +type = quality +quality_type = best +weight = 1 +global_quality = True + +[values] +layer_height = 0.08 +layer_height_0 = 0.24 +line_width = 0.4 +wall_line_width_0 = 0.4 +initial_layer_line_width_factor = 100 +wall_thickness = 0.8 +wall_0_wipe_dist = 0.2 +roofing_layer_count = 1 +top_bottom_thickness = 0.6 +top_thickness = 0.8 +top_layers = 5 +bottom_thickness = 0.6 +bottom_layers = 3 +top_bottom_pattern = lines +top_bottom_pattern_0 = lines +wall_0_inset = 0 +optimize_wall_printing_order = False +outer_inset_first = False +alternate_extra_perimeter = False +travel_compensate_overlapping_walls_enabled = True +travel_compensate_overlapping_walls_0_enabled = True +travel_compensate_overlapping_walls_x_enabled = True +wall_min_flow = 0 +fill_perimeter_gaps = everywhere +filter_out_tiny_gaps = True +fill_outline_gaps = True +xy_offset = 0 +skin_no_small_gaps_heuristic = True +skin_outline_count = 1 +ironing_enabled = False +infill_sparse_density = 20 +zig_zaggify_infill = False +infill_multiplier = 1 +infill_wall_line_count = 0 +infill_overlap = 10 +skin_overlap = 5 +infill_wipe_dist = 0.1 +gradual_infill_steps = 0 +infill_before_walls = False +infill_support_enabled = False +max_skin_angle_for_expansion = 90 +material_diameter = 1.75 +default_material_print_temperature = 220 +material_print_temperature = 220 +material_print_temperature_layer_0 = 220 +material_initial_print_temperature = 220 +material_final_print_temperature = 220 +default_material_bed_temperature = 50 +material_bed_temperature = 50 +material_flow = 100 +retraction_enable = True +retract_at_layer_change = False +retraction_amount = 5 +retraction_speed = 45 +retraction_extra_prime_amount = 0 +retraction_min_travel = 0.8 +retraction_count_max = 90 +retraction_extrusion_window = 5 +limit_support_retractions = True +switch_extruder_retraction_amount = 16 +switch_extruder_retraction_speeds = 20 +speed_print = 30 +speed_travel = 150 +speed_layer_0 = 10 +speed_travel_layer_0 = 50 +speed_slowdown_layers = 2 +speed_equalize_flow_enabled = False +acceleration_enabled = False +acceleration_roofing = 3000 +jerk_enabled = False +retraction_combing = off +travel_retract_before_outer_wall = False +retraction_hop_enabled = False +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_0 = 0 +cool_fan_full_at_height = 0.24 +cool_lift_head = False +support_enable = True +support_type = everywhere +support_angle = 50 +support_pattern = grid +support_wall_count = 0 +zig_zaggify_support = False +support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20 +support_infill_angles = [0] +support_brim_enable = True +support_brim_line_count = 5 +support_z_distance = 0.2 +support_xy_distance = 0.7 +support_xy_distance_overhang = 0.2 +support_bottom_stair_step_height = 0.3 +support_bottom_stair_step_width = 5.0 +support_join_distance = 2.0 +support_offset = 0.2 +gradual_support_infill_steps = 0 +support_roof_enable = True +support_bottom_enable = False +support_roof_height = 0.45 +support_roof_density = 45 +support_roof_pattern = lines +support_fan_enable = False +support_use_towers = True +support_tower_diameter = 3 +support_tower_roof_angle = 65 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 3 +meshfix_union_all = True +meshfix_union_all_remove_holes = False +meshfix_extensive_stitching = False +meshfix_keep_open_polygons = False +multiple_mesh_overlap = 0.16 +carve_multiple_volumes = False diff --git a/resources/quality/nwa3d_a31/nwa3d_a31_e.inst.cfg b/resources/quality/nwa3d_a31/nwa3d_a31_e.inst.cfg new file mode 100644 index 0000000000..320e995fdb --- /dev/null +++ b/resources/quality/nwa3d_a31/nwa3d_a31_e.inst.cfg @@ -0,0 +1,124 @@ +[general] +version = 4 +name = 0.6 Engineering Quality +definition = nwa3d_a31 + +[metadata] +setting_version = 10 +type = quality +quality_type = Engineering +weight = -2 +global_quality = True + +[values] +layer_height = 0.28 +layer_height_0 = 0.4 +line_width = 0.6 +wall_line_width_0 = 0.6 +initial_layer_line_width_factor = 100 +wall_thickness = 1.2 +wall_0_wipe_dist = 0.2 +roofing_layer_count = 1 +top_bottom_thickness = 1.2 +top_layers = 5 +bottom_layers = 3 +top_bottom_pattern = lines +top_bottom_pattern_0 = lines +wall_0_inset = 0 +optimize_wall_printing_order = False +outer_inset_first = False +alternate_extra_perimeter = False +travel_compensate_overlapping_walls_enabled = True +travel_compensate_overlapping_walls_0_enabled = True +travel_compensate_overlapping_walls_x_enabled = True +wall_min_flow = 0 +fill_perimeter_gaps = everywhere +filter_out_tiny_gaps = True +fill_outline_gaps = True +xy_offset = 0 +skin_no_small_gaps_heuristic = True +skin_outline_count = 1 +ironing_enabled = False +infill_sparse_density = 15 +zig_zaggify_infill = False +infill_multiplier = 1 +infill_wall_line_count = 0 +infill_overlap = 10 +skin_overlap = 5 +infill_wipe_dist = 0.15 +gradual_infill_steps = 0 +infill_before_walls = False +infill_support_enabled = False +max_skin_angle_for_expansion = 90 +material_diameter = 1.75 +default_material_print_temperature = 220 +material_print_temperature = 220 +material_print_temperature_layer_0 = 220 +material_initial_print_temperature = 220 +material_final_print_temperature = 220 +default_material_bed_temperature = 50 +material_bed_temperature = 50 +material_flow = 100 +retraction_enable = True +retract_at_layer_change = False +retraction_amount = 5 +retraction_speed = 45 +retraction_extra_prime_amount = 0 +retraction_min_travel = 1.2 +retraction_count_max = 90 +retraction_extrusion_window = 5 +limit_support_retractions = True +switch_extruder_retraction_amount = 16 +switch_extruder_retraction_speeds = 20 +speed_print = 40 +speed_travel = 150 +speed_layer_0 = 10 +speed_travel_layer_0 = 40 +speed_slowdown_layers = 2 +speed_equalize_flow_enabled = False +acceleration_enabled = False +jerk_enabled = False +retraction_combing = off +travel_retract_before_outer_wall = False +retraction_hop_enabled = False +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_0 = 0 +cool_fan_full_layer = 3 +cool_lift_head = False +support_enable = True +support_type = everywhere +support_angle = 50 +support_pattern = grid +support_wall_count = 0 +zig_zaggify_support = False +support_infill_rate = =10 if support_enable else 0 if support_tree_enable else 10 +support_infill_angles = [0] +support_brim_enable = True +support_brim_line_count = 5 +support_z_distance = 0.34 +support_xy_distance = 0.7 +support_xy_distance_overhang = 0.2 +support_bottom_stair_step_height = 0.3 +support_bottom_stair_step_width = 5.0 +support_join_distance = 2.0 +support_offset = 0.2 +gradual_support_infill_steps = 0 +support_roof_enable = True +support_bottom_enable = False +support_roof_height = .45 +support_roof_density = 45 +support_roof_pattern = grid +support_fan_enable = False +support_use_towers = True +support_tower_diameter = 3 +support_tower_roof_angle = 65 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 3 +meshfix_union_all = True +meshfix_union_all_remove_holes = False +meshfix_extensive_stitching = False +meshfix_keep_open_polygons = False +multiple_mesh_overlap = 0.16 +carve_multiple_volumes = False diff --git a/resources/quality/nwa3d_a31/nwa3d_a31_fast.inst.cfg b/resources/quality/nwa3d_a31/nwa3d_a31_fast.inst.cfg new file mode 100644 index 0000000000..ad35303020 --- /dev/null +++ b/resources/quality/nwa3d_a31/nwa3d_a31_fast.inst.cfg @@ -0,0 +1,128 @@ + +[general] +version = 4 +name = Fast Quality +definition = nwa3d_a31 + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -1 +global_quality = True + +[values] +layer_height = 0.24 +layer_height_0 = 0.24 +line_width = 0.4 +wall_line_width_0 = 0.4 +initial_layer_line_width_factor = 100 +wall_thickness = 0.8 +wall_0_wipe_dist = 0.2 +roofing_layer_count = 1 +top_bottom_thickness = 0.6 +top_thickness = 0.8 +top_layers = 5 +bottom_thickness = 0.6 +bottom_layers = 3 +top_bottom_pattern = lines +top_bottom_pattern_0 = lines +wall_0_inset = 0 +optimize_wall_printing_order = False +outer_inset_first = False +alternate_extra_perimeter = False +travel_compensate_overlapping_walls_enabled = True +travel_compensate_overlapping_walls_0_enabled = True +travel_compensate_overlapping_walls_x_enabled = True +wall_min_flow = 0 +fill_perimeter_gaps = everywhere +filter_out_tiny_gaps = True +fill_outline_gaps = True +xy_offset = 0 +skin_no_small_gaps_heuristic = True +skin_outline_count = 1 +ironing_enabled = False +infill_sparse_density = 15 +zig_zaggify_infill = False +infill_multiplier = 1 +infill_wall_line_count = 0 +infill_overlap = 10 +skin_overlap = 5 +infill_wipe_dist = 0.1 +gradual_infill_steps = 0 +infill_before_walls = False +infill_support_enabled = False +max_skin_angle_for_expansion = 90 +material_diameter = 1.75 +default_material_print_temperature = 220 +material_print_temperature = 220 +material_print_temperature_layer_0 = 220 +material_initial_print_temperature = 220 +material_final_print_temperature = 220 +default_material_bed_temperature = 50 +material_bed_temperature = 50 +material_flow = 100 +retraction_enable = True +retract_at_layer_change = False +retraction_amount = 5 +retraction_speed = 45 +retraction_extra_prime_amount = 0 +retraction_min_travel = 0.8 +retraction_count_max = 90 +retraction_extrusion_window = 5 +limit_support_retractions = True +switch_extruder_retraction_amount = 16 +switch_extruder_retraction_speeds = 20 +speed_print = 60 +speed_travel = 150 +speed_layer_0 = 10 +speed_travel_layer_0 = 50 +speed_slowdown_layers = 2 +speed_equalize_flow_enabled = False +acceleration_enabled = False +acceleration_roofing = 3000 +jerk_enabled = False +retraction_combing = off +travel_retract_before_outer_wall = False +retraction_hop_enabled = False +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_0 = 0 +cool_fan_full_at_height = 0.48 +cool_lift_head = False +support_enable = True +support_type = everywhere +support_angle = 50 +support_pattern = grid +support_wall_count = 0 +zig_zaggify_support = False +support_infill_rate = =15 if support_enable else 0 if support_tree_enable else 15 +support_infill_angles = [0] +support_brim_enable = True +support_brim_line_count = 5 +support_z_distance = 0.3 +support_xy_distance = 0.7 +support_xy_distance_overhang = 0.2 +support_bottom_stair_step_height = 0.3 +support_bottom_stair_step_width = 5.0 +support_join_distance = 2.0 +support_offset = 0.2 +gradual_support_infill_steps = 0 +support_roof_enable = True +support_bottom_enable = False +support_roof_height = 0.45 +support_roof_density = 45 +support_roof_pattern = lines +support_fan_enable = False +support_use_towers = True +support_tower_diameter = 3 +support_tower_roof_angle = 65 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 3 +meshfix_union_all = True +meshfix_union_all_remove_holes = False +meshfix_extensive_stitching = False +meshfix_keep_open_polygons = False +multiple_mesh_overlap = 0.16 +carve_multiple_volumes = False diff --git a/resources/quality/nwa3d_a31/nwa3d_a31_normal.inst.cfg b/resources/quality/nwa3d_a31/nwa3d_a31_normal.inst.cfg new file mode 100644 index 0000000000..7a75896032 --- /dev/null +++ b/resources/quality/nwa3d_a31/nwa3d_a31_normal.inst.cfg @@ -0,0 +1,127 @@ +[general] +version = 4 +name = Normal Quality +definition = nwa3d_a31 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +global_quality = True + +[values] +layer_height = 0.16 +layer_height_0 = 0.24 +line_width = 0.4 +wall_line_width_0 = 0.4 +initial_layer_line_width_factor = 100 +wall_thickness = 0.8 +wall_0_wipe_dist = 0.2 +roofing_layer_count = 1 +top_bottom_thickness = 0.6 +top_thickness = 0.8 +top_layers = 5 +bottom_thickness = 0.6 +bottom_layers = 3 +top_bottom_pattern = lines +top_bottom_pattern_0 = lines +wall_0_inset = 0 +optimize_wall_printing_order = False +outer_inset_first = False +alternate_extra_perimeter = False +travel_compensate_overlapping_walls_enabled = True +travel_compensate_overlapping_walls_0_enabled = True +travel_compensate_overlapping_walls_x_enabled = True +wall_min_flow = 0 +fill_perimeter_gaps = everywhere +filter_out_tiny_gaps = True +fill_outline_gaps = True +xy_offset = 0 +skin_no_small_gaps_heuristic = True +skin_outline_count = 1 +ironing_enabled = False +infill_sparse_density = 20 +zig_zaggify_infill = False +infill_multiplier = 1 +infill_wall_line_count = 0 +infill_overlap = 10 +skin_overlap = 5 +infill_wipe_dist = 0.1 +gradual_infill_steps = 0 +infill_before_walls = False +infill_support_enabled = False +max_skin_angle_for_expansion = 90 +material_diameter = 1.75 +default_material_print_temperature = 220 +material_print_temperature = 220 +material_print_temperature_layer_0 = 220 +material_initial_print_temperature = 220 +material_final_print_temperature = 220 +default_material_bed_temperature = 50 +material_bed_temperature = 50 +material_flow = 100 +retraction_enable = True +retract_at_layer_change = False +retraction_amount = 5 +retraction_speed = 45 +retraction_extra_prime_amount = 0 +retraction_min_travel = 0.8 +retraction_count_max = 90 +retraction_extrusion_window = 5 +limit_support_retractions = True +switch_extruder_retraction_amount = 16 +switch_extruder_retraction_speeds = 20 +speed_print = 50 +speed_travel = 150 +speed_layer_0 = 10 +speed_travel_layer_0 = 50 +speed_slowdown_layers = 2 +speed_equalize_flow_enabled = False +acceleration_enabled = False +acceleration_roofing = 3000 +jerk_enabled = False +retraction_combing = off +travel_retract_before_outer_wall = False +retraction_hop_enabled = False +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_0 = 0 +cool_fan_full_at_height = 0.32 +cool_lift_head = False +support_enable = True +support_type = everywhere +support_angle = 50 +support_pattern = grid +support_wall_count = 0 +zig_zaggify_support = False +support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20 +support_infill_angles = [0] +support_brim_enable = True +support_brim_line_count = 5 +support_z_distance = 0.21 +support_xy_distance = 0.7 +support_xy_distance_overhang = 0.2 +support_bottom_stair_step_height = 0.3 +support_bottom_stair_step_width = 5.0 +support_join_distance = 2.0 +support_offset = 0.2 +gradual_support_infill_steps = 0 +support_roof_enable = True +support_bottom_enable = False +support_roof_height = 0.45 +support_roof_density = 45 +support_roof_pattern = lines +support_fan_enable = False +support_use_towers = True +support_tower_diameter = 3 +support_tower_roof_angle = 65 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 3 +meshfix_union_all = True +meshfix_union_all_remove_holes = False +meshfix_extensive_stitching = False +meshfix_keep_open_polygons = False +multiple_mesh_overlap = 0.16 +carve_multiple_volumes = False diff --git a/resources/quality/nwa3d_a5/nwa3d_a5_best.inst.cfg b/resources/quality/nwa3d_a5/nwa3d_a5_best.inst.cfg index 8eabfa8141..47949c5892 100644 --- a/resources/quality/nwa3d_a5/nwa3d_a5_best.inst.cfg +++ b/resources/quality/nwa3d_a5/nwa3d_a5_best.inst.cfg @@ -4,7 +4,7 @@ name = Best Quality definition = nwa3d_a5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = best weight = 1 @@ -14,7 +14,6 @@ global_quality = True layer_height = 0.08 layer_height_0 = 0.24 line_width = 0.4 -wall_line_width_0 = 100 initial_layer_line_width_factor = 100 wall_thickness = 0.8 wall_0_wipe_dist = 0.2 @@ -76,7 +75,6 @@ speed_print = 30 speed_travel = 150 speed_layer_0 = 10 speed_travel_layer_0 = 50 -max_feedrate_z_override = 0 speed_slowdown_layers = 2 speed_equalize_flow_enabled = False acceleration_enabled = False @@ -97,7 +95,7 @@ support_pattern = grid support_wall_count = 0 zig_zaggify_support = False support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20 -support_infill_angle = 0 +support_infill_angles = [0] support_brim_enable = True support_brim_line_count = 5 support_z_distance = 0.18 diff --git a/resources/quality/nwa3d_a5/nwa3d_a5_fast.inst.cfg b/resources/quality/nwa3d_a5/nwa3d_a5_fast.inst.cfg index ae6411f4f1..697fafddf9 100644 --- a/resources/quality/nwa3d_a5/nwa3d_a5_fast.inst.cfg +++ b/resources/quality/nwa3d_a5/nwa3d_a5_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast Quality definition = nwa3d_a5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 @@ -14,7 +14,6 @@ global_quality = True layer_height = 0.24 layer_height_0 = 0.24 line_width = 0.4 -wall_line_width_0 = 100 initial_layer_line_width_factor = 100 wall_thickness = 0.8 wall_0_wipe_dist = 0.2 @@ -76,7 +75,6 @@ speed_print = 60 speed_travel = 150 speed_layer_0 = 10 speed_travel_layer_0 = 50 -max_feedrate_z_override = 0 speed_slowdown_layers = 2 speed_equalize_flow_enabled = False acceleration_enabled = False @@ -97,7 +95,7 @@ support_pattern = grid support_wall_count = 0 zig_zaggify_support = False support_infill_rate = =15 if support_enable else 0 if support_tree_enable else 15 -support_infill_angle = 0 +support_infill_angles = [0] support_brim_enable = True support_brim_line_count = 5 support_z_distance = 0.3 diff --git a/resources/quality/nwa3d_a5/nwa3d_a5_normal.inst.cfg b/resources/quality/nwa3d_a5/nwa3d_a5_normal.inst.cfg index d825c8b85e..519b2f2816 100644 --- a/resources/quality/nwa3d_a5/nwa3d_a5_normal.inst.cfg +++ b/resources/quality/nwa3d_a5/nwa3d_a5_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal Quality definition = nwa3d_a5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 @@ -14,7 +14,6 @@ global_quality = True layer_height = 0.16 layer_height_0 = 0.24 line_width = 0.4 -wall_line_width_0 = 100 initial_layer_line_width_factor = 100 wall_thickness = 0.8 wall_0_wipe_dist = 0.2 @@ -76,7 +75,6 @@ speed_print = 50 speed_travel = 150 speed_layer_0 = 10 speed_travel_layer_0 = 50 -max_feedrate_z_override = 0 speed_slowdown_layers = 2 speed_equalize_flow_enabled = False acceleration_enabled = False @@ -97,7 +95,7 @@ support_pattern = grid support_wall_count = 0 zig_zaggify_support = False support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20 -support_infill_angle = 0 +support_infill_angles = [0] support_brim_enable = True support_brim_line_count = 5 support_z_distance = 0.21 diff --git a/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg index dab819cc38..5eba875cbb 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg @@ -4,10 +4,11 @@ name = Coarse definition = peopoly_moai [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = 3 +global_quality = True [values] layer_height = 0.08 diff --git a/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg index feb005e39c..105bb5aac3 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg @@ -4,10 +4,11 @@ name = Draft definition = peopoly_moai [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 +global_quality = True [values] layer_height = 0.1 diff --git a/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg index 46bd8f4a63..9c83be7d63 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg @@ -4,10 +4,11 @@ name = Extra High definition = peopoly_moai [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extra_high weight = 0 +global_quality = True [values] layer_height = 0.02 diff --git a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg index 2b951c6e4e..820657ba8b 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg @@ -4,10 +4,11 @@ name = High definition = peopoly_moai [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 +global_quality = True [values] layer_height = 0.04 diff --git a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg index b965862a16..2ff1636ee4 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg @@ -4,10 +4,11 @@ name = Normal definition = peopoly_moai [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 +global_quality = True [values] layer_height = 0.06 diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_A.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_A.inst.cfg new file mode 100644 index 0000000000..a3260a32f4 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_A.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = a +weight = 1 +material = emotiontech_abs +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 35/50) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 6 * layer_height +cool_min_speed = 10 +support_angle = 65 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 98 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_B.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_B.inst.cfg new file mode 100644 index 0000000000..648ec5520c --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 0 +material = emotiontech_abs +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 55 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 25/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 95 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_C.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_C.inst.cfg new file mode 100644 index 0000000000..e3fe5f49fc --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_ABS_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = -1 +material = emotiontech_abs +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 60 +speed_wall = =math.ceil(speed_print * 40/60) +speed_wall_0 = =math.ceil(speed_wall * 35/40) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 6 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =default_material_print_temperature +5 +material_flow = 91 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_A.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_A.inst.cfg new file mode 100644 index 0000000000..8482d229ce --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_A.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = a +weight = 1 +material = emotiontech_petg +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 35/50) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 65 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 98 +retraction_extra_prime_amount = 0 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_B.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_B.inst.cfg new file mode 100644 index 0000000000..fdddcfbdf5 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 0 +material = emotiontech_petg +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 55 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 25/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 95 +retraction_extra_prime_amount = 0 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_C.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_C.inst.cfg new file mode 100644 index 0000000000..841c23b837 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PETG_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = -1 +material = emotiontech_petg +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 60 +speed_wall = =math.ceil(speed_print * 40/60) +speed_wall_0 = =math.ceil(speed_wall * 35/40) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =default_material_print_temperature +5 +material_flow = 91 +retraction_extra_prime_amount = 0 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_A.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_A.inst.cfg new file mode 100644 index 0000000000..ff541e9c67 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_A.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = a +weight = 1 +material = emotiontech_pla +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 35/50) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 10 +support_angle = 65 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature -5 +material_flow = 98 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_B.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_B.inst.cfg new file mode 100644 index 0000000000..291ea81dc8 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 0 +material = emotiontech_pla +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 55 +speed_wall = =math.ceil(speed_print * 37/55) +speed_wall_0 = =math.ceil(speed_wall * 33/37) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 25/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 95 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_C.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_C.inst.cfg new file mode 100644 index 0000000000..7afac5304e --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PLA_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = -1 +material = emotiontech_pla +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.35 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.3 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 60 +speed_wall = =math.ceil(speed_print * 40/60) +speed_wall_0 = =math.ceil(speed_wall * 35/40) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +material_flow = 91 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_A.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_A.inst.cfg new file mode 100644 index 0000000000..19d8247456 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_A.inst.cfg @@ -0,0 +1,48 @@ + [general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = a +weight = 1 +material = emotiontech_pva-m +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 65 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 95 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width*3/4 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 3 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_B.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_B.inst.cfg new file mode 100644 index 0000000000..44e5609b3f --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_B.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 0 +material = emotiontech_pva-m +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature + 3 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 95 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width*3/4 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 3 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_C.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_C.inst.cfg new file mode 100644 index 0000000000..b4cc317f50 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-M_C.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = -1 +material = emotiontech_pva-m +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 95 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width*3/4 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 3 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_A.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_A.inst.cfg new file mode 100644 index 0000000000..eb8bd0a020 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_A.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = a +weight = 1 +material = emotiontech_pva-oks +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 65 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 95 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width*3/4 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 3 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_B.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_B.inst.cfg new file mode 100644 index 0000000000..a25f57b3e7 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_B.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 0 +material = emotiontech_pva-oks +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature + 3 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 95 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width*3/4 +support_xy_distance_overhang = ==line_width*0.175/line_width +support_offset = 3 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_C.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_C.inst.cfg new file mode 100644 index 0000000000..6222d946e0 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-OKS_C.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = -1 +material = emotiontech_pva-oks +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 95 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width*3/4 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 3 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_A.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_A.inst.cfg new file mode 100644 index 0000000000..774a985511 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_A.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = a +weight = 1 +material = emotiontech_pva-s +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 65 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 95 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width*3/4 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 3 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_B.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_B.inst.cfg new file mode 100644 index 0000000000..72429d945b --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_B.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 0 +material = emotiontech_pva-s +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature + 3 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 95 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 15 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width*3/4 +support_xy_distance_overhang = ==line_width*0.175/line_width +support_offset = 3 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_C.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_C.inst.cfg new file mode 100644 index 0000000000..09c540498e --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_PVA-S_C.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = -1 +material = emotiontech_pva-s +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.4 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 95 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width*3/4 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 3 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_A.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_A.inst.cfg new file mode 100644 index 0000000000..7c31ab6b41 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_A.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = A +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = a +weight = 1 +material = emotiontech_tpu98a +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 30 +speed_wall = =math.ceil(speed_print * 30/30) +speed_wall_0 = =math.ceil(speed_print * 25/30) +speed_topbottom = =math.ceil(speed_print * 25/30) +speed_layer_0 = =math.ceil(speed_print * 20/30) +speed_slowdown_layers = 1 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 3 +material_print_temperature_layer_0 = =default_material_print_temperature - 3 +material_flow = 107 +retraction_extra_prime_amount = 0.2 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = False +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 2.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 0.5 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_B.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_B.inst.cfg new file mode 100644 index 0000000000..67fb9d5dcb --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 0 +material = emotiontech_tpu98a +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 35 +speed_wall = =math.ceil(speed_print * 35/35) +speed_wall_0 = =math.ceil(speed_print * 27/35) +speed_topbottom = =math.ceil(speed_print * 25/35) +speed_layer_0 = =math.ceil(speed_print * 20/35) +speed_slowdown_layers = 1 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 103 +retraction_extra_prime_amount = 0.2 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = False +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 2.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 0.5 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_C.inst.cfg b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_C.inst.cfg new file mode 100644 index 0000000000..fbe0f733cc --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.4/s3d_std0.4_TPU98A_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = -1 +material = emotiontech_tpu98a +variant = Standard 0.4 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.38 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 40/40) +speed_wall_0 = =math.ceil(speed_print * 30/40) +speed_topbottom = =math.ceil(speed_print * 27/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 1 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 7 +material_print_temperature_layer_0 = =default_material_print_temperature + 3 +material_flow = 101 +retraction_extra_prime_amount = 0.2 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = False +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 2.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 0.5 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_B.inst.cfg new file mode 100644 index 0000000000..517a0d9943 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 1 +material = emotiontech_abs +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 37/50) +speed_wall_0 = =math.ceil(speed_wall * 27/43) +speed_topbottom = =math.ceil(speed_print * 33/50) +speed_layer_0 = =math.ceil(speed_print * 20/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 6 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_C.inst.cfg new file mode 100644 index 0000000000..0a55c5fef6 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 0 +material = emotiontech_abs +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 55 +speed_wall = =math.ceil(speed_print * 40/55) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 35/55) +speed_layer_0 = =math.ceil(speed_print * 23/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 6 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_D.inst.cfg new file mode 100644 index 0000000000..6128889e8c --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ABS_D.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = D +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = d +weight = -1 +material = emotiontech_abs +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 60 +speed_wall = =math.ceil(speed_print * 43/60) +speed_wall_0 = =math.ceil(speed_wall * 33/43) +speed_topbottom = =math.ceil(speed_print * 37/60) +speed_layer_0 = =math.ceil(speed_print * 25/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 6 * layer_height +cool_min_speed = 10 +support_angle = 45 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =default_material_print_temperature +5 +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_B.inst.cfg new file mode 100644 index 0000000000..af9b874470 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 1 +material = emotiontech_asax +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 37/50) +speed_wall_0 = =math.ceil(speed_wall * 30/37) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 40 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature + 2 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_C.inst.cfg new file mode 100644 index 0000000000..1ee8fcd291 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 0 +material = emotiontech_asax +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 55 +speed_wall = =math.ceil(speed_print * 40/55) +speed_wall_0 = =math.ceil(speed_wall * 33/40) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 27/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 40 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature + 2 +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_D.inst.cfg new file mode 100644 index 0000000000..9922045d01 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_ASA-X_D.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = D +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = d +weight = -1 +material = emotiontech_asax +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 60 +speed_wall = =math.ceil(speed_print * 43/60) +speed_wall_0 = =math.ceil(speed_wall * 35/45) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 40 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 8 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_Nylon-1030_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_Nylon-1030_C.inst.cfg new file mode 100644 index 0000000000..f8b58f5600 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_Nylon-1030_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 0 +material = emotiontech_nylon_1030 +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 55 +speed_wall = =math.ceil(speed_print * 40/55) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 35/55) +speed_layer_0 = =math.ceil(speed_print * 23/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature + 3 +material_flow = 93 +retraction_extra_prime_amount = 0 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 30 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_B.inst.cfg new file mode 100644 index 0000000000..a837a8f969 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 1 +material = emotiontech_petg +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 45 +speed_wall = =math.ceil(speed_print * 33/45) +speed_wall_0 = =math.ceil(speed_wall * 23/33) +speed_topbottom = =math.ceil(speed_print * 30/45) +speed_layer_0 = =math.ceil(speed_print * 23/45) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 70 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_C.inst.cfg new file mode 100644 index 0000000000..92cba1ea19 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 0 +material = emotiontech_petg +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 37/50) +speed_wall_0 = =math.ceil(speed_wall * 25/37) +speed_topbottom = =math.ceil(speed_print * 33/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 70 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 92 +retraction_extra_prime_amount = 0 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_D.inst.cfg new file mode 100644 index 0000000000..a1e04e4789 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PETG_D.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = D +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = d +weight = -1 +material = emotiontech_petg +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 55 +speed_wall = =math.ceil(speed_print * 40/55) +speed_wall_0 = =math.ceil(speed_wall * 27/40) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 27/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 70 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 45 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =default_material_print_temperature +5 +material_flow = 91 +retraction_extra_prime_amount = 0 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_B.inst.cfg new file mode 100644 index 0000000000..e70d84ddd8 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_B.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 1 +material = emotiontech_pla +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 37/50) +speed_wall_0 = =math.ceil(speed_wall * 30/37) +speed_topbottom = =math.ceil(speed_print * 33/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_C.inst.cfg new file mode 100644 index 0000000000..fe9d215acb --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_C.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 0 +material = emotiontech_pla +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 55 +speed_wall = =math.ceil(speed_print * 40/55) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 37/55) +speed_layer_0 = =math.ceil(speed_print * 27/55) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 8 +material_print_temperature_layer_0 = =default_material_print_temperature + 3 +material_flow = 92 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_D.inst.cfg new file mode 100644 index 0000000000..233ea10e27 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PLA_D.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = D +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = d +weight = -1 +material = emotiontech_pla +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.5 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 60 +speed_wall = =math.ceil(speed_print * 45/60) +speed_wall_0 = =math.ceil(speed_wall * 33/45) +speed_topbottom = =math.ceil(speed_print * 40/60) +speed_layer_0 = =math.ceil(speed_print * 30/60) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +material_flow = 91 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_B.inst.cfg new file mode 100644 index 0000000000..05ae1383eb --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_B.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 1 +material = emotiontech_pva-m +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.75 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 2.5 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_C.inst.cfg new file mode 100644 index 0000000000..7507968a69 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_C.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 0 +material = emotiontech_pva-m +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 3 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.75 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 2.5 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_D.inst.cfg new file mode 100644 index 0000000000..ea68f30f33 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-M_D.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = D +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = d +weight = -1 +material = emotiontech_pva-m +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.75 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 2.5 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_B.inst.cfg new file mode 100644 index 0000000000..915e0f3b83 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_B.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 1 +material = emotiontech_pva-oks +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.75 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 2.5 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_C.inst.cfg new file mode 100644 index 0000000000..b9c260eb2c --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_C.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 0 +material = emotiontech_pva-oks +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 3 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.75 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 2.5 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_D.inst.cfg new file mode 100644 index 0000000000..7e1237eb55 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-OKS_D.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = D +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = d +weight = -1 +material = emotiontech_pva-oks +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.75 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 2.5 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_B.inst.cfg new file mode 100644 index 0000000000..f5fed6dc2e --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_B.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 1 +material = emotiontech_pva-s +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.75 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 2.5 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_C.inst.cfg new file mode 100644 index 0000000000..033c0e03bd --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_C.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 0 +material = emotiontech_pva-s +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature + 3 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.75 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 2.5 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_D.inst.cfg new file mode 100644 index 0000000000..9e457f7d73 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_PVA-S_D.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = D +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = d +weight = -1 +material = emotiontech_pva-s +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 10 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.75 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 2.5 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_B.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_B.inst.cfg new file mode 100644 index 0000000000..8d152328ad --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_B.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = B +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 1 +material = emotiontech_tpu98a +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_0_wipe_dist = =machine_nozzle_size +speed_print = 35 +speed_wall = =math.ceil(speed_print * 35/35) +speed_wall_0 = =math.ceil(speed_wall * 30/35) +speed_topbottom = =math.ceil(speed_print * 25/35) +speed_support = =speed_wall_0 +speed_layer_0 = =math.ceil(speed_print * 20/35) +speed_slowdown_layers = 1 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 2 +material_print_temperature_layer_0 = =default_material_print_temperature - 2 +material_flow = 105 +retraction_extra_prime_amount = 0.2 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = False +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 2.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 0.7 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_C.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_C.inst.cfg new file mode 100644 index 0000000000..78483d0238 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_C.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 0 +material = emotiontech_tpu98a +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_0_wipe_dist = =machine_nozzle_size +speed_print = 40 +speed_wall = =math.ceil(speed_print * 40/40) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 27/40) +speed_support = =speed_wall_0 +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 1 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 103 +retraction_extra_prime_amount = 0.2 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = False +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 2.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 0.7 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_D.inst.cfg b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_D.inst.cfg new file mode 100644 index 0000000000..de5110ef46 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.6/s3d_std0.6_TPU98A_D.inst.cfg @@ -0,0 +1,47 @@ +[general] +version = 4 +name = D +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = d +weight = -1 +material = emotiontech_tpu98a +variant = Standard 0.6 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.55 +wall_0_wipe_dist = =machine_nozzle_size +speed_print = 45 +speed_wall = =math.ceil(speed_print * 45/45) +speed_wall_0 = =math.ceil(speed_wall * 33/45) +speed_topbottom = =math.ceil(speed_print * 30/45) +speed_layer_0 = =math.ceil(speed_print * 20/45) +speed_slowdown_layers = 1 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 7 +material_print_temperature_layer_0 = =default_material_print_temperature + 3 +material_flow = 101 +retraction_extra_prime_amount = 0.2 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = False +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 2.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 0.7 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_C.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_C.inst.cfg new file mode 100644 index 0000000000..bf649d61ef --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_C.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 1 +material = emotiontech_abs +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.7 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 40/50) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 6 * layer_height +cool_min_speed = 10 +support_angle = 55 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =2*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 2 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_D.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_D.inst.cfg new file mode 100644 index 0000000000..55d6d20323 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_D.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = D +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = d +weight = 0 +material = emotiontech_abs +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.7 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 40/50) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 6 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =2*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 2 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_E.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_E.inst.cfg new file mode 100644 index 0000000000..8c3215ebc1 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_ABS_E.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = E +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = e +weight = -1 +material = emotiontech_abs +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.7 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.6 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 40/50) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 35 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 6 * layer_height +cool_min_speed = 10 +support_angle = 45 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =default_material_print_temperature +5 +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =2*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 2 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_C.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_C.inst.cfg new file mode 100644 index 0000000000..4a12fffb1e --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_C.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 1 +material = emotiontech_petg +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.75 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.62 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.65 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.5625 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 40/50) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0 +retraction_min_travel = =2*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_D.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_D.inst.cfg new file mode 100644 index 0000000000..a5f01107f8 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_D.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = D +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = d +weight = 0 +material = emotiontech_petg +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.75 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.62 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.65 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.5625 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 40/50) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0 +retraction_min_travel = =2*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_E.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_E.inst.cfg new file mode 100644 index 0000000000..6042de9501 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PETG_E.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = E +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = e +weight = -1 +material = emotiontech_petg +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.75 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.62 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.65 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.5625 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 40/50) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 3 * layer_height +cool_min_speed = 10 +support_angle = 45 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =default_material_print_temperature +5 +material_flow = 93 +retraction_extra_prime_amount = 0 +retraction_min_travel = =2*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_C.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_C.inst.cfg new file mode 100644 index 0000000000..405bc3db13 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_C.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 1 +material = emotiontech_pla +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.75 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.62 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.65 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.5625 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 40/50) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =2*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_D.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_D.inst.cfg new file mode 100644 index 0000000000..b52bd3e5a1 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_D.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = D +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = d +weight = 0 +material = emotiontech_pla +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.75 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.62 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.65 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.5625 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 40/50) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +3 +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =2*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_E.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_E.inst.cfg new file mode 100644 index 0000000000..8b65fa78bd --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PLA_E.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = E +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = e +weight = -1 +material = emotiontech_pla +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.75 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.62 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.65 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.5625 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 50 +speed_wall = =math.ceil(speed_print * 40/50) +speed_wall_0 = =math.ceil(speed_wall * 30/40) +speed_topbottom = =math.ceil(speed_print * 35/50) +speed_layer_0 = =math.ceil(speed_print * 25/50) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 10 +support_angle = 45 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =default_material_print_temperature +5 +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =2*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PVA-OKS_C.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PVA-OKS_C.inst.cfg new file mode 100644 index 0000000000..5cf1c2c5a9 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PVA-OKS_C.inst.cfg @@ -0,0 +1,49 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 1 +material = emotiontech_pvaoks +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.7 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.8 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.8 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 25/30) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 60 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.75 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 2 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PVA-OKS_D.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PVA-OKS_D.inst.cfg new file mode 100644 index 0000000000..e514ce8425 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PVA-OKS_D.inst.cfg @@ -0,0 +1,49 @@ +[general] +version = 4 +name = D +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = d +weight = 0 +material = emotiontech_pvaoks +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.7 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.8 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.8 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 25/30) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.75 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 2 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PVA-OKS_E.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PVA-OKS_E.inst.cfg new file mode 100644 index 0000000000..883c733088 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_PVA-OKS_E.inst.cfg @@ -0,0 +1,49 @@ +[general] +version = 4 +name = E +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = e +weight = -1 +material = emotiontech_pvaoks +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.7 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.8 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.8 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 40 +speed_wall = =math.ceil(speed_print * 30/40) +speed_wall_0 = =math.ceil(speed_wall * 25/30) +speed_topbottom = =math.ceil(speed_print * 20/40) +speed_layer_0 = =math.ceil(speed_print * 20/40) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 45 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 93 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 5 +support_z_distance = =layer_height-layer_height +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 0.75 +support_xy_distance_overhang = =line_width*0.175/line_width +support_offset = 2 +support_pattern = grid +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_TPU_C.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_TPU_C.inst.cfg new file mode 100644 index 0000000000..b7ec8a65db --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_TPU_C.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = C +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 1 +material = emotiontech_tpu +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.5*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.8 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +wall_0_wipe_dist = =machine_nozzle_size +speed_print = 35 +speed_wall = =math.ceil(speed_print * 35/35) +speed_wall_0 = =math.ceil(speed_wall * 27/35) +speed_topbottom = =math.ceil(speed_print * 23/35) +speed_layer_0 = =math.ceil(speed_print * 20/35) +speed_slowdown_layers = 1 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 3 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 100 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =2*line_width +retraction_hop_only_when_collides = False +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 2.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 0.7 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_TPU_D.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_TPU_D.inst.cfg new file mode 100644 index 0000000000..fcea53fbe5 --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_TPU_D.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = D +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = d +weight = 0 +material = emotiontech_tpu +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.67*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.8 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +wall_0_wipe_dist = =machine_nozzle_size +speed_print = 35 +speed_wall = =math.ceil(speed_print * 35/35) +speed_wall_0 = =math.ceil(speed_wall * 27/35) +speed_topbottom = =math.ceil(speed_print * 23/35) +speed_layer_0 = =math.ceil(speed_print * 20/35) +speed_slowdown_layers = 1 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =default_material_print_temperature +material_flow = 100 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =2*line_width +retraction_hop_only_when_collides = False +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 2.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 0.7 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_TPU_E.inst.cfg b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_TPU_E.inst.cfg new file mode 100644 index 0000000000..61a455827c --- /dev/null +++ b/resources/quality/strateo3d/Standard_0.8/s3d_std0.8_TPU_E.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = E +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = e +weight = -1 +material = emotiontech_tpu +variant = Standard 0.8 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*0.8 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*0.6 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.7 +wall_0_wipe_dist = =machine_nozzle_size +speed_print = 35 +speed_wall = =math.ceil(speed_print * 35/35) +speed_wall_0 = =math.ceil(speed_wall * 27/35) +speed_topbottom = =math.ceil(speed_print * 23/35) +speed_layer_0 = =math.ceil(speed_print * 20/35) +speed_slowdown_layers = 1 +cool_fan_enabled = True +cool_fan_speed = 50 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 4 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 7 +material_print_temperature_layer_0 = =default_material_print_temperature +3 +material_flow = 100 +retraction_extra_prime_amount = 0.1 +retraction_min_travel = =2*line_width +retraction_hop_only_when_collides = False +skin_overlap = 5 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance +support_xy_distance = =line_width * 2.5 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 0.7 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/Standard_1.2/s3d_std1.2_PLA_H.inst.cfg b/resources/quality/strateo3d/Standard_1.2/s3d_std1.2_PLA_H.inst.cfg new file mode 100644 index 0000000000..7f29e29d88 --- /dev/null +++ b/resources/quality/strateo3d/Standard_1.2/s3d_std1.2_PLA_H.inst.cfg @@ -0,0 +1,48 @@ +[general] +version = 4 +name = H +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = h +weight = -1 +material = emotiontech_pla +variant = Standard 1.2 + +[values] +layer_height_0 = =round(0.75*machine_nozzle_size, 2) +line_width = =machine_nozzle_size/machine_nozzle_size*1.1 +wall_line_width_x = =machine_nozzle_size/machine_nozzle_size*1.0 +infill_line_width = =machine_nozzle_size/machine_nozzle_size*1.2 +support_line_width = =machine_nozzle_size/machine_nozzle_size*0.9 +wall_0_wipe_dist = =machine_nozzle_size/2 +speed_print = 35 +speed_wall = =math.ceil(speed_print * 27/35) +speed_wall_0 = =math.ceil(speed_print * 23/35) +speed_topbottom = =math.ceil(speed_print * 30/35) +speed_layer_0 = =math.ceil(speed_print * 25/35) +speed_slowdown_layers = 2 +cool_fan_enabled = True +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 20 +cool_min_layer_time = 11 +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_min_speed = 10 +support_angle = 50 +material_print_temperature = =default_material_print_temperature + 10 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +material_flow = 91 +retraction_extra_prime_amount = 0.5 +retraction_min_travel = =3*line_width +retraction_hop_only_when_collides = True +skin_overlap = 20 +support_z_distance = =layer_height*2 +support_bottom_distance = =support_z_distance*0.5 +support_xy_distance = =line_width * 1.7 +support_xy_distance_overhang = =wall_line_width_0 +support_offset = 1 +support_interface_density = 100 +prime_tower_enable = True \ No newline at end of file diff --git a/resources/quality/strateo3d/s3d_global_A.inst.cfg b/resources/quality/strateo3d/s3d_global_A.inst.cfg new file mode 100644 index 0000000000..69a9bedd9e --- /dev/null +++ b/resources/quality/strateo3d/s3d_global_A.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Extra Fine Quality +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = a +weight = 0 +global_quality = True + +[values] +layer_height = 0.1 +top_bottom_thickness = =10*layer_height \ No newline at end of file diff --git a/resources/quality/strateo3d/s3d_global_B.inst.cfg b/resources/quality/strateo3d/s3d_global_B.inst.cfg new file mode 100644 index 0000000000..dbfd0c46f6 --- /dev/null +++ b/resources/quality/strateo3d/s3d_global_B.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Fine Quality +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = b +weight = 0 +global_quality = True + +[values] +layer_height = 0.2 +top_bottom_thickness = =7*layer_height \ No newline at end of file diff --git a/resources/quality/strateo3d/s3d_global_C.inst.cfg b/resources/quality/strateo3d/s3d_global_C.inst.cfg new file mode 100644 index 0000000000..e167da5fdb --- /dev/null +++ b/resources/quality/strateo3d/s3d_global_C.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = High Quality +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = c +weight = 0 +global_quality = True + +[values] +layer_height = 0.3 +top_bottom_thickness = =5*layer_height \ No newline at end of file diff --git a/resources/quality/strateo3d/s3d_global_D.inst.cfg b/resources/quality/strateo3d/s3d_global_D.inst.cfg new file mode 100644 index 0000000000..b1a00232ed --- /dev/null +++ b/resources/quality/strateo3d/s3d_global_D.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Medium Quality +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = d +weight = 0 +global_quality = True + +[values] +layer_height = 0.4 +top_bottom_thickness = =5*layer_height \ No newline at end of file diff --git a/resources/quality/strateo3d/s3d_global_E.inst.cfg b/resources/quality/strateo3d/s3d_global_E.inst.cfg new file mode 100644 index 0000000000..ee2e45b511 --- /dev/null +++ b/resources/quality/strateo3d/s3d_global_E.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Low Quality +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = e +weight = 0 +global_quality = True + +[values] +layer_height = 0.5 +top_bottom_thickness = =4*layer_height \ No newline at end of file diff --git a/resources/quality/strateo3d/s3d_global_F.inst.cfg b/resources/quality/strateo3d/s3d_global_F.inst.cfg new file mode 100644 index 0000000000..bc1bf264f3 --- /dev/null +++ b/resources/quality/strateo3d/s3d_global_F.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Coarse Quality +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = f +weight = 0 +global_quality = True + +[values] +layer_height = 0.6 +top_bottom_thickness = =4*layer_height diff --git a/resources/quality/strateo3d/s3d_global_G.inst.cfg b/resources/quality/strateo3d/s3d_global_G.inst.cfg new file mode 100644 index 0000000000..634cebecf6 --- /dev/null +++ b/resources/quality/strateo3d/s3d_global_G.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Extra Coarse Quality +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = g +weight = 0 +global_quality = True + +[values] +layer_height = 0.7 +top_bottom_thickness = =3*layer_height diff --git a/resources/quality/strateo3d/s3d_global_H.inst.cfg b/resources/quality/strateo3d/s3d_global_H.inst.cfg new file mode 100644 index 0000000000..ea1a751190 --- /dev/null +++ b/resources/quality/strateo3d/s3d_global_H.inst.cfg @@ -0,0 +1,15 @@ +[general] +version = 4 +name = Ultra Coarse Quality +definition = strateo3d + +[metadata] +setting_version = 10 +type = quality +quality_type = h +weight = 0 +global_quality = True + +[values] +layer_height = 0.8 +top_bottom_thickness = =3*layer_height diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg index 250c3bd1d5..58a11be8b5 100644 --- a/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg +++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg @@ -4,10 +4,11 @@ name = Draft definition = tevo_blackwidow [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 +global_quality = True [values] brim_width = 4.0 diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg index 0dff2b94ca..a502f38e24 100644 --- a/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg +++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg @@ -4,10 +4,11 @@ name = High definition = tevo_blackwidow [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 +global_quality = True [values] brim_width = 4.0 diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg index e5b9290cad..51a497f47b 100644 --- a/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg +++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg @@ -4,10 +4,11 @@ name = Normal definition = tevo_blackwidow [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 +global_quality = True [values] brim_width = 4.0 diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.2_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.2_abs_high.inst.cfg index 2fa65465ff..2e2a3cce5a 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.2_abs_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.2_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.3_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.3_abs_high.inst.cfg index 9297c03ae6..adbb8a8ff4 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.3_abs_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.3_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.4_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.4_abs_high.inst.cfg index f3a6a263a8..9bf480824e 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.4_abs_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.4_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.4_abs_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.4_abs_normal.inst.cfg index 5bb1cde436..1aad72859a 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.4_abs_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.4_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_draft.inst.cfg index d83e4e6b4c..7329cf25ad 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_draft.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_draft.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_high.inst.cfg index b3a9fc36c6..fd5ea15ada 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_normal.inst.cfg index 6432b76d72..eda120d767 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.5_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_coarse.inst.cfg index 0c5a2c8a5d..d14f345eba 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_coarse.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_coarse.inst.cfg @@ -4,10 +4,10 @@ name = Coarse definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse -weight = -3 +weight = -2 material = generic_abs variant = 0.6mm diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_high.inst.cfg index bbc11d52a0..869328e6f1 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_normal.inst.cfg index 7ac4620015..ee52b976fd 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_extra_coarse.inst.cfg similarity index 82% rename from resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_coarse.inst.cfg rename to resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_extra_coarse.inst.cfg index 3653ff729a..ac4816f557 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_coarse.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_extra_coarse.inst.cfg @@ -4,10 +4,10 @@ name = Coarse definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse -weight = -3 +weight = -2 material = generic_abs variant = 0.8mm diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_high.inst.cfg index 7b29215d51..a4f1774544 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_normal.inst.cfg index 439445ef85..1469bd4ebe 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_coarse.inst.cfg deleted file mode 100644 index 5b1d5ce3e6..0000000000 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_coarse.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 4 -name = Coarse -definition = tizyx_evy - -[metadata] -setting_version = 7 -type = quality -quality_type = coarse -weight = -3 -material = generic_abs -variant = 1.0mm - -[values] - diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_draft.inst.cfg deleted file mode 100644 index e79205dc3f..0000000000 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_draft.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 4 -name = Coarse -definition = tizyx_evy - -[metadata] -setting_version = 7 -type = quality -quality_type = draft -weight = -2 -material = generic_abs -variant = 1.0mm - -[values] - diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_extra_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_extra_coarse.inst.cfg deleted file mode 100644 index ba0a3cd096..0000000000 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_extra_coarse.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 4 -name = Extra Coarse -definition = tizyx_evy - -[metadata] -setting_version = 7 -type = quality -quality_type = extra coarse -weight = -4 -material = generic_abs -variant = 1.0mm - -[values] - diff --git a/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.2_flex_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.2_flex_high.inst.cfg new file mode 100644 index 0000000000..1d866e53d9 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.2_flex_high.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = tizyx_flex +variant = 0.2mm + +[values] +speed_infill = 25 +speed_layer_0 = 15 +speed_print = 30 +speed_topbottom = 25 +speed_wall_0 = 20 +speed_wall_x = 20 diff --git a/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.3_flex_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.3_flex_high.inst.cfg new file mode 100644 index 0000000000..95f8d69f97 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.3_flex_high.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = tizyx_flex +variant = 0.3mm + +[values] +speed_infill = 25 +speed_layer_0 = 15 +speed_print = 30 +speed_topbottom = 25 +speed_wall_0 = 20 +speed_wall_x = 20 diff --git a/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.4_flex_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.4_flex_high.inst.cfg new file mode 100644 index 0000000000..7b8e48c20f --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.4_flex_high.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = tizyx_flex +variant = 0.4mm + +[values] +speed_infill = 25 +speed_layer_0 = 15 +speed_print = 30 +speed_topbottom = 25 +speed_wall_0 = 20 +speed_wall_x = 20 diff --git a/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.4_flex_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.4_flex_normal.inst.cfg new file mode 100644 index 0000000000..923f3c6bc5 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.4_flex_normal.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = tizyx_flex +variant = 0.4mm + +[values] +speed_infill = 25 +speed_layer_0 = 15 +speed_print = 30 +speed_topbottom = 25 +speed_wall_0 = 20 +speed_wall_x = 20 diff --git a/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.5_flex_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.5_flex_draft.inst.cfg new file mode 100644 index 0000000000..85823d9276 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.5_flex_draft.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = Draft +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = tizyx_flex +variant = 0.5mm + +[values] +speed_infill = 25 +speed_layer_0 = 15 +speed_print = 30 +speed_topbottom = 25 +speed_wall_0 = 20 +speed_wall_x = 20 + diff --git a/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.5_flex_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.5_flex_high.inst.cfg new file mode 100644 index 0000000000..8fa9f08d41 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.5_flex_high.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = tizyx_flex +variant = 0.5mm + +[values] +speed_infill = 25 +speed_layer_0 = 15 +speed_print = 30 +speed_topbottom = 25 +speed_wall_0 = 20 +speed_wall_x = 20 diff --git a/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.5_flex_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.5_flex_normal.inst.cfg new file mode 100644 index 0000000000..778be27b1c --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.5_flex_normal.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = tizyx_flex +variant = 0.5mm + +[values] +speed_infill = 25 +speed_layer_0 = 15 +speed_print = 30 +speed_topbottom = 25 +speed_wall_0 = 20 +speed_wall_x = 20 diff --git a/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.6_flex_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.6_flex_coarse.inst.cfg new file mode 100644 index 0000000000..8e964d532b --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.6_flex_coarse.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = Draft +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = coarse +weight = -2 +material = tizyx_flex +variant = 0.6mm + +[values] +speed_infill = 25 +speed_layer_0 = 15 +speed_print = 30 +speed_topbottom = 25 +speed_wall_0 = 20 +speed_wall_x = 20 diff --git a/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.6_flex_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.6_flex_high.inst.cfg new file mode 100644 index 0000000000..fa4a7ce2fe --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.6_flex_high.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = tizyx_flex +variant = 0.6mm + +[values] +speed_infill = 25 +speed_layer_0 = 15 +speed_print = 30 +speed_topbottom = 25 +speed_wall_0 = 20 +speed_wall_x = 20 + diff --git a/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.6_flex_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.6_flex_normal.inst.cfg new file mode 100644 index 0000000000..a893ddc6d0 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.6_flex_normal.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = tizyx_flex +variant = 0.6mm + +[values] +speed_infill = 25 +speed_layer_0 = 15 +speed_print = 30 +speed_topbottom = 25 +speed_wall_0 = 20 +speed_wall_x = 20 + diff --git a/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.8_flex_extra_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.8_flex_extra_coarse.inst.cfg new file mode 100644 index 0000000000..e276ddfd80 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.8_flex_extra_coarse.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = Draft +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = extra coarse +weight = -2 +material = tizyx_flex +variant = 0.8mm + +[values] +speed_infill = 25 +speed_layer_0 = 15 +speed_print = 30 +speed_topbottom = 25 +speed_wall_0 = 20 +speed_wall_x = 20 + diff --git a/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.8_flex_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.8_flex_high.inst.cfg new file mode 100644 index 0000000000..2a1fb70852 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.8_flex_high.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = tizyx_flex +variant = 0.8mm + +[values] +speed_infill = 25 +speed_layer_0 = 15 +speed_print = 30 +speed_topbottom = 25 +speed_wall_0 = 20 +speed_wall_x = 20 diff --git a/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.8_flex_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.8_flex_normal.inst.cfg new file mode 100644 index 0000000000..6d2f668fef --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/flex/tizyx_evy_0.8_flex_normal.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = tizyx_flex +variant = 0.8mm + +[values] +speed_infill = 25 +speed_layer_0 = 15 +speed_print = 30 +speed_topbottom = 25 +speed_wall_0 = 20 +speed_wall_x = 20 diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.2_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.2_petg_high.inst.cfg index 5ccbfc8ac3..0e6d0891f5 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.2_petg_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.2_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.3_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.3_petg_high.inst.cfg index 3f8e4ee63b..80414f8e08 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.3_petg_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.3_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.4_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.4_petg_high.inst.cfg index 7514b8828b..a9bdaec137 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.4_petg_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.4_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.4_petg_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.4_petg_normal.inst.cfg index cbc8cf34fa..af92cfbc1e 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.4_petg_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.4_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_draft.inst.cfg index 31c17f31f3..2da142083b 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_draft.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_draft.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_high.inst.cfg index e5d69c80aa..6c427a7462 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_normal.inst.cfg index 828b2a7b83..7fac1c20df 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.5_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_coarse.inst.cfg index 1bdd2da466..d596e0be91 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_coarse.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_coarse.inst.cfg @@ -4,10 +4,10 @@ name = Coarse definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse -weight = -3 +weight = -2 material = generic_petg variant = 0.6mm diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_draft.inst.cfg deleted file mode 100644 index bf1ecff90b..0000000000 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_draft.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 4 -name = Coarse -definition = tizyx_evy - -[metadata] -setting_version = 7 -type = quality -quality_type = draft -weight = -2 -material = generic_petg -variant = 0.6mm - -[values] - diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_high.inst.cfg index 258f3a1b40..9759f25c94 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_normal.inst.cfg index d6d0013fe7..b7fad60c6e 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.6_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_extra_coarse.inst.cfg similarity index 75% rename from resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_draft.inst.cfg rename to resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_extra_coarse.inst.cfg index 9446747467..f5ef05d545 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_draft.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_extra_coarse.inst.cfg @@ -4,9 +4,9 @@ name = Coarse definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality -quality_type = draft +quality_type = extra coarse weight = -2 material = generic_petg variant = 0.8mm diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_high.inst.cfg index 9cc1e992e1..46ecadc9fd 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_normal.inst.cfg index 87ffb204a0..ba20657775 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_coarse.inst.cfg deleted file mode 100644 index 1832dbf90d..0000000000 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_coarse.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 4 -name = Coarse -definition = tizyx_evy - -[metadata] -setting_version = 7 -type = quality -quality_type = coarse -weight = -3 -material = generic_petg -variant = 1.0mm - -[values] - diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_draft.inst.cfg deleted file mode 100644 index 5c331d5d5f..0000000000 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_draft.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 4 -name = Coarse -definition = tizyx_evy - -[metadata] -setting_version = 7 -type = quality -quality_type = draft -weight = -2 -material = generic_petg -variant = 1.0mm - -[values] - diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_extra_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_extra_coarse.inst.cfg deleted file mode 100644 index f438db32af..0000000000 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_extra_coarse.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 4 -name = Extra Coarse -definition = tizyx_evy - -[metadata] -setting_version = 7 -type = quality -quality_type = extra coarse -weight = -4 -material = generic_petg -variant = 1.0mm - -[values] - diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.2_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.2_pla_high.inst.cfg index d277521cff..18517fda8f 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.2_pla_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.2_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.3_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.3_pla_high.inst.cfg index cf47f42844..1450ee19a5 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.3_pla_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.3_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.4_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.4_pla_high.inst.cfg index f7871f6d65..3ab9e3d09e 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.4_pla_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.4_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.4_pla_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.4_pla_normal.inst.cfg index 4610ee23b4..a3fb473056 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.4_pla_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.4_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_draft.inst.cfg index ec35a3757c..384f8ce4c9 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_draft.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_high.inst.cfg index 58de6bb4a0..6bef3afd95 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_normal.inst.cfg index 3673a5ee3b..1e5760e696 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.5_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_coarse.inst.cfg similarity index 77% rename from resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_draft.inst.cfg rename to resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_coarse.inst.cfg index 9765868619..c1fcb2df82 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_draft.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_coarse.inst.cfg @@ -4,9 +4,9 @@ name = Draft definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality -quality_type = draft +quality_type = coarse weight = -2 material = generic_pla variant = 0.6mm diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_high.inst.cfg index 53887ab16e..81323128a0 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_normal.inst.cfg index f9beaadd51..95dba27ba6 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.6_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_coarse.inst.cfg deleted file mode 100644 index 4317e7796e..0000000000 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_coarse.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 4 -name = Coarse -definition = tizyx_evy - -[metadata] -setting_version = 7 -type = quality -quality_type = coarse -weight = -3 -material = generic_pla -variant = 0.8mm - -[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_extra_coarse.inst.cfg similarity index 74% rename from resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_draft.inst.cfg rename to resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_extra_coarse.inst.cfg index 2054c48f17..676d7fccf1 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_draft.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_extra_coarse.inst.cfg @@ -4,11 +4,12 @@ name = Draft definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality -quality_type = draft +quality_type = extra coarse weight = -2 material = generic_pla variant = 0.8mm [values] + diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_high.inst.cfg index 6e2dfecbef..31b70a215a 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_normal.inst.cfg index 05c8ecaa53..869a10fc84 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_0.8_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_coarse.inst.cfg deleted file mode 100644 index 972c16c777..0000000000 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_coarse.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 4 -name = Coarse -definition = tizyx_evy - -[metadata] -setting_version = 7 -type = quality -quality_type = coarse -weight = -3 -material = generic_pla -variant = 1.0mm - -[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_extra_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_extra_coarse.inst.cfg deleted file mode 100644 index 2e7e047ed5..0000000000 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_extra_coarse.inst.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[general] -version = 4 -name = Extra Coarse -definition = tizyx_evy - -[metadata] -setting_version = 7 -type = quality -quality_type = extra coarse -weight = -4 -material = generic_pla -variant = 1.0mm - -[values] diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.2_pla_bois_high.inst.cfg similarity index 66% rename from resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_high.inst.cfg rename to resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.2_pla_bois_high.inst.cfg index 250b3be05d..2b6c5f2802 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.2_pla_bois_high.inst.cfg @@ -4,12 +4,11 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 -material = generic_petg -variant = 1.0mm +material = tizyx_pla_bois +variant = 0.2mm [values] - diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.3_pla_bois_high.inst.cfg similarity index 66% rename from resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_high.inst.cfg rename to resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.3_pla_bois_high.inst.cfg index 18ea58c1a8..f595418472 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.3_pla_bois_high.inst.cfg @@ -4,11 +4,11 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 -material = generic_pla -variant = 1.0mm +material = tizyx_pla_bois +variant = 0.3mm [values] diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.4_pla_bois_high.inst.cfg similarity index 66% rename from resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_high.inst.cfg rename to resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.4_pla_bois_high.inst.cfg index 001e03a182..6627f7ad5d 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.4_pla_bois_high.inst.cfg @@ -4,12 +4,11 @@ name = High definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 -material = generic_abs -variant = 1.0mm +material = tizyx_pla_bois +variant = 0.4mm [values] - diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.4_pla_bois_normal.inst.cfg similarity index 67% rename from resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_normal.inst.cfg rename to resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.4_pla_bois_normal.inst.cfg index b1d8837cc6..d0c434f952 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_1.0_abs_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.4_pla_bois_normal.inst.cfg @@ -4,12 +4,11 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 -material = generic_abs -variant = 1.0mm +material = tizyx_pla_bois +variant = 0.4mm [values] - diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.5_pla_bois_draft.inst.cfg similarity index 66% rename from resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_draft.inst.cfg rename to resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.5_pla_bois_draft.inst.cfg index 52efa5b8bb..f18e030674 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_draft.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.5_pla_bois_draft.inst.cfg @@ -4,11 +4,12 @@ name = Draft definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 -material = generic_pla -variant = 1.0mm +material = tizyx_pla_bois +variant = 0.5mm [values] + diff --git a/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.5_pla_bois_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.5_pla_bois_high.inst.cfg new file mode 100644 index 0000000000..a61c7b7265 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.5_pla_bois_high.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = tizyx_pla_bois +variant = 0.5mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.5_pla_bois_normal.inst.cfg similarity index 67% rename from resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_normal.inst.cfg rename to resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.5_pla_bois_normal.inst.cfg index 8389757165..d7e6e1239b 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_1.0_petg_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.5_pla_bois_normal.inst.cfg @@ -4,12 +4,11 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 -material = generic_petg -variant = 1.0mm +material = tizyx_pla_bois +variant = 0.5mm [values] - diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.6_pla_bois_coarse.inst.cfg similarity index 57% rename from resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_draft.inst.cfg rename to resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.6_pla_bois_coarse.inst.cfg index 361aba7d6a..0da222d512 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.6_abs_draft.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.6_pla_bois_coarse.inst.cfg @@ -1,15 +1,14 @@ [general] version = 4 -name = Coarse +name = Draft definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality -quality_type = draft +quality_type = coarse weight = -2 -material = generic_abs +material = tizyx_pla_bois variant = 0.6mm [values] - diff --git a/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.6_pla_bois_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.6_pla_bois_high.inst.cfg new file mode 100644 index 0000000000..9c66a0ad10 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.6_pla_bois_high.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = tizyx_pla_bois +variant = 0.6mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.6_pla_bois_normal.inst.cfg similarity index 67% rename from resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_normal.inst.cfg rename to resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.6_pla_bois_normal.inst.cfg index b814c59b0f..2309c52d5e 100644 --- a/resources/quality/tizyx/tizyx_evy/pla/tizyx_evy_1.0_pla_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.6_pla_bois_normal.inst.cfg @@ -4,11 +4,11 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 -material = generic_pla -variant = 1.0mm +material = tizyx_pla_bois +variant = 0.6mm [values] diff --git a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_draft.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.8_pla_bois_extra_coarse.inst.cfg similarity index 55% rename from resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_draft.inst.cfg rename to resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.8_pla_bois_extra_coarse.inst.cfg index 4c9de95353..540b1e626c 100644 --- a/resources/quality/tizyx/tizyx_evy/abs/tizyx_evy_0.8_abs_draft.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.8_pla_bois_extra_coarse.inst.cfg @@ -1,14 +1,14 @@ [general] version = 4 -name = Coarse +name = Draft definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality -quality_type = draft +quality_type = extra coarse weight = -2 -material = generic_abs +material = tizyx_pla_bois variant = 0.8mm [values] diff --git a/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.8_pla_bois_high.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.8_pla_bois_high.inst.cfg new file mode 100644 index 0000000000..2cfba4db4a --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.8_pla_bois_high.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = High +definition = tizyx_evy + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = tizyx_pla_bois +variant = 0.8mm + +[values] diff --git a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_coarse.inst.cfg b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.8_pla_bois_normal.inst.cfg similarity index 51% rename from resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_coarse.inst.cfg rename to resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.8_pla_bois_normal.inst.cfg index d1200760c0..3b9492443d 100644 --- a/resources/quality/tizyx/tizyx_evy/petg/tizyx_evy_0.8_petg_coarse.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/pla_bois/tizyx_evy_0.8_pla_bois_normal.inst.cfg @@ -1,15 +1,14 @@ [general] version = 4 -name = Coarse +name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality -quality_type = coarse -weight = -3 -material = generic_petg +quality_type = normal +weight = 0 +material = tizyx_pla_bois variant = 0.8mm [values] - diff --git a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Coarse_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Coarse_Quality.inst.cfg index 2cca0b9225..aa9ffda827 100644 --- a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Coarse_Quality.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Coarse_Quality.inst.cfg @@ -1,15 +1,45 @@ [general] version = 4 -name = Coarse +name = Draft definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse -weight = -3 +weight = -2 global_quality = True [values] -layer_height = 0.4 -layer_height_0 = =layer_height \ No newline at end of file +layer_height = 0.3 +layer_height_0 = =layer_height +initial_layer_line_width_factor = 90 +infill_overlap = 15 +material_flow_layer_0 = 93 +material_flow = 99 +retraction_amount = 5 +retraction_speed = 60 +speed_wall_0 = 45 +speed_wall_x = 50 +speed_topbottom = 45 +support_enable= True +support_angle = 70 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 2 +fill_outline_gaps = True +infill_sparse_density = 15 +material_diameter = 1.75 +retraction_min_travel = 2 +speed_print = 60 +cool_fan_speed_0 = 10 +cool_min_layer_time = 12 +layer_start_x = 250 +layer_start_y = 250 +coasting_enable = False +wall_line_count = 2 +material_print_temperature = =default_material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +z_seam_corner = z_seam_corner_none +optimize_wall_printing_order = True \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Draft_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Draft_Quality.inst.cfg index d88a6c95a3..94ea7fd6fd 100644 --- a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Draft_Quality.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 @@ -12,4 +12,34 @@ global_quality = True [values] layer_height = 0.25 -layer_height_0 = =layer_height \ No newline at end of file +layer_height_0 = =layer_height +initial_layer_line_width_factor = 90 +infill_overlap = 15 +material_flow_layer_0 = 93 +material_flow = 99 +retraction_amount = 5 +retraction_speed = 60 +speed_wall_0 = 45 +speed_wall_x = 50 +speed_topbottom = 45 +support_enable= True +support_angle = 70 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 2 +fill_outline_gaps = True +infill_sparse_density = 15 +material_diameter = 1.75 +retraction_min_travel = 2 +speed_print = 60 +cool_fan_speed_0 = 10 +cool_min_layer_time = 12 +layer_start_x = 250 +layer_start_y = 250 +coasting_enable = False +wall_line_count = 2 +material_print_temperature = =default_material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +z_seam_corner = z_seam_corner_none +optimize_wall_printing_order = True \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Extra_Coarse_Quality.inst.cfg index 8e34a42f62..8019801d70 100644 --- a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Extra_Coarse_Quality.inst.cfg @@ -1,15 +1,45 @@ [general] version = 4 -name = Extra Coarse +name = Draft definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extra coarse -weight = -4 +weight = -2 global_quality = True [values] -layer_height = 0.5 -layer_height_0 = =layer_height \ No newline at end of file +layer_height = 0.4 +layer_height_0 = =layer_height +initial_layer_line_width_factor = 90 +infill_overlap = 15 +material_flow_layer_0 = 93 +material_flow = 99 +retraction_amount = 5 +retraction_speed = 60 +speed_wall_0 = 45 +speed_wall_x = 50 +speed_topbottom = 45 +support_enable= True +support_angle = 70 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 2 +fill_outline_gaps = True +infill_sparse_density = 15 +material_diameter = 1.75 +retraction_min_travel = 2 +speed_print = 60 +cool_fan_speed_0 = 10 +cool_min_layer_time = 12 +layer_start_x = 250 +layer_start_y = 250 +coasting_enable = False +wall_line_count = 2 +material_print_temperature = =default_material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +z_seam_corner = z_seam_corner_none +optimize_wall_printing_order = True \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_High_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_High_Quality.inst.cfg index 160af128ce..0549e622a7 100644 --- a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_High_Quality.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_High_Quality.inst.cfg @@ -12,4 +12,34 @@ global_quality = True [values] layer_height = 0.1 -layer_height_0 = 0.1 \ No newline at end of file +layer_height_0 = 0.1 +initial_layer_line_width_factor = 90 +infill_overlap = 15 +material_flow_layer_0 = 93 +material_flow = 99 +retraction_amount = 5 +retraction_speed = 60 +speed_wall_0 = 45 +speed_wall_x = 50 +speed_topbottom = 45 +support_enable= True +support_angle = 70 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 2 +fill_outline_gaps = True +infill_sparse_density = 15 +material_diameter = 1.75 +retraction_min_travel = 2 +speed_print = 60 +cool_fan_speed_0 = 10 +cool_min_layer_time = 12 +layer_start_x = 250 +layer_start_y = 250 +coasting_enable = False +wall_line_count = 2 +material_print_temperature = =default_material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +z_seam_corner = z_seam_corner_none +optimize_wall_printing_order = True \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Normal_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Normal_Quality.inst.cfg index dd4a262fbf..df9ee716e2 100644 --- a/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Normal_Quality.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy/tizyx_evy_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 @@ -12,4 +12,34 @@ global_quality = True [values] layer_height = 0.2 -layer_height_0 = 0.25 \ No newline at end of file +layer_height_0 = 0.25 +initial_layer_line_width_factor = 90 +infill_overlap = 15 +material_flow_layer_0 = 93 +material_flow = 99 +retraction_amount = 5 +retraction_speed = 60 +speed_wall_0 = 45 +speed_wall_x = 50 +speed_topbottom = 45 +support_enable= True +support_angle = 70 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 2 +fill_outline_gaps = True +infill_sparse_density = 15 +material_diameter = 1.75 +retraction_min_travel = 2 +speed_print = 60 +cool_fan_speed_0 = 10 +cool_min_layer_time = 12 +layer_start_x = 250 +layer_start_y = 250 +coasting_enable = False +wall_line_count = 2 +material_print_temperature = =default_material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +z_seam_corner = z_seam_corner_none +optimize_wall_printing_order = True \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_classic_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_classic_abs_high.inst.cfg index 0f1f26af8b..96ee57154e 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_classic_abs_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_classic_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 @@ -25,18 +25,16 @@ prime_tower_flow = 100 prime_tower_min_volume = 80 prime_tower_wipe_enabled = False retract_at_layer_change = True -retraction_amount = 2.5 retraction_enable = True retraction_hop_enabled = True retraction_hop_only_when_collides = False retraction_min_travel = 2 -retraction_speed = 30 skin_angles = [] skirt_line_count = 2 speed_print = 60 speed_topbottom = 50 speed_wall_0 = 40 -switch_extruder_retraction_amount = 0 -switch_extruder_retraction_speeds = 40 top_layers = 4 -wall_line_count = 2 \ No newline at end of file +wall_line_count = 2 +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_classic_abs_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_classic_abs_normal.inst.cfg index 8c124c55dd..bf21301a3a 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_classic_abs_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_classic_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 @@ -25,18 +25,16 @@ prime_tower_flow = 100 prime_tower_min_volume = 80 prime_tower_wipe_enabled = False retract_at_layer_change = True -retraction_amount = 2.5 retraction_enable = True retraction_hop_enabled = True retraction_hop_only_when_collides = False retraction_min_travel = 2 -retraction_speed = 30 skin_angles = [] skirt_line_count = 2 speed_print = 60 speed_topbottom = 50 speed_wall_0 = 40 -switch_extruder_retraction_amount = 0 -switch_extruder_retraction_speeds = 40 top_layers = 4 -wall_line_count = 2 \ No newline at end of file +wall_line_count = 2 +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_direct_drive_abs_high.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_direct_drive_abs_high.inst.cfg index 937d35e1c3..22a868aa35 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_direct_drive_abs_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_direct_drive_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 @@ -21,12 +21,10 @@ prime_tower_flow = 110 prime_tower_min_volume = 50 prime_tower_wipe_enabled = True retract_at_layer_change = True -retraction_amount = 2.5 retraction_enable = True retraction_extra_prime_amount = 0 retraction_hop_enabled = True retraction_hop_only_when_collides = False -retraction_speed = 30 skirt_brim_minimal_length = 100 -switch_extruder_retraction_amount = 0 -switch_extruder_retraction_speeds = 40 \ No newline at end of file +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 diff --git a/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_direct_drive_abs_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_direct_drive_abs_normal.inst.cfg index 1876e4188f..379630d69b 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_direct_drive_abs_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/abs/tizyx_evy_dual_direct_drive_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 @@ -21,12 +21,10 @@ prime_tower_flow = 110 prime_tower_min_volume = 50 prime_tower_wipe_enabled = True retract_at_layer_change = True -retraction_amount = 2.5 retraction_enable = True retraction_extra_prime_amount = 0 retraction_hop_enabled = True retraction_hop_only_when_collides = False -retraction_speed = 30 skirt_brim_minimal_length = 100 -switch_extruder_retraction_amount = 0 -switch_extruder_retraction_speeds = 40 \ No newline at end of file +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/flex/tizyx_evy_dual_classic_flex_flex.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/flex/tizyx_evy_dual_classic_flex_flex.inst.cfg new file mode 100644 index 0000000000..89b0b8430c --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/flex/tizyx_evy_dual_classic_flex_flex.inst.cfg @@ -0,0 +1,40 @@ +[general] +version = 4 +name = Flex and PLA +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = tizyx_flex +variant = Classic Extruder + +[values] +cool_fan_speed_0 = 100 +cool_min_layer_time = 10 +default_material_print_temperature = 210 +fill_outline_gaps = True +infill_angles = [] +infill_sparse_density = 15 +material_final_print_temperature = 210 +material_initial_print_temperature = 210 +material_standby_temperature = 210 +prime_tower_flow = 100 +prime_tower_min_volume = 80 +prime_tower_wipe_enabled = False +retract_at_layer_change = True +retraction_enable = True +retraction_hop_enabled = True +retraction_hop_only_when_collides = False +retraction_min_travel = 2 +skin_angles = [] +skirt_line_count = 2 +speed_print = 60 +speed_topbottom = 50 +speed_wall_0 = 40 +top_layers = 4 +wall_line_count = 2 +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/flex/tizyx_evy_dual_classic_flex_flex_only.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/flex/tizyx_evy_dual_classic_flex_flex_only.inst.cfg new file mode 100644 index 0000000000..f692c83267 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/flex/tizyx_evy_dual_classic_flex_flex_only.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Flex Only +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = coarse +weight = -3 +material = tizyx_flex +variant = Classic Extruder + +[values] +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/flex/tizyx_evy_dual_direct_drive_flex_flex.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/flex/tizyx_evy_dual_direct_drive_flex_flex.inst.cfg new file mode 100644 index 0000000000..fc6fd386d1 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/flex/tizyx_evy_dual_direct_drive_flex_flex.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = Flex and PLA +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = tizyx_flex +variant = Direct Drive + +[values] +default_material_print_temperature = 210 +infill_angles = [] +material_final_print_temperature = 210 +material_initial_print_temperature = 210 +material_standby_temperature = 210 +prime_tower_flow = 110 +prime_tower_min_volume = 50 +prime_tower_wipe_enabled = True +retract_at_layer_change = True +retraction_enable = True +retraction_extra_prime_amount = 0 +retraction_hop_enabled = True +retraction_hop_only_when_collides = False +speed_print = 30 +skirt_brim_minimal_length = 100 +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/flex/tizyx_evy_dual_direct_drive_flex_flex_only.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/flex/tizyx_evy_dual_direct_drive_flex_flex_only.inst.cfg new file mode 100644 index 0000000000..480c98afd2 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/flex/tizyx_evy_dual_direct_drive_flex_flex_only.inst.cfg @@ -0,0 +1,16 @@ +[general] +version = 4 +name = Flex Only +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = coarse +weight = -3 +material = tizyx_flex +variant = Direct Drive + +[values] +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 diff --git a/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_classic_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_classic_petg_high.inst.cfg index 7f15b3428e..573a474625 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_classic_petg_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_classic_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 @@ -25,18 +25,16 @@ prime_tower_flow = 100 prime_tower_min_volume = 80 prime_tower_wipe_enabled = False retract_at_layer_change = True -retraction_amount = 2.5 retraction_enable = True retraction_hop_enabled = True retraction_hop_only_when_collides = False retraction_min_travel = 2 -retraction_speed = 30 skin_angles = [] skirt_line_count = 2 speed_print = 60 speed_topbottom = 50 speed_wall_0 = 40 -switch_extruder_retraction_amount = 0 -switch_extruder_retraction_speeds = 40 top_layers = 4 -wall_line_count = 2 \ No newline at end of file +wall_line_count = 2 +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_classic_petg_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_classic_petg_normal.inst.cfg index 8d500dbb49..6781558772 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_classic_petg_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_classic_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 @@ -25,18 +25,16 @@ prime_tower_flow = 100 prime_tower_min_volume = 80 prime_tower_wipe_enabled = False retract_at_layer_change = True -retraction_amount = 2.5 retraction_enable = True retraction_hop_enabled = True retraction_hop_only_when_collides = False retraction_min_travel = 2 -retraction_speed = 30 skin_angles = [] skirt_line_count = 2 speed_print = 60 speed_topbottom = 50 speed_wall_0 = 40 -switch_extruder_retraction_amount = 0 -switch_extruder_retraction_speeds = 40 top_layers = 4 -wall_line_count = 2 \ No newline at end of file +wall_line_count = 2 +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_direct_drive_petg_high.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_direct_drive_petg_high.inst.cfg index 6ca3a99f5b..3876de89db 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_direct_drive_petg_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_direct_drive_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 @@ -21,12 +21,10 @@ prime_tower_flow = 110 prime_tower_min_volume = 50 prime_tower_wipe_enabled = True retract_at_layer_change = True -retraction_amount = 2.5 retraction_enable = True retraction_extra_prime_amount = 0 retraction_hop_enabled = True retraction_hop_only_when_collides = False -retraction_speed = 30 skirt_brim_minimal_length = 100 -switch_extruder_retraction_amount = 0 -switch_extruder_retraction_speeds = 40 \ No newline at end of file +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_direct_drive_petg_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_direct_drive_petg_normal.inst.cfg index 1356fdcf2e..e7ba96affc 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_direct_drive_petg_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/petg/tizyx_evy_dual_direct_drive_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 @@ -21,12 +21,10 @@ prime_tower_flow = 110 prime_tower_min_volume = 50 prime_tower_wipe_enabled = True retract_at_layer_change = True -retraction_amount = 2.5 retraction_enable = True retraction_extra_prime_amount = 0 retraction_hop_enabled = True retraction_hop_only_when_collides = False -retraction_speed = 30 skirt_brim_minimal_length = 100 -switch_extruder_retraction_amount = 0 -switch_extruder_retraction_speeds = 40 \ No newline at end of file +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_flex.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_flex.inst.cfg index a90290c052..3f4b72f6b8 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_flex.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_flex.inst.cfg @@ -4,7 +4,7 @@ name = Flex and PLA definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 @@ -25,18 +25,16 @@ prime_tower_flow = 100 prime_tower_min_volume = 80 prime_tower_wipe_enabled = False retract_at_layer_change = True -retraction_amount = 2.5 retraction_enable = True retraction_hop_enabled = True retraction_hop_only_when_collides = False retraction_min_travel = 2 -retraction_speed = 30 skin_angles = [] skirt_line_count = 2 speed_print = 60 speed_topbottom = 50 speed_wall_0 = 40 -switch_extruder_retraction_amount = 0 -switch_extruder_retraction_speeds = 40 top_layers = 4 -wall_line_count = 2 \ No newline at end of file +wall_line_count = 2 +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_flex_only.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_flex_only.inst.cfg index fde4138322..82466932e1 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_flex_only.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_flex_only.inst.cfg @@ -4,7 +4,7 @@ name = Flex Only definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_high.inst.cfg index 7890aa4744..001808cb0b 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 @@ -25,18 +25,16 @@ prime_tower_flow = 100 prime_tower_min_volume = 80 prime_tower_wipe_enabled = False retract_at_layer_change = True -retraction_amount = 2.5 retraction_enable = True retraction_hop_enabled = True retraction_hop_only_when_collides = False retraction_min_travel = 2 -retraction_speed = 30 skin_angles = [] skirt_line_count = 2 speed_print = 60 speed_topbottom = 50 speed_wall_0 = 40 -switch_extruder_retraction_amount = 0 -switch_extruder_retraction_speeds = 40 top_layers = 4 -wall_line_count = 2 \ No newline at end of file +wall_line_count = 2 +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_normal.inst.cfg index 2088da4363..48a9247e75 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 @@ -25,18 +25,16 @@ prime_tower_flow = 100 prime_tower_min_volume = 80 prime_tower_wipe_enabled = False retract_at_layer_change = True -retraction_amount = 2.5 retraction_enable = True retraction_hop_enabled = True retraction_hop_only_when_collides = False retraction_min_travel = 2 -retraction_speed = 30 skin_angles = [] skirt_line_count = 2 speed_print = 60 speed_topbottom = 50 speed_wall_0 = 40 -switch_extruder_retraction_amount = 0 -switch_extruder_retraction_speeds = 40 top_layers = 4 -wall_line_count = 2 \ No newline at end of file +wall_line_count = 2 +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_pva.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_pva.inst.cfg new file mode 100644 index 0000000000..6e17c6a6b5 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_classic_pla_pva.inst.cfg @@ -0,0 +1,40 @@ +[general] +version = 4 +name = PVA and PLA +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_pla +variant = Classic Extruder + +[values] +cool_fan_speed_0 = 100 +cool_min_layer_time = 10 +default_material_print_temperature = 210 +fill_outline_gaps = True +infill_angles = [] +infill_sparse_density = 15 +material_final_print_temperature = 210 +material_initial_print_temperature = 210 +material_standby_temperature = 210 +prime_tower_flow = 100 +prime_tower_min_volume = 80 +prime_tower_wipe_enabled = False +retract_at_layer_change = True +retraction_enable = True +retraction_hop_enabled = True +retraction_hop_only_when_collides = False +retraction_min_travel = 2 +skin_angles = [] +skirt_line_count = 2 +speed_print = 60 +speed_topbottom = 50 +speed_wall_0 = 40 +top_layers = 4 +wall_line_count = 2 +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_flex.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_flex.inst.cfg index 42520b06e1..bdfc1c3686 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_flex.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_flex.inst.cfg @@ -4,7 +4,7 @@ name = Flex and PLA definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 @@ -21,13 +21,11 @@ prime_tower_flow = 110 prime_tower_min_volume = 50 prime_tower_wipe_enabled = True retract_at_layer_change = True -retraction_amount = 2.5 retraction_enable = True retraction_extra_prime_amount = 0 retraction_hop_enabled = True retraction_hop_only_when_collides = False -retraction_speed = 30 speed_print = 30 skirt_brim_minimal_length = 100 -switch_extruder_retraction_amount = 0 -switch_extruder_retraction_speeds = 40 \ No newline at end of file +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_flex_only.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_flex_only.inst.cfg index 4c8c8e7f57..cdf652a733 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_flex_only.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_flex_only.inst.cfg @@ -4,7 +4,7 @@ name = Flex Only definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_high.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_high.inst.cfg index af3db653db..03b9a4719f 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_high.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 @@ -21,12 +21,10 @@ prime_tower_flow = 110 prime_tower_min_volume = 50 prime_tower_wipe_enabled = True retract_at_layer_change = True -retraction_amount = 2.5 retraction_enable = True retraction_extra_prime_amount = 0 retraction_hop_enabled = True retraction_hop_only_when_collides = False -retraction_speed = 30 skirt_brim_minimal_length = 100 -switch_extruder_retraction_amount = 0 -switch_extruder_retraction_speeds = 40 \ No newline at end of file +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_normal.inst.cfg index d119879e80..d0aa7de952 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 @@ -21,12 +21,10 @@ prime_tower_flow = 110 prime_tower_min_volume = 50 prime_tower_wipe_enabled = True retract_at_layer_change = True -retraction_amount = 2.5 retraction_enable = True retraction_extra_prime_amount = 0 retraction_hop_enabled = True retraction_hop_only_when_collides = False -retraction_speed = 30 skirt_brim_minimal_length = 100 -switch_extruder_retraction_amount = 0 -switch_extruder_retraction_speeds = 40 \ No newline at end of file +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_pva.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_pva.inst.cfg new file mode 100644 index 0000000000..0e17655de0 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/pla/tizyx_evy_dual_direct_drive_pla_pva.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = PVA and PLA +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_pla +variant = Direct Drive + +[values] +default_material_print_temperature = 210 +infill_angles = [] +material_final_print_temperature = 210 +material_initial_print_temperature = 210 +material_standby_temperature = 210 +prime_tower_flow = 110 +prime_tower_min_volume = 50 +prime_tower_wipe_enabled = True +retract_at_layer_change = True +retraction_enable = True +retraction_extra_prime_amount = 0 +retraction_hop_enabled = True +retraction_hop_only_when_collides = False +speed_print = 30 +skirt_brim_minimal_length = 100 +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_classic_pla_bois_flex.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_classic_pla_bois_flex.inst.cfg new file mode 100644 index 0000000000..60b14a5f7a --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_classic_pla_bois_flex.inst.cfg @@ -0,0 +1,40 @@ +[general] +version = 4 +name = Flex and PLA +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = tizyx_pla_bois +variant = Classic Extruder + +[values] +cool_fan_speed_0 = 100 +cool_min_layer_time = 10 +default_material_print_temperature = 210 +fill_outline_gaps = True +infill_angles = [] +infill_sparse_density = 15 +material_final_print_temperature = 210 +material_initial_print_temperature = 210 +material_standby_temperature = 210 +prime_tower_flow = 100 +prime_tower_min_volume = 80 +prime_tower_wipe_enabled = False +retract_at_layer_change = True +retraction_enable = True +retraction_hop_enabled = True +retraction_hop_only_when_collides = False +retraction_min_travel = 2 +skin_angles = [] +skirt_line_count = 2 +speed_print = 60 +speed_topbottom = 50 +speed_wall_0 = 40 +top_layers = 4 +wall_line_count = 2 +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_classic_pla_bois_high.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_classic_pla_bois_high.inst.cfg new file mode 100644 index 0000000000..c75f2cca4d --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_classic_pla_bois_high.inst.cfg @@ -0,0 +1,40 @@ +[general] +version = 4 +name = High +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = tizyx_pla_bois +variant = Classic Extruder + +[values] +cool_fan_speed_0 = 100 +cool_min_layer_time = 10 +default_material_print_temperature = 210 +fill_outline_gaps = True +infill_angles = [] +infill_sparse_density = 15 +material_final_print_temperature = 210 +material_initial_print_temperature = 210 +material_standby_temperature = 210 +prime_tower_flow = 100 +prime_tower_min_volume = 80 +prime_tower_wipe_enabled = False +retract_at_layer_change = True +retraction_enable = True +retraction_hop_enabled = True +retraction_hop_only_when_collides = False +retraction_min_travel = 2 +skin_angles = [] +skirt_line_count = 2 +speed_print = 60 +speed_topbottom = 50 +speed_wall_0 = 40 +top_layers = 4 +wall_line_count = 2 +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_classic_pla_bois_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_classic_pla_bois_normal.inst.cfg new file mode 100644 index 0000000000..d47fbef04b --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_classic_pla_bois_normal.inst.cfg @@ -0,0 +1,40 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = tizyx_pla_bois +variant = Classic Extruder + +[values] +cool_fan_speed_0 = 100 +cool_min_layer_time = 10 +default_material_print_temperature = 210 +fill_outline_gaps = True +infill_angles = [] +infill_sparse_density = 15 +material_final_print_temperature = 210 +material_initial_print_temperature = 210 +material_standby_temperature = 210 +prime_tower_flow = 100 +prime_tower_min_volume = 80 +prime_tower_wipe_enabled = False +retract_at_layer_change = True +retraction_enable = True +retraction_hop_enabled = True +retraction_hop_only_when_collides = False +retraction_min_travel = 2 +skin_angles = [] +skirt_line_count = 2 +speed_print = 60 +speed_topbottom = 50 +speed_wall_0 = 40 +top_layers = 4 +wall_line_count = 2 +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_direct_drive_pla_bois_flex.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_direct_drive_pla_bois_flex.inst.cfg new file mode 100644 index 0000000000..abfc316453 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_direct_drive_pla_bois_flex.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = Flex and PLA +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = tizyx_pla_bois +variant = Direct Drive + +[values] +default_material_print_temperature = 210 +infill_angles = [] +material_final_print_temperature = 210 +material_initial_print_temperature = 210 +material_standby_temperature = 210 +prime_tower_flow = 110 +prime_tower_min_volume = 50 +prime_tower_wipe_enabled = True +retract_at_layer_change = True +retraction_enable = True +retraction_extra_prime_amount = 0 +retraction_hop_enabled = True +retraction_hop_only_when_collides = False +speed_print = 30 +skirt_brim_minimal_length = 100 +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_direct_drive_pla_bois_high.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_direct_drive_pla_bois_high.inst.cfg new file mode 100644 index 0000000000..d3c7ad84d1 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_direct_drive_pla_bois_high.inst.cfg @@ -0,0 +1,30 @@ +[general] +version = 4 +name = High +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = tizyx_pla_bois +variant = Direct Drive + +[values] +default_material_print_temperature = 210 +infill_angles = [] +material_final_print_temperature = 210 +material_initial_print_temperature = 210 +material_standby_temperature = 210 +prime_tower_flow = 110 +prime_tower_min_volume = 50 +prime_tower_wipe_enabled = True +retract_at_layer_change = True +retraction_enable = True +retraction_extra_prime_amount = 0 +retraction_hop_enabled = True +retraction_hop_only_when_collides = False +skirt_brim_minimal_length = 100 +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 diff --git a/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_direct_drive_pla_bois_normal.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_direct_drive_pla_bois_normal.inst.cfg new file mode 100644 index 0000000000..34d66ff7de --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/pla_bois/tizyx_evy_dual_direct_drive_pla_bois_normal.inst.cfg @@ -0,0 +1,30 @@ +[general] +version = 4 +name = Normal +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = tizyx_pla_bois +variant = Direct Drive + +[values] +default_material_print_temperature = 210 +infill_angles = [] +material_final_print_temperature = 210 +material_initial_print_temperature = 210 +material_standby_temperature = 210 +prime_tower_flow = 110 +prime_tower_min_volume = 50 +prime_tower_wipe_enabled = True +retract_at_layer_change = True +retraction_enable = True +retraction_extra_prime_amount = 0 +retraction_hop_enabled = True +retraction_hop_only_when_collides = False +skirt_brim_minimal_length = 100 +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/pva/tizyx_evy_dual_classic_pva_pva.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pva/tizyx_evy_dual_classic_pva_pva.inst.cfg new file mode 100644 index 0000000000..585205b8bb --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/pva/tizyx_evy_dual_classic_pva_pva.inst.cfg @@ -0,0 +1,40 @@ +[general] +version = 4 +name = PVA and PLA +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = tizyx_pva +variant = Classic Extruder + +[values] +cool_fan_speed_0 = 100 +cool_min_layer_time = 10 +default_material_print_temperature = 210 +fill_outline_gaps = True +infill_angles = [] +infill_sparse_density = 15 +material_final_print_temperature = 210 +material_initial_print_temperature = 210 +material_standby_temperature = 210 +prime_tower_flow = 100 +prime_tower_min_volume = 80 +prime_tower_wipe_enabled = False +retract_at_layer_change = True +retraction_enable = True +retraction_hop_enabled = True +retraction_hop_only_when_collides = False +retraction_min_travel = 2 +skin_angles = [] +skirt_line_count = 2 +speed_print = 60 +speed_topbottom = 50 +speed_wall_0 = 40 +top_layers = 4 +wall_line_count = 2 +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/pva/tizyx_evy_dual_direct_drive_pva_pva.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/pva/tizyx_evy_dual_direct_drive_pva_pva.inst.cfg new file mode 100644 index 0000000000..1828fb55f8 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/pva/tizyx_evy_dual_direct_drive_pva_pva.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = PVA and PLA +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = tizyx_pva +variant = Direct Drive + +[values] +default_material_print_temperature = 210 +infill_angles = [] +material_final_print_temperature = 210 +material_initial_print_temperature = 210 +material_standby_temperature = 210 +prime_tower_flow = 110 +prime_tower_min_volume = 50 +prime_tower_wipe_enabled = True +retract_at_layer_change = True +retraction_enable = True +retraction_extra_prime_amount = 0 +retraction_hop_enabled = True +retraction_hop_only_when_collides = False +speed_print = 30 +skirt_brim_minimal_length = 100 +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Flex_Only_Quality.inst.CFG b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Flex_Only_Quality.inst.CFG deleted file mode 100644 index 9dd69c246a..0000000000 --- a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Flex_Only_Quality.inst.CFG +++ /dev/null @@ -1,30 +0,0 @@ -[general] -version = 4 -name = Flex Only -definition = tizyx_evy_dual - -[metadata] -setting_version = 7 -type = quality -quality_type = coarse -weight = -3 -global_quality = True - -[values] -layer_height = 0.2 -layer_height_0 = 0.25 -adhesion_extruder_nr = 1 -adhesion_type = skirt -skirt_line_count = 2 -skirt_gap = 2 -fill_outline_gaps = True -infill_sparse_density = 15 -retraction_amount = 2.5 -retraction_min_travel = 2 -retraction_speed = 30 -speed_print = 30 -speed_topbottom = 50 -speed_wall_0 = 40 -top_layers = 4 -wall_line_count = 2 -cool_min_layer_time = 11 \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Flex_Only_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Flex_Only_Quality.inst.cfg new file mode 100644 index 0000000000..e578647355 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Flex_Only_Quality.inst.cfg @@ -0,0 +1,39 @@ +[general] +version = 4 +name = Flex Only +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = coarse +weight = -3 +global_quality = True + +[values] +layer_height = 0.2 +layer_height_0 = 0.25 +adhesion_extruder_nr = 1 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 2 +fill_outline_gaps = True +infill_sparse_density = 15 +retraction_min_travel = 2 +speed_print = 30 +speed_topbottom = 50 +speed_wall_0 = 40 +top_layers = 4 +wall_line_count = 2 +cool_min_layer_time = 11 +material_print_temperature = =default_material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +support_enable = True +prime_tower_enable = True +prime_tower_position_x = 127.5 +prime_tower_position_y = =math.ceil(250-prime_tower_size) +prime_tower_size = 35 +prime_tower_flow = 110 +z_seam_corner = z_seam_corner_none +optimize_wall_printing_order = True diff --git a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Flex_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Flex_Quality.inst.cfg index f2e8e574b6..0505c641e7 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Flex_Quality.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Flex_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Flex and PLA definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 @@ -15,8 +15,15 @@ adhesion_extruder_nr = 0 adhesion_type = skirt layer_height = 0.2 layer_height_0 = 0.25 -prime_tower_circular = True prime_tower_enable = True -prime_tower_position_x = 180 -prime_tower_position_y = 180 -prime_tower_size = 29 +prime_tower_position_x = 127.5 +prime_tower_position_y = =math.ceil(250-prime_tower_size) +prime_tower_size = 35 +prime_tower_flow = 110 +material_print_temperature = =default_material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +support_enable = True +z_seam_corner = z_seam_corner_none +optimize_wall_printing_order = True +retraction_hop_enabled = False diff --git a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_High_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_High_Quality.inst.cfg index 1abaff2a06..8a00b03d20 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_High_Quality.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 @@ -15,8 +15,39 @@ adhesion_extruder_nr = 0 adhesion_type = skirt layer_height = 0.1 layer_height_0 = 0.1 -prime_tower_circular = True prime_tower_enable = True -prime_tower_position_x = 180 -prime_tower_position_y = 180 -prime_tower_size = 29 +prime_tower_position_x = 127.5 +prime_tower_position_y = =math.ceil(250-prime_tower_size) +prime_tower_size = 35 +prime_tower_flow = 110 +material_print_temperature = =default_material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +support_enable = True +initial_layer_line_width_factor = 90 +infill_overlap = 15 +material_flow_layer_0 = 93 +material_flow = 99 +retraction_amount = 5 +retraction_speed = 60 +speed_wall_0 = 45 +speed_wall_x = 50 +speed_topbottom = 45 +support_angle = 70 +skirt_line_count = 2 +skirt_gap = 2 +fill_outline_gaps = True +infill_sparse_density = 15 +material_diameter = 1.75 +retraction_min_travel = 2 +speed_print = 60 +cool_fan_speed_0 = 10 +cool_min_layer_time = 12 +layer_start_x = 250 +layer_start_y = 250 +coasting_enable = False +top_layers = 4 +wall_line_count = 2 +z_seam_corner = z_seam_corner_none +optimize_wall_printing_order = True +retraction_hop_enabled = False \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Normal_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Normal_Quality.inst.cfg index 143589f53c..e4dd05c2af 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Normal_Quality.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tizyx_evy_dual [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 @@ -15,8 +15,39 @@ adhesion_extruder_nr = 0 adhesion_type = skirt layer_height = 0.2 layer_height_0 = 0.25 -prime_tower_circular = True prime_tower_enable = True -prime_tower_position_x = 180 -prime_tower_position_y = 180 -prime_tower_size = 29 +prime_tower_position_x = 127.5 +prime_tower_position_y = =math.ceil(250-prime_tower_size) +prime_tower_size = 35 +prime_tower_flow = 110 +material_print_temperature = =default_material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +support_enable = True +initial_layer_line_width_factor = 90 +infill_overlap = 15 +material_flow_layer_0 = 93 +material_flow = 99 +retraction_amount = 5 +retraction_speed = 60 +speed_wall_0 = 45 +speed_wall_x = 50 +speed_topbottom = 45 +support_angle = 70 +skirt_line_count = 2 +skirt_gap = 2 +fill_outline_gaps = True +infill_sparse_density = 15 +material_diameter = 1.75 +retraction_min_travel = 2 +speed_print = 60 +cool_fan_speed_0 = 10 +cool_min_layer_time = 12 +layer_start_x = 250 +layer_start_y = 250 +coasting_enable = False +top_layers = 4 +wall_line_count = 2 +z_seam_corner = z_seam_corner_none +optimize_wall_printing_order = True +retraction_hop_enabled = False \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_PVA_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_PVA_Quality.inst.cfg new file mode 100644 index 0000000000..128aeef211 --- /dev/null +++ b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_PVA_Quality.inst.cfg @@ -0,0 +1,29 @@ +[general] +version = 4 +name = PVA and PLA +definition = tizyx_evy_dual + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +global_quality = True + +[values] +adhesion_extruder_nr = 0 +adhesion_type = skirt +layer_height = 0.2 +layer_height_0 = 0.25 +prime_tower_enable = True +prime_tower_position_x = 127.5 +prime_tower_position_y = =math.ceil(250-prime_tower_size) +prime_tower_size = 35 +prime_tower_flow = 110 +material_print_temperature = =default_material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +support_enable = True +z_seam_corner = z_seam_corner_none +optimize_wall_printing_order = True +retraction_hop_enabled = False \ No newline at end of file diff --git a/resources/quality/tizyx/tizyx_k25/tizyx_k25_high.inst.cfg b/resources/quality/tizyx/tizyx_k25/tizyx_k25_high.inst.cfg new file mode 100644 index 0000000000..ef31e9482e --- /dev/null +++ b/resources/quality/tizyx/tizyx_k25/tizyx_k25_high.inst.cfg @@ -0,0 +1,41 @@ +[general] +version = 4 +name = High +definition = tizyx_k25 + +[metadata] +quality_type = draft +setting_version = 10 +type = quality +global_quality = True + +[values] +layer_height = 0.1 +initial_layer_line_width_factor = 90 +infill_overlap = 15 +material_flow_layer_0 = 93 +material_flow = 99 +speed_wall_0 = 45 +speed_wall_x = 50 +speed_topbottom = 45 +support_enable= True +support_angle = 70 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 2 +fill_outline_gaps = True +infill_sparse_density = 15 +material_diameter = 1.75 +retraction_min_travel = 2 +speed_print = 60 +cool_fan_speed_0 = 10 +cool_min_layer_time = 12 +layer_start_x = 250 +layer_start_y = 250 +coasting_enable = False +wall_line_count = 2 +material_print_temperature = =default_material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +z_seam_corner = z_seam_corner_none +optimize_wall_printing_order = True diff --git a/resources/quality/tizyx/tizyx_k25/tizyx_k25_normal.inst.cfg b/resources/quality/tizyx/tizyx_k25/tizyx_k25_normal.inst.cfg index 1a09737baa..ec6e78b65f 100644 --- a/resources/quality/tizyx/tizyx_k25/tizyx_k25_normal.inst.cfg +++ b/resources/quality/tizyx/tizyx_k25/tizyx_k25_normal.inst.cfg @@ -1,27 +1,41 @@ -[general] -version = 4 -name = TiZYX K25 Normal -definition = tizyx_k25 - -[metadata] -quality_type = normal -setting_version = 7 -type = quality -global_quality = True - -[values] -adhesion_type = skirt -skirt_line_count = 2 -skirt_gap = 2 -fill_outline_gaps = True -infill_sparse_density = 15 -material_diameter = 1.75 -retraction_amount = 2.5 -retraction_min_travel = 2 -retraction_speed = 30 -speed_print = 60 -speed_topbottom = 50 -speed_wall_0 = 40 -top_layers = 4 -wall_line_count = 2 -cool_min_layer_time = 11 +[general] +version = 4 +name = Normal +definition = tizyx_k25 + +[metadata] +quality_type = normal +setting_version = 10 +type = quality +global_quality = True + +[values] +layer_height = 0.2 +initial_layer_line_width_factor = 90 +infill_overlap = 15 +material_flow_layer_0 = 93 +material_flow = 99 +speed_wall_0 = 45 +speed_wall_x = 50 +speed_topbottom = 45 +support_enable= True +support_angle = 70 +adhesion_type = skirt +skirt_line_count = 2 +skirt_gap = 2 +fill_outline_gaps = True +infill_sparse_density = 15 +material_diameter = 1.75 +retraction_min_travel = 2 +speed_print = 60 +cool_fan_speed_0 = 10 +cool_min_layer_time = 12 +layer_start_x = 250 +layer_start_y = 250 +coasting_enable = False +wall_line_count = 2 +material_print_temperature = =default_material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_final_print_temperature = =material_print_temperature +z_seam_corner = z_seam_corner_none +optimize_wall_printing_order = True diff --git a/resources/quality/ultimaker2/um2_draft.inst.cfg b/resources/quality/ultimaker2/um2_draft.inst.cfg index 121f6f0404..eac29a7f37 100644 --- a/resources/quality/ultimaker2/um2_draft.inst.cfg +++ b/resources/quality/ultimaker2/um2_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = ultimaker2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2/um2_fast.inst.cfg b/resources/quality/ultimaker2/um2_fast.inst.cfg index 8dc9b56082..3ed5d7fce7 100644 --- a/resources/quality/ultimaker2/um2_fast.inst.cfg +++ b/resources/quality/ultimaker2/um2_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2/um2_high.inst.cfg b/resources/quality/ultimaker2/um2_high.inst.cfg index 5bb17480b6..36bd437dd4 100644 --- a/resources/quality/ultimaker2/um2_high.inst.cfg +++ b/resources/quality/ultimaker2/um2_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2/um2_normal.inst.cfg b/resources/quality/ultimaker2/um2_normal.inst.cfg index 1235fe27db..9bf5fefa81 100644 --- a/resources/quality/ultimaker2/um2_normal.inst.cfg +++ b/resources/quality/ultimaker2/um2_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg index 544deae3a2..70d2117568 100644 --- a/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg index f32deec07a..74d6a053a5 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg index 8c50d00108..52b8d1968b 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg index e2edba3039..7f9d854245 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg index 170ccb06b2..a52f3a7eaa 100644 --- a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = 0 diff --git a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg index 1b5bb17054..7fa5be1218 100644 --- a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg index b2e7e246d5..36b0b64012 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg index 13d2593e5f..4794f9a743 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg index 7269389352..90c46693e4 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg index 5713c9202f..b675412d66 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg index 7ccbadb29d..b485a004f4 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg index 0c961f2dc3..71df0dee8b 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg index 590e2c4ff0..6c6b9335e8 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg index a545dd9217..139c0aca83 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg index 50b066bfbd..ad4473bb66 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg index 79eb50c3fa..f418184c4e 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg index 35e6644a07..b667889c1b 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg index ec300d3aad..741ce4c235 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg index 85c0199afd..d9e5cc3aa6 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg index 44bba4b31a..1164125b62 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg index a8d23e44e2..aba3008932 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = slightlycoarse weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg index d357268ddb..0900da01d0 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg index e2bd504105..e487097807 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = slightlycoarse weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg index 67afe33eae..9c68b17d71 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_global_Coarse_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Coarse_Quality.inst.cfg index 9cfbefa641..9d9912c433 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Coarse_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse Quality definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -4 diff --git a/resources/quality/ultimaker2_plus/um2p_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Draft_Quality.inst.cfg index 1f4f9af746..685b75b27e 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Draft_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Draft Quality definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Extra_Coarse_Quality.inst.cfg index 0aba820d7e..5be0c1cd31 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Extra_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse Quality definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extracoarse weight = -3 diff --git a/resources/quality/ultimaker2_plus/um2p_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Fast_Quality.inst.cfg index 29e649ffe0..37ba437cfe 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Fast_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_global_High_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_High_Quality.inst.cfg index 12f449fbd1..29c9cb1626 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Normal_Quality.inst.cfg index 908d0e42ab..df50568401 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_global_Slightly_Coarse_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Slightly_Coarse_Quality.inst.cfg index 02de795579..6ef155e81d 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Slightly_Coarse_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Slightly_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse Quality definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = slightlycoarse weight = -4 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg index fc90b2b6e9..744fe1894c 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg index 42b5bfc3c9..96819d6328 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg index 347e613811..a3cc6ada9f 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg index 44d25a9301..e53ccbe9b0 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg index 926bc4ab74..ddb89bdce1 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = slightlycoarse weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg index 6682e1c592..d8734ebacf 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg index 9ebbd2bc90..f472a733ed 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = slightlycoarse weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg index d84afd92cb..1cb7df97fe 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg index ebbf156286..2360a3231b 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg index 025f653e3f..7f00f1f1b1 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg index 71cef62f9d..4c8c5ce3bf 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg index de171408c4..290cc51900 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg index 5c0b67f0e7..7f5825b868 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = slightlycoarse weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg index 54b1488bc6..cc3b91e406 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg index 04a21a1571..04b4fee95e 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extracoarse weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg index 78c71ef4ff..f8ea439de1 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg index 595ee79135..160a3fc60f 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg index afe476adec..bcc6a8474c 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg index 7cec6b1bd1..a83f565043 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg index 614bfbafcd..44336d5bed 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg index c76e73990b..22caf19fb6 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg index e570aafe07..0b2962cf0d 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = slightlycoarse weight = -3 diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg index 1ac5dedc81..24526ead4a 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg index 07b90ad10a..e54f936f67 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg index 736c42d294..0369b1fe47 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg index fc56bc41e5..0ed746ef26 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg index c2a687a4d6..db9ce515cb 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg index 8194d1a510..7e0c63e2dc 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg index fb8212a4a0..0f8aebcb82 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine - Experimental definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg index 39416d4bb1..310c0dd7c7 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg index e6b10560c3..81c74aaba6 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine - Experimental definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.25_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_TPLA_Normal_Quality.inst.cfg index c83d3a1f49..0cc06b791c 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_TPLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_TPLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg index 150be3bdcd..3e0032cb9f 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg index f9d1110512..6ed89e92f0 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg index 40229c1307..237f8b2195 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg index df13a81211..b6053cab3a 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg index 37c4f1effe..af6bcabe3c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg index be88b3bcec..b2473e84ad 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg index 46885141b7..fe74184e93 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg index 37801626bd..6e8125a47b 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg index 4bf87820fb..d92dcee5ef 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg index cbb3085d85..f9d9270d42 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg index ed87e6d4ed..23b54f2d6f 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg index 1a15755577..11631f1783 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg index 2cba7b1ccf..b45973dca2 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg index e927a79c10..48c225adf9 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg index d9a7649123..9c335fae88 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg index 0139970339..424e888980 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg index 094a7c0ff5..cc12cd8f47 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg index 8bb0002b84..6bf8b2c6ce 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg index f7c733c212..a876f0ccc6 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg index e6ac6a7cb6..9c5787429b 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg index e50cd7fc02..7623235d28 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg index 5f837fce0e..7114045a7f 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg index ccba414b57..0122914330 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg index e4cbb6ed35..e26fc9400d 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg index 96d1a3436a..b4ce5c3ad1 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg index a7d5fa0586..d9fa672e19 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg index bb6b6cb06c..ca21917b84 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg index 6ca1e6fe3e..b018f2c8c1 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg index e34a8ba625..48013bff77 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg index d363667af7..1fe7c7f251 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg index 4efb7d9e78..f68eb02be0 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg index d461a3187e..6b3527b2c9 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg index b451c22489..b383fde2e7 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg index 0a3bd45c38..d3af9e7ee0 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg index 42adf63e8c..054d4a38e4 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg index a5804ad2e1..c4b0e7883c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg index 051b5bba36..957bb0142e 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg index dcbe8ca1b0..ea24b21e27 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg index 1a0c746b20..e566c87e93 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg index add4025786..44d3af4a26 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast - Experimental definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg index 654447e5dc..0b28a03dd7 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint - Experimental definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg index 86d145cf39..077d0aab45 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast - Experimental definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg index 243bf8f437..07f506e019 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg index 78362aa1d8..ae080455de 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg index 44f254b613..e7141d77ff 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg index be1245b58a..0f2e3c777c 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg index 9d15b69dbc..3f5ad363d9 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg index d2b22cd418..ebc02f09f7 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg index 4e9c8c9376..10104d5aff 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast - Experimental definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg index 69661c91b6..0eeb9de984 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint - Experimental definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg index 1fefa5a141..25a560fa8c 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast - Experimental definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg index d8133eee5f..2d6d112e95 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg index 35b675fd10..e714ed4753 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg index fed141f8e9..3893990f67 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg index a6fe2c9e8e..70f5c9c9cf 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg index bd2a09c3cc..c06affc4e1 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg index 68765f839b..81532dfcbc 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Draft_Print.inst.cfg index 2224917fc1..6c5d3baec2 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Superdraft_Print.inst.cfg index e4b3355579..30e6cb7116 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Verydraft_Print.inst.cfg index 026372156c..86f6965eb4 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg index d30a6db38c..9261ecc689 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg index 28fffe945a..e9e111fa47 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg index 35bc994931..904ffc0854 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg index a99a0abdf5..81c570ec52 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg index 4fd5c14f5d..8a8f0efcd2 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg index 6d80217cd5..ab67537b80 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg index 8068af6f22..c7f41acd06 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg index 090baba2c8..99a7af36f2 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg index 47a82e01a3..a6a5ac1a4b 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg index a8d0e494cb..24b0f7ba0e 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg index 936406fce6..0b9c1d5a61 100644 --- a/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg index 14b214da5a..3f470ebaaa 100644 --- a/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg index b9c2c19d8c..28d16285e8 100644 --- a/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg index ab9127f26d..d270ad94b3 100644 --- a/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg index 36d9f932f1..b1f3750420 100644 --- a/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg index 3eaf8191a2..a567173956 100644 --- a/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_original/umo_global_Coarse_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Coarse_Quality.inst.cfg index 2ebfb1e2c7..721d867161 100644 --- a/resources/quality/ultimaker_original/umo_global_Coarse_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse Quality definition = ultimaker_original [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/ultimaker_original/umo_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Draft_Quality.inst.cfg index b246ba12ea..3ddb8bf467 100644 --- a/resources/quality/ultimaker_original/umo_global_Draft_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Draft Quality definition = ultimaker_original [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_original/umo_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Extra_Coarse_Quality.inst.cfg index da8c6a9b39..31558a9ab7 100644 --- a/resources/quality/ultimaker_original/umo_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Extra_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse Quality definition = ultimaker_original [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extra coarse weight = -4 diff --git a/resources/quality/ultimaker_original/umo_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Fast_Quality.inst.cfg index db03a7f18c..2cf4d85d27 100644 --- a/resources/quality/ultimaker_original/umo_global_Fast_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_original [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_original/umo_global_High_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_High_Quality.inst.cfg index ec1b593f7e..cf18a6e9b2 100644 --- a/resources/quality/ultimaker_original/umo_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_original [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_original/umo_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Normal_Quality.inst.cfg index 9b39c97682..6820c1cf16 100644 --- a/resources/quality/ultimaker_original/umo_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_original [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_ABS_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..d1b20176fe --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_ABS_Normal_Quality.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_abs +variant = AA 0.25 + +[values] +cool_fan_speed = 40 +infill_overlap = 15 +material_final_print_temperature = =material_print_temperature - 5 +retraction_prime_speed = 25 +speed_topbottom = =math.ceil(speed_print * 30 / 55) +wall_thickness = 0.92 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_CPE_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..8a0a8b2e9f --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_CPE_Normal_Quality.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_cpe +variant = AA 0.25 + +[values] +retraction_combing_max_distance = 50 +retraction_extrusion_window = 0.5 +speed_infill = =math.ceil(speed_print * 40 / 55) +speed_topbottom = =math.ceil(speed_print * 30 / 55) +top_bottom_thickness = 0.8 +wall_thickness = 0.92 \ No newline at end of file diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_Nylon_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..e52512a10d --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_Nylon_Normal_Quality.inst.cfg @@ -0,0 +1,35 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_nylon +variant = AA 0.25 + +[values] +cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 12 +infill_line_width = =round(line_width * 0.5 / 0.4, 2) +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 1.4 +ooze_shield_angle = 40 +raft_acceleration = =acceleration_layer_0 +raft_airgap = =round(layer_height_0 * 0.85, 2) +raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 3) +raft_jerk = =jerk_layer_0 +raft_margin = 10 +raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +retraction_min_travel = 5 +skin_overlap = 50 +speed_print = 70 +speed_topbottom = =math.ceil(speed_print * 30 / 70) +speed_wall = =math.ceil(speed_print * 30 / 70) +switch_extruder_prime_speed = 30 +switch_extruder_retraction_amount = 30 +switch_extruder_retraction_speeds = 40 +wall_line_width_x = =wall_line_width diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_PC_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..29d5e50455 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_PC_Normal_Quality.inst.cfg @@ -0,0 +1,55 @@ +[general] +version = 4 +name = Fine - Experimental +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_pc +variant = AA 0.25 +is_experimental = True + +[values] +acceleration_enabled = True +acceleration_print = 4000 +adhesion_type = brim +brim_width = 20 +cool_fan_full_at_height = =layer_height_0 + layer_height +cool_fan_speed_max = 50 +cool_min_layer_time_fan_speed_max = 5 +cool_min_speed = 5 +infill_line_width = =line_width +infill_pattern = triangles +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +machine_min_cool_heat_time_window = 15 +multiple_mesh_overlap = 0 +ooze_shield_angle = 40 +prime_tower_enable = True +prime_tower_wipe_enabled = True +raft_airgap = 0.25 +raft_interface_thickness = =max(layer_height * 1.5, 0.225) +retraction_count_max = 80 +retraction_hop = 2 +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 15 +skin_overlap = 30 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) +speed_print = 50 +speed_topbottom = =math.ceil(speed_print * 25 / 50) +speed_wall = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_wall * 25 / 40) +support_bottom_distance = =support_z_distance +support_interface_density = 87.5 +support_interface_pattern = lines +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +wall_0_inset = 0 +wall_line_width_x = =line_width +wall_thickness = 1.2 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_PLA_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..5596bb1d33 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_PLA_Normal_Quality.inst.cfg @@ -0,0 +1,36 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_pla +variant = AA 0.25 + +[values] +brim_width = 8 +cool_fan_full_at_height = =layer_height_0 +cool_min_speed = 10 +infill_overlap = 10 +infill_pattern = grid +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 1.4 +material_final_print_temperature = =max(-273.15, material_print_temperature - 15) +material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) +material_print_temperature = 190 +retraction_hop = 0.2 +skin_overlap = 5 +speed_layer_0 = =speed_print +speed_print = 30 +speed_travel_layer_0 = 120 +speed_wall = =math.ceil(speed_print * 25 / 30) +speed_wall_0 = =math.ceil(speed_print * 20 / 30) +top_bottom_thickness = 0.72 +travel_avoid_distance = 0.4 +wall_0_inset = 0.015 +wall_0_wipe_dist = 0.25 +wall_thickness = 0.7 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_PP_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..3b9bfa3e3c --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_PP_Normal_Quality.inst.cfg @@ -0,0 +1,59 @@ +[general] +version = 4 +name = Fine - Experimental +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_pp +variant = AA 0.25 +is_experimental = True + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 10 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 5 +cool_min_speed = 2.5 +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_pattern = tetrahedral +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +line_width = =machine_nozzle_size * 0.92 +machine_min_cool_heat_time_window = 15 +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_print_temperature = =default_material_print_temperature - 15 +material_print_temperature_layer_0 = =material_print_temperature + 3 +multiple_mesh_overlap = 0 +prime_tower_enable = False +prime_tower_size = 16 +prime_tower_wipe_enabled = True +retraction_count_max = 6 +retraction_extra_prime_amount = 0.2 +retraction_extrusion_window = 6.5 +retraction_hop = 2 +retraction_hop_only_when_collides = True +retraction_min_travel = 0.8 +retraction_prime_speed = 13 +speed_equalize_flow_enabled = True +speed_layer_0 = =math.ceil(speed_print * 15 / 25) +speed_print = 25 +speed_travel_layer_0 = 50 +speed_wall = =math.ceil(speed_print * 25 / 25) +speed_wall_0 = =math.ceil(speed_wall * 25 / 25) +support_angle = 50 +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +top_bottom_thickness = 1 +travel_avoid_distance = 3 +wall_0_inset = 0 +wall_line_width_x = =line_width +wall_thickness = =line_width * 3 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.25_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.25_TPLA_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..8d2f6092b1 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.25_TPLA_Normal_Quality.inst.cfg @@ -0,0 +1,40 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_tough_pla +variant = AA 0.25 + +[values] +brim_width = 8 +cool_fan_full_at_height = =layer_height_0 +cool_min_speed = 7 +infill_line_width = =line_width +infill_overlap = 10 +infill_pattern = grid +line_width = =machine_nozzle_size * 0.92 +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 1.4 +material_final_print_temperature = =max(-273.15, material_print_temperature - 15) +material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) +material_print_temperature = =default_material_print_temperature - 15 +skin_overlap = 5 +speed_layer_0 = =math.ceil(speed_print * 30 / 30) +speed_print = 30 +speed_topbottom = =math.ceil(speed_print * 20 / 30) +speed_travel_layer_0 = 120 +speed_wall = =math.ceil(speed_print * 25 / 30) +speed_wall_0 = =math.ceil(speed_print * 20 / 30) +top_bottom_thickness = 0.72 +wall_0_inset = 0.015 +wall_0_wipe_dist = 0.25 +wall_line_width = =line_width +wall_line_width_x= =line_width +wall_thickness = 0.7 + diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_ABS_Draft_Print.inst.cfg similarity index 78% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_ABS_Draft_Print.inst.cfg index 6222dcdc7b..6e5912c1a7 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_ABS_Draft_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Fast -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 material = generic_abs variant = AA 0.4 -buildplate = Aluminum [values] machine_nozzle_cool_down_speed = 0.85 @@ -21,7 +20,7 @@ material_final_print_temperature = =material_print_temperature - 20 prime_tower_enable = False skin_overlap = 20 speed_print = 60 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 60) speed_topbottom = =math.ceil(speed_print * 35 / 60) speed_wall = =math.ceil(speed_print * 45 / 60) speed_wall_0 = =math.ceil(speed_wall * 35 / 45) @@ -30,7 +29,3 @@ wall_thickness = 1 infill_line_width = =round(line_width * 0.4 / 0.35, 2) speed_infill = =math.ceil(speed_print * 50 / 60) -material_bed_temperature_layer_0 = 100 -default_material_bed_temperature = 90 -prime_blob_enable = False -layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_ABS_Fast_Print.inst.cfg similarity index 77% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Fast_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_ABS_Fast_Print.inst.cfg index 2bf17429fa..e8fda946e2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_ABS_Fast_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Normal -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 material = generic_abs variant = AA 0.4 -buildplate = Aluminum [values] cool_min_speed = 7 @@ -21,7 +20,7 @@ material_initial_print_temperature = =material_print_temperature - 15 material_final_print_temperature = =material_print_temperature - 20 prime_tower_enable = False speed_print = 60 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 60) speed_topbottom = =math.ceil(speed_print * 30 / 60) speed_wall = =math.ceil(speed_print * 40 / 60) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) @@ -29,7 +28,3 @@ speed_wall_0 = =math.ceil(speed_wall * 30 / 40) infill_line_width = =round(line_width * 0.4 / 0.35, 2) speed_infill = =math.ceil(speed_print * 45 / 60) -material_bed_temperature_layer_0 = 100 -default_material_bed_temperature = 90 -prime_blob_enable = False -layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_ABS_High_Quality.inst.cfg similarity index 76% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_High_Quality.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_ABS_High_Quality.inst.cfg index 7d7f4b2aaa..a3c1e88495 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_ABS_High_Quality.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Extra Fine -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 material = generic_abs variant = AA 0.4 -buildplate = Aluminum [values] cool_min_speed = 12 @@ -21,14 +20,10 @@ material_initial_print_temperature = =material_print_temperature - 15 material_final_print_temperature = =material_print_temperature - 20 prime_tower_enable = False speed_print = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 50) speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 30 / 50) infill_line_width = =round(line_width * 0.4 / 0.35, 2) speed_infill = =math.ceil(speed_print * 40 / 50) -material_bed_temperature_layer_0 = 100 -default_material_bed_temperature = 90 -prime_blob_enable = False -layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_ABS_Normal_Quality.inst.cfg similarity index 75% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Normal_Quality.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_ABS_Normal_Quality.inst.cfg index 6d78d9d027..015c8d05e9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_ABS_Normal_Quality.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Fine -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 material = generic_abs variant = AA 0.4 -buildplate = Aluminum [values] machine_nozzle_cool_down_speed = 0.85 @@ -20,15 +19,9 @@ material_initial_print_temperature = =material_print_temperature - 15 material_final_print_temperature = =material_print_temperature - 20 prime_tower_enable = False speed_print = 55 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 55) speed_topbottom = =math.ceil(speed_print * 30 / 55) speed_wall = =math.ceil(speed_print * 30 / 55) infill_line_width = =round(line_width * 0.4 / 0.35, 2) speed_infill = =math.ceil(speed_print * 40 / 55) - -material_bed_temperature_layer_0 = 100 -default_material_bed_temperature = 90 -prime_blob_enable = False -layer_height_0 = 0.17 - diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_BAM_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_BAM_Draft_Print.inst.cfg new file mode 100644 index 0000000000..310e866ce4 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_BAM_Draft_Print.inst.cfg @@ -0,0 +1,40 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_bam +variant = AA 0.4 + +[values] +brim_replaces_support = False +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_print_temperature = =default_material_print_temperature + 5 +# prime_tower_enable: see CURA-4248 +prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 +skin_overlap = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) +speed_topbottom = =math.ceil(speed_print * 35 / 70) +speed_wall = =math.ceil(speed_print * 50 / 70) +speed_wall_0 = =math.ceil(speed_wall * 35 / 50) +top_bottom_thickness = 1 +wall_thickness = 1 +support_brim_enable = True +support_interface_enable = True +support_interface_density = =min(extruderValues('material_surface_energy')) +support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' +support_top_distance = =math.ceil(min(extruderValues('material_adhesion_tendency')) / 2) * layer_height +support_bottom_distance = =math.ceil(min(extruderValues('material_adhesion_tendency')) / 2) * layer_height +support_angle = 45 +support_join_distance = 5 +support_offset = 2 +support_pattern = triangles +support_infill_rate = =10 if support_enable else 0 if support_tree_enable else 10 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_BAM_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_BAM_Fast_Print.inst.cfg new file mode 100644 index 0000000000..6cac452a29 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_BAM_Fast_Print.inst.cfg @@ -0,0 +1,39 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -1 +material = generic_bam +variant = AA 0.4 + +[values] +brim_replaces_support = False +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +# prime_tower_enable: see CURA-4248 +prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 +speed_print = 80 +speed_layer_0 = =math.ceil(speed_print * 20 / 80) +speed_topbottom = =math.ceil(speed_print * 30 / 80) +speed_wall = =math.ceil(speed_print * 40 / 80) +speed_wall_0 = =math.ceil(speed_wall * 30 / 40) +top_bottom_thickness = 1 +wall_thickness = 1 +support_brim_enable = True +support_interface_enable = True +support_interface_density = =min(extruderValues('material_surface_energy')) +support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' +support_top_distance = =math.ceil(min(extruderValues('material_adhesion_tendency')) / 1) * layer_height +support_bottom_distance = =math.ceil(min(extruderValues('material_adhesion_tendency')) / 2) * layer_height +support_angle = 45 +support_join_distance = 5 +support_offset = 2 +support_pattern = triangles +support_infill_rate = =10 if support_enable else 0 if support_tree_enable else 10 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_BAM_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_BAM_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..a22960d99e --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_BAM_Normal_Quality.inst.cfg @@ -0,0 +1,38 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_bam +variant = AA 0.4 + +[values] +brim_replaces_support = False +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +cool_min_speed = 7 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_print_temperature = =default_material_print_temperature - 10 +# prime_tower_enable: see CURA-4248 +prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 +skin_overlap = 10 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) +support_brim_enable = True +support_interface_enable = True +support_interface_density = =min(extruderValues('material_surface_energy')) +support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' +support_top_distance = =math.ceil(min(extruderValues('material_adhesion_tendency')) / 1) * layer_height +support_bottom_distance = =math.ceil(min(extruderValues('material_adhesion_tendency')) / 2) * layer_height +support_angle = 45 +support_join_distance = 5 +support_offset = 2 +support_pattern = triangles +support_infill_rate = =10 if support_enable else 0 if support_tree_enable else 10 +top_bottom_thickness = 1 +wall_thickness = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Draft_Print.inst.cfg similarity index 85% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Draft_Print.inst.cfg index c02317792c..38be6a344e 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Draft_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Fast -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 material = generic_cpe_plus variant = AA 0.4 -buildplate = Aluminum [values] acceleration_enabled = True @@ -36,7 +35,7 @@ retraction_hop = 0.2 retraction_hop_enabled = False retraction_hop_only_when_collides = True skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 50) speed_print = 50 speed_topbottom = =math.ceil(speed_print * 40 / 50) @@ -47,8 +46,3 @@ support_z_distance = =layer_height wall_0_inset = 0 wall_thickness = 1 -material_bed_temperature_layer_0 = 115 -default_material_bed_temperature = 105 -prime_blob_enable = False -layer_height_0 = 0.17 - diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Fast_Print.inst.cfg similarity index 85% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Fast_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Fast_Print.inst.cfg index 57be60501c..be84f05a70 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Fast_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Normal -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 material = generic_cpe_plus variant = AA 0.4 -buildplate = Aluminum [values] acceleration_enabled = True @@ -36,7 +35,7 @@ retraction_hop = 0.2 retraction_hop_enabled = False retraction_hop_only_when_collides = True skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_topbottom = =math.ceil(speed_print * 35 / 45) @@ -45,8 +44,3 @@ speed_wall_0 = =math.ceil(speed_wall * 35 / 45) support_bottom_distance = =support_z_distance support_z_distance = =layer_height wall_0_inset = 0 - -material_bed_temperature_layer_0 = 115 -default_material_bed_temperature = 105 -prime_blob_enable = False -layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_High_Quality.inst.cfg similarity index 85% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_High_Quality.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_High_Quality.inst.cfg index 44235b30eb..e06e5b7a08 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_High_Quality.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Extra Fine -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 material = generic_cpe_plus variant = AA 0.4 -buildplate = Aluminum [values] acceleration_enabled = True @@ -38,7 +37,7 @@ retraction_hop = 0.2 retraction_hop_enabled = False retraction_hop_only_when_collides = True skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 40) speed_print = 40 speed_topbottom = =math.ceil(speed_print * 30 / 35) @@ -47,9 +46,3 @@ speed_wall_0 = =math.ceil(speed_wall * 30 / 35) support_bottom_distance = =support_z_distance support_z_distance = =layer_height wall_0_inset = 0 - -material_bed_temperature_layer_0 = 115 -default_material_bed_temperature = 105 -prime_blob_enable = False -layer_height_0 = 0.17 - diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Normal_Quality.inst.cfg similarity index 85% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Normal_Quality.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Normal_Quality.inst.cfg index a0b5af8679..4f0e371ded 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPEP_Normal_Quality.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Fine -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 material = generic_cpe_plus variant = AA 0.4 -buildplate = Aluminum [values] acceleration_enabled = True @@ -38,7 +37,7 @@ retraction_hop = 0.2 retraction_hop_enabled = False retraction_hop_only_when_collides = True skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 40) speed_print = 40 speed_topbottom = =math.ceil(speed_print * 30 / 35) @@ -47,8 +46,3 @@ speed_wall_0 = =math.ceil(speed_wall * 30 / 35) support_bottom_distance = =support_z_distance support_z_distance = =layer_height wall_0_inset = 0 - -material_bed_temperature_layer_0 = 115 -default_material_bed_temperature = 105 -prime_blob_enable = False -layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Draft_Print.inst.cfg similarity index 75% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Draft_Print.inst.cfg index 52f22f807f..97d34cdb88 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Draft_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Fast -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 material = generic_cpe variant = AA 0.4 -buildplate = Aluminum [values] material_print_temperature = =default_material_print_temperature + 10 @@ -19,7 +18,7 @@ material_final_print_temperature = =material_print_temperature - 10 retraction_combing_max_distance = 50 skin_overlap = 20 speed_print = 60 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 60) speed_topbottom = =math.ceil(speed_print * 35 / 60) speed_wall = =math.ceil(speed_print * 45 / 60) speed_wall_0 = =math.ceil(speed_wall * 35 / 45) @@ -28,8 +27,3 @@ wall_thickness = 1 infill_pattern = triangles speed_infill = =math.ceil(speed_print * 50 / 60) - -material_bed_temperature_layer_0 = 90 -default_material_bed_temperature = 80 -prime_blob_enable = False -layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Fast_Print.inst.cfg similarity index 69% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Fast_Print.inst.cfg index 117a9e0273..1949a0f410 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Fast_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Normal -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 material = generic_cpe variant = AA 0.4 -buildplate = Aluminum [values] cool_min_speed = 7 @@ -19,15 +18,10 @@ material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 retraction_combing_max_distance = 50 speed_print = 60 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 60) speed_topbottom = =math.ceil(speed_print * 30 / 60) speed_wall = =math.ceil(speed_print * 40 / 60) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) infill_pattern = triangles -speed_infill = =math.ceil(speed_print * 50 / 60) - -material_bed_temperature_layer_0 = 90 -default_material_bed_temperature = 80 -prime_blob_enable = False -layer_height_0 = 0.17 +speed_infill = =math.ceil(speed_print * 50 / 60) \ No newline at end of file diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_High_Quality.inst.cfg similarity index 70% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_High_Quality.inst.cfg index d25ab9f605..eb079b5852 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_High_Quality.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Extra Fine -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 material = generic_cpe variant = AA 0.4 -buildplate = Aluminum [values] cool_min_speed = 12 @@ -21,14 +20,9 @@ material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 retraction_combing_max_distance = 50 speed_print = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 50) speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 30 / 50) infill_pattern = triangles -speed_infill = =math.ceil(speed_print * 40 / 50) - -material_bed_temperature_layer_0 = 90 -default_material_bed_temperature = 80 -prime_blob_enable = False -layer_height_0 = 0.17 +speed_infill = =math.ceil(speed_print * 40 / 50) \ No newline at end of file diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Normal_Quality.inst.cfg similarity index 67% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Normal_Quality.inst.cfg index bafc867d14..3c308a5738 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_CPE_Normal_Quality.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Fine -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 material = generic_cpe variant = AA 0.4 -buildplate = Aluminum [values] machine_nozzle_cool_down_speed = 0.85 @@ -19,14 +18,9 @@ material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 retraction_combing_max_distance = 50 speed_print = 55 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 55) speed_topbottom = =math.ceil(speed_print * 30 / 55) speed_wall = =math.ceil(speed_print * 30 / 55) infill_pattern = triangles -speed_infill = =math.ceil(speed_print * 45 / 55) - -material_bed_temperature_layer_0 = 90 -default_material_bed_temperature = 80 -prime_blob_enable = False -layer_height_0 = 0.17 +speed_infill = =math.ceil(speed_print * 45 / 55) \ No newline at end of file diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Draft_Print.inst.cfg new file mode 100644 index 0000000000..20f4a810a2 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Draft_Print.inst.cfg @@ -0,0 +1,38 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_nylon +variant = AA 0.4 + +[values] +adhesion_type = brim +cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 10 +infill_line_width = =round(line_width * 0.5 / 0.4, 2) +line_width = =machine_nozzle_size +material_print_temperature = =default_material_print_temperature + 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_final_print_temperature = =material_print_temperature - 10 +material_standby_temperature = 100 +ooze_shield_angle = 40 +raft_acceleration = =acceleration_layer_0 +raft_airgap = =round(layer_height_0 * 0.85, 2) +raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) +raft_jerk = =jerk_layer_0 +raft_margin = 10 +raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +skin_overlap = 50 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) +switch_extruder_prime_speed = 30 +switch_extruder_retraction_amount = 30 +switch_extruder_retraction_speeds = 40 +wall_line_width_x = =wall_line_width + +jerk_travel = 50 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Fast_Print.inst.cfg new file mode 100644 index 0000000000..ae6d1235dd --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Fast_Print.inst.cfg @@ -0,0 +1,38 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -1 +material = generic_nylon +variant = AA 0.4 + +[values] +adhesion_type = brim +cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 10 +infill_line_width = =round(line_width * 0.5 / 0.4, 2) +line_width = =machine_nozzle_size +material_print_temperature = =default_material_print_temperature + 5 +material_initial_print_temperature = =material_print_temperature - 5 +material_final_print_temperature = =material_print_temperature - 10 +material_standby_temperature = 100 +ooze_shield_angle = 40 +raft_acceleration = =acceleration_layer_0 +raft_airgap = =round(layer_height_0 * 0.85, 2) +raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) +raft_jerk = =jerk_layer_0 +raft_margin = 10 +raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +skin_overlap = 50 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) +switch_extruder_prime_speed = 30 +switch_extruder_retraction_amount = 30 +switch_extruder_retraction_speeds = 40 +wall_line_width_x = =wall_line_width + +jerk_travel = 50 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_High_Quality.inst.cfg new file mode 100644 index 0000000000..1ce5a8b20f --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_High_Quality.inst.cfg @@ -0,0 +1,37 @@ +[general] +version = 4 +name = Extra Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = generic_nylon +variant = AA 0.4 + +[values] +adhesion_type = brim +cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 15 +infill_line_width = =round(line_width * 0.5 / 0.4, 2) +line_width = =machine_nozzle_size +material_initial_print_temperature = =material_print_temperature - 5 +material_final_print_temperature = =material_print_temperature - 10 +material_standby_temperature = 100 +ooze_shield_angle = 40 +raft_acceleration = =acceleration_layer_0 +raft_airgap = =round(layer_height_0 * 0.85, 2) +raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) +raft_jerk = =jerk_layer_0 +raft_margin = 10 +raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +skin_overlap = 50 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) +switch_extruder_prime_speed = 30 +switch_extruder_retraction_amount = 30 +switch_extruder_retraction_speeds = 40 +wall_line_width_x = =wall_line_width + +jerk_travel = 50 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..cacdab09aa --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_Nylon_Normal_Quality.inst.cfg @@ -0,0 +1,37 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_nylon +variant = AA 0.4 + +[values] +adhesion_type = brim +cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 12 +infill_line_width = =round(line_width * 0.5 / 0.4, 2) +line_width = =machine_nozzle_size +material_initial_print_temperature = =material_print_temperature - 5 +material_final_print_temperature = =material_print_temperature - 10 +material_standby_temperature = 100 +ooze_shield_angle = 40 +raft_acceleration = =acceleration_layer_0 +raft_airgap = =round(layer_height_0 * 0.85, 2) +raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) +raft_jerk = =jerk_layer_0 +raft_margin = 10 +raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +skin_overlap = 50 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) +switch_extruder_prime_speed = 30 +switch_extruder_retraction_amount = 30 +switch_extruder_retraction_speeds = 40 +wall_line_width_x = =wall_line_width + +jerk_travel = 50 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Draft_Print.inst.cfg similarity index 87% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Draft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Draft_Print.inst.cfg index ddaef82dcc..7a2f19146a 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Draft_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Fast -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 material = generic_pc variant = AA 0.4 -buildplate = Aluminum [values] acceleration_enabled = True @@ -48,9 +47,9 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) support_bottom_distance = =support_z_distance @@ -62,8 +61,3 @@ switch_extruder_retraction_speeds = 35 wall_0_inset = 0 wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) wall_thickness = 1.2 - -material_bed_temperature_layer_0 = 125 -default_material_bed_temperature = 115 -prime_blob_enable = False -layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Fast_Print.inst.cfg similarity index 87% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Fast_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Fast_Print.inst.cfg index 5c85a32af0..b3157b6b5c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Fast_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Normal -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 material = generic_pc variant = AA 0.4 -buildplate = Aluminum [values] acceleration_enabled = True @@ -47,9 +46,9 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) @@ -62,8 +61,3 @@ switch_extruder_retraction_speeds = 35 wall_0_inset = 0 wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) wall_thickness = 1.2 - -material_bed_temperature_layer_0 = 125 -default_material_bed_temperature = 115 -prime_blob_enable = False -layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_High_Quality.inst.cfg similarity index 87% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_High_Quality.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_PC_High_Quality.inst.cfg index dbeed2dfe9..febe2623af 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_High_Quality.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Extra Fine -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 material = generic_pc variant = AA 0.4 -buildplate = Aluminum [values] acceleration_enabled = True @@ -48,9 +47,9 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) @@ -63,8 +62,3 @@ switch_extruder_retraction_speeds = 35 wall_0_inset = 0 wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) wall_thickness = 1.2 - -material_bed_temperature_layer_0 = 125 -default_material_bed_temperature = 115 -prime_blob_enable = False -layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Normal_Quality.inst.cfg similarity index 87% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Normal_Quality.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Normal_Quality.inst.cfg index 3694db3f76..6dc88356d5 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PC_Normal_Quality.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Fine -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 material = generic_pc variant = AA 0.4 -buildplate = Aluminum [values] acceleration_enabled = True @@ -46,9 +45,9 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) @@ -61,8 +60,3 @@ switch_extruder_retraction_speeds = 35 wall_0_inset = 0 wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) wall_thickness = 1.2 - -material_bed_temperature_layer_0 = 125 -default_material_bed_temperature = 115 -prime_blob_enable = False -layer_height_0 = 0.17 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Draft_Print.inst.cfg new file mode 100644 index 0000000000..8d997b8edf --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Draft_Print.inst.cfg @@ -0,0 +1,35 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_pla +variant = AA 0.4 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_print_temperature = =default_material_print_temperature + 5 +material_standby_temperature = 100 +prime_tower_enable = False +skin_overlap = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) +speed_topbottom = =math.ceil(speed_print * 40 / 70) +speed_wall = =math.ceil(speed_print * 55 / 70) +speed_wall_0 = =math.ceil(speed_wall * 45 / 50) +top_bottom_thickness = 0.8 +wall_thickness = 0.8 + +jerk_travel = 50 +infill_line_width = =round(line_width * 0.42 / 0.35, 2) +infill_sparse_density = 15 +layer_height_0 = 0.2 +acceleration_wall = 2000 +acceleration_wall_0 = 2000 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Fast_Print.inst.cfg new file mode 100644 index 0000000000..96b243081d --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Fast_Print.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -1 +material = generic_pla +variant = AA 0.4 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_standby_temperature = 100 +prime_tower_enable = False +speed_print = 70 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) +speed_topbottom = =math.ceil(speed_print * 35 / 70) +speed_wall = =math.ceil(speed_print * 45 / 70) +speed_wall_0 = =math.ceil(speed_wall * 35 / 70) +top_bottom_thickness = 1 +wall_thickness = 1 + +jerk_travel = 50 +infill_line_width = =round(line_width * 0.42 / 0.35, 2) +layer_height_0 = 0.2 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_High_Quality.inst.cfg new file mode 100644 index 0000000000..6885abae9b --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_High_Quality.inst.cfg @@ -0,0 +1,33 @@ +[general] +version = 4 +name = Extra Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = generic_pla +variant = AA 0.4 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +cool_min_speed = 10 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_print_temperature = =default_material_print_temperature - 5 +material_standby_temperature = 100 +prime_tower_enable = False +skin_overlap = 10 +speed_print = 50 +speed_layer_0 = =math.ceil(speed_print * 20 / 50) +speed_topbottom = =math.ceil(speed_print * 35 / 50) +speed_wall = =math.ceil(speed_print * 35 / 50) +top_bottom_thickness = 1 +wall_thickness = 1 + +jerk_travel = 50 +infill_line_width = =round(line_width * 0.42 / 0.35, 2) +layer_height_0 = 0.2 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..96747f5f0d --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PLA_Normal_Quality.inst.cfg @@ -0,0 +1,29 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_pla +variant = AA 0.4 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +cool_min_speed = 7 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_standby_temperature = 100 +prime_tower_enable = False +skin_overlap = 10 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) +top_bottom_thickness = 1 +wall_thickness = 1 + +jerk_travel = 50 +infill_line_width = =round(line_width * 0.42 / 0.35, 2) +layer_height_0 = 0.2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Draft_Print.inst.cfg similarity index 90% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Draft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Draft_Print.inst.cfg index f50c38f892..38aee9a05d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Draft_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Fast -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 material = generic_pp variant = AA 0.4 -buildplate = Aluminum [values] acceleration_enabled = True @@ -30,7 +29,7 @@ line_width = =machine_nozzle_size * 0.95 machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature_layer_0 = =material_bed_temperature +material_bed_temperature_layer_0 = =material_bed_temperature + 5 material_final_print_temperature = =material_print_temperature - 10 material_initial_print_temperature = =material_print_temperature - 5 material_print_temperature = =default_material_print_temperature - 5 @@ -48,7 +47,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 18 speed_equalize_flow_enabled = True -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) speed_travel_layer_0 = 50 @@ -61,5 +60,3 @@ switch_extruder_retraction_speeds = 35 wall_0_inset = 0 wall_line_width_x = =line_width wall_thickness = =line_width * 3 - -default_material_bed_temperature = 95 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Fast_Print.inst.cfg similarity index 90% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Fast_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Fast_Print.inst.cfg index 8f07b2a6a9..521d24ec8b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Fast_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Normal -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 material = generic_pp variant = AA 0.4 -buildplate = Aluminum [values] acceleration_enabled = True @@ -30,7 +29,7 @@ line_width = =machine_nozzle_size * 0.95 machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature_layer_0 = =material_bed_temperature +material_bed_temperature_layer_0 = =material_bed_temperature + 5 material_final_print_temperature = =material_print_temperature - 12 material_initial_print_temperature = =material_print_temperature - 2 material_print_temperature = =default_material_print_temperature - 13 @@ -48,7 +47,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 18 speed_equalize_flow_enabled = True -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) @@ -63,5 +62,3 @@ top_bottom_thickness = 1.1 wall_0_inset = 0 wall_line_width_x = =line_width wall_thickness = =line_width * 3 - -default_material_bed_temperature = 95 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Normal_Quality.inst.cfg similarity index 90% rename from resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Normal_Quality.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Normal_Quality.inst.cfg index 440d8cbfe6..45212bfc28 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_PP_Normal_Quality.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Fine -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 material = generic_pp variant = AA 0.4 -buildplate = Aluminum [values] acceleration_enabled = True @@ -30,7 +29,7 @@ line_width = =machine_nozzle_size * 0.95 machine_min_cool_heat_time_window = 15 machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 -material_bed_temperature_layer_0 = =material_bed_temperature +material_bed_temperature_layer_0 = =material_bed_temperature + 5 material_final_print_temperature = =material_print_temperature - 10 material_initial_print_temperature = =material_print_temperature - 5 material_print_temperature = =default_material_print_temperature - 15 @@ -48,7 +47,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 18 speed_equalize_flow_enabled = True -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) @@ -63,6 +62,3 @@ top_bottom_thickness = 1 wall_0_inset = 0 wall_line_width_x = =line_width wall_thickness = =line_width * 3 - -default_material_bed_temperature = 95 - diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Draft_Print.inst.cfg new file mode 100644 index 0000000000..bb04c3f173 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Draft_Print.inst.cfg @@ -0,0 +1,38 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_tough_pla +variant = AA 0.4 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +cool_min_speed = 7 +infill_line_width = =round(line_width * 0.45/0.35,2) +jerk_print = 25 +jerk_roofing = 1 +layer_height_0 = 0.2 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_print_temperature = =default_material_print_temperature -10 +material_standby_temperature = 100 +prime_tower_enable = False +roofing_layer_count = 2 +skin_outline_count = 0 +skin_overlap = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 50) +speed_print = 50 +speed_roofing = =math.ceil(speed_wall * 20 / 24) +speed_topbottom = =math.ceil(speed_print * 25 / 50) +speed_wall = =math.ceil(speed_print * 36 / 50) +speed_wall_0 = =math.ceil(speed_print * 26 / 50) +top_bottom_thickness = 1.2 +wall_line_width_x = =round(line_width * 0.35/0.35,2) +wall_thickness = 1.2 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Fast_Print.inst.cfg new file mode 100644 index 0000000000..0d391c8406 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Fast_Print.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -1 +material = generic_tough_pla +variant = AA 0.4 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +infill_line_width = =round(line_width * 1.285, 2) +layer_height_0 = 0.2 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_print_temperature = =default_material_print_temperature -10 +material_standby_temperature = 100 +prime_tower_enable = False +speed_layer_0 = =math.ceil(speed_print * 20 / 45) +speed_print = 45 +speed_topbottom = =math.ceil(speed_print * 35 / 45) +speed_wall = =math.ceil(speed_print * 40 / 45) +speed_wall_0 = =math.ceil(speed_wall * 35 / 45) +top_bottom_thickness = 1.2 +wall_line_width_x = =round(line_width * 0.35/0.35,2) +wall_thickness = 1.23 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_High_Quality.inst.cfg new file mode 100644 index 0000000000..c1c465389f --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_High_Quality.inst.cfg @@ -0,0 +1,36 @@ +[general] +version = 4 +name = Extra Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = generic_tough_pla +variant = AA 0.4 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +cool_min_speed = 10 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_print_temperature = =default_material_print_temperature - 15 +material_standby_temperature = 100 +prime_tower_enable = False +skin_overlap = 10 +speed_print = 45 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) +speed_topbottom = =math.ceil(speed_print * 35 / 45) +speed_wall = =math.ceil(speed_print * 40 / 45) +speed_wall_0 = =math.ceil(speed_wall * 35 / 45) +top_bottom_thickness = 1.2 +wall_thickness = 1.23 + +layer_height_0 = 0.2 + +line_width = =round(machine_nozzle_size * 1.025, 3) +wall_line_width_x = =line_width +infill_line_width = =line_width diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..52551f620c --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPLA_Normal_Quality.inst.cfg @@ -0,0 +1,33 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_tough_pla +variant = AA 0.4 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =cool_fan_speed +cool_min_speed = 7 +infill_line_width = =round(line_width * 1.285, 2) +layer_height_0 = 0.2 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_print_temperature = =default_material_print_temperature - 15 +material_standby_temperature = 100 +prime_tower_enable = False +skin_overlap = 10 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) +speed_print = 45 +speed_topbottom = =math.ceil(speed_print * 35 / 45) +speed_wall = =math.ceil(speed_print * 40 / 45) +speed_wall_0 = =math.ceil(speed_wall * 35 / 45) +top_bottom_thickness = 1.2 +wall_thickness = 1.23 + diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Draft_Print.inst.cfg new file mode 100644 index 0000000000..f97942a9a9 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Draft_Print.inst.cfg @@ -0,0 +1,63 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_tpu +variant = AA 0.4 + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 8.75 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 6 +cool_min_speed = 4 +gradual_infill_step_height = =5 * layer_height +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_overlap = 0 +infill_pattern = cross_3d +infill_sparse_density = 10 +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +line_width = =machine_nozzle_size * 0.95 +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.5 +machine_nozzle_heat_up_speed = 2.5 +material_final_print_temperature = =material_print_temperature +material_flow = 106 +material_initial_print_temperature = =material_print_temperature +material_print_temperature = =default_material_print_temperature + 2 +material_print_temperature_layer_0 = =material_print_temperature + 15 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_wipe_enabled = True +retraction_count_max = 12 +retraction_extra_prime_amount = 0.8 +retraction_extrusion_window = 1 +retraction_hop_only_when_collides = True +retraction_min_travel = =line_width * 2 +retraction_prime_speed = 15 +skin_overlap = 5 +speed_equalize_flow_enabled = True +speed_layer_0 = =math.ceil(speed_print * 18 / 25) +speed_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 25) + +speed_wall = =math.ceil(speed_print * 25 / 25) +speed_wall_0 = =math.ceil(speed_wall * 25 / 25) +support_angle = 50 +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +top_bottom_thickness = 0.7 +travel_avoid_distance = 1.5 +wall_0_inset = 0 +wall_line_width_x = =line_width +wall_thickness = 0.76 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Fast_Print.inst.cfg new file mode 100644 index 0000000000..e068ab78cc --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Fast_Print.inst.cfg @@ -0,0 +1,64 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -1 +material = generic_tpu +variant = AA 0.4 + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 8.75 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 6 +cool_min_speed = 4 +gradual_infill_step_height = =5 * layer_height +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_overlap = 0 +infill_pattern = cross_3d +infill_sparse_density = 10 +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +line_width = =machine_nozzle_size * 0.95 +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.5 +machine_nozzle_heat_up_speed = 2.5 +material_final_print_temperature = =material_print_temperature +material_flow = 106 +material_initial_print_temperature = =material_print_temperature +material_print_temperature = =default_material_print_temperature + 2 +material_print_temperature_layer_0 = =material_print_temperature + 15 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_wipe_enabled = True +retraction_count_max = 12 +retraction_extra_prime_amount = 0.8 +retraction_extrusion_window = 1 +retraction_hop_only_when_collides = True +retraction_min_travel = =line_width * 2 +retraction_prime_speed = 15 +skin_overlap = 5 +speed_equalize_flow_enabled = True +speed_layer_0 = =math.ceil(speed_print * 18 / 25) +speed_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 25) + +speed_wall = =math.ceil(speed_print * 25 / 25) +speed_wall_0 = =math.ceil(speed_wall * 25 / 25) +support_angle = 50 +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +top_bottom_thickness = 0.7 +travel_avoid_distance = 1.5 +wall_0_inset = 0 +wall_line_width_x = =line_width +wall_thickness = 0.76 + diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..66b99612ed --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.4_TPU_Normal_Quality.inst.cfg @@ -0,0 +1,63 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_tpu +variant = AA 0.4 + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 8.75 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 6 +cool_min_speed = 4 +gradual_infill_step_height = =5 * layer_height +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_overlap = 0 +infill_pattern = cross_3d +infill_sparse_density = 10 +infill_wipe_dist = 0.1 +jerk_enabled = True +jerk_print = 25 +line_width = =machine_nozzle_size * 0.95 +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.5 +machine_nozzle_heat_up_speed = 2.5 +material_final_print_temperature = =material_print_temperature +material_flow = 106 +material_initial_print_temperature = =material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 17 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_wipe_enabled = True +retraction_count_max = 12 +retraction_extra_prime_amount = 0.8 +retraction_extrusion_window = 1 +retraction_hop_only_when_collides = True +retraction_min_travel = =line_width * 2 +retraction_prime_speed = 15 +skin_overlap = 5 +speed_equalize_flow_enabled = True +speed_layer_0 = =math.ceil(speed_print * 18 / 25) +speed_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 25) + +speed_wall = =math.ceil(speed_print * 25 / 25) +speed_wall_0 = =math.ceil(speed_wall * 25 / 25) +support_angle = 50 +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 35 +top_bottom_thickness = 0.7 +travel_avoid_distance = 1.5 +wall_0_inset = 0 +wall_line_width_x = =line_width +wall_thickness = 0.76 + diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_ABS_Draft_Print.inst.cfg similarity index 71% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_ABS_Draft_Print.inst.cfg index e0dd599317..4ff8929f24 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_ABS_Draft_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Fast -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 material = generic_abs variant = AA 0.8 -buildplate = Aluminum [values] line_width = =machine_nozzle_size * 0.875 @@ -21,8 +20,3 @@ speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) retract_at_layer_change = False - -material_bed_temperature_layer_0 = 100 -default_material_bed_temperature = 90 -prime_blob_enable = False -layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_ABS_Superdraft_Print.inst.cfg similarity index 71% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Superdraft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_ABS_Superdraft_Print.inst.cfg index 0ca1b63c0b..db90eb75eb 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_ABS_Superdraft_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Sprint -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 material = generic_abs variant = AA 0.8 -buildplate = Aluminum [values] line_width = =machine_nozzle_size * 0.875 @@ -21,8 +20,3 @@ speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) retract_at_layer_change = False - -material_bed_temperature_layer_0 = 100 -default_material_bed_temperature = 90 -prime_blob_enable = False -layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_ABS_Verydraft_Print.inst.cfg similarity index 72% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Verydraft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_ABS_Verydraft_Print.inst.cfg index 1611c3fedd..087506c91d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_ABS_Verydraft_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Extra Fast -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 material = generic_abs variant = AA 0.8 -buildplate = Aluminum [values] line_width = =machine_nozzle_size * 0.875 @@ -21,8 +20,3 @@ speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) retract_at_layer_change = False - -material_bed_temperature_layer_0 = 100 -default_material_bed_temperature = 90 -prime_blob_enable = False -layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_CPEP_Fast_Print.inst.cfg similarity index 83% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_CPEP_Fast_Print.inst.cfg index 6b0f12f8dc..23d4727604 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_CPEP_Fast_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Fast - Experimental -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 material = generic_cpe_plus variant = AA 0.8 -buildplate = Aluminum is_experimental = True [values] @@ -28,7 +27,7 @@ retraction_combing_max_distance = 50 retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 15 speed_topbottom = =math.ceil(speed_print * 35 / 50) @@ -38,8 +37,3 @@ support_bottom_distance = =support_z_distance support_line_width = =round(line_width * 0.6 / 0.7, 2) support_z_distance = =layer_height top_bottom_thickness = 1.2 - -material_bed_temperature_layer_0 = 115 -default_material_bed_temperature = 105 -prime_blob_enable = False -layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_CPEP_Superdraft_Print.inst.cfg similarity index 81% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_CPEP_Superdraft_Print.inst.cfg index 78ad1f6eac..e987d0b55d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_CPEP_Superdraft_Print.inst.cfg @@ -1,16 +1,16 @@ [general] version = 4 -name = Sprint -definition = ultimaker_s5 +name = Sprint - Experimental +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 material = generic_cpe_plus variant = AA 0.8 -buildplate = Aluminum +is_experimental = True [values] brim_width = 14 @@ -27,7 +27,7 @@ retraction_combing_max_distance = 50 retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 8 speed_topbottom = =math.ceil(speed_print * 35 / 50) @@ -37,8 +37,3 @@ support_bottom_distance = =support_z_distance support_line_width = =round(line_width * 0.6 / 0.7, 2) support_z_distance = =layer_height top_bottom_thickness = 1.2 - -material_bed_temperature_layer_0 = 115 -default_material_bed_temperature = 105 -prime_blob_enable = False -layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_CPEP_Verydraft_Print.inst.cfg similarity index 81% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_CPEP_Verydraft_Print.inst.cfg index 7be2cdbcc8..2dd2219d42 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_CPEP_Verydraft_Print.inst.cfg @@ -1,16 +1,16 @@ [general] version = 4 -name = Extra Fast -definition = ultimaker_s5 +name = Extra Fast - Experimental +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 material = generic_cpe_plus variant = AA 0.8 -buildplate = Aluminum +is_experimental = True [values] brim_width = 14 @@ -27,7 +27,7 @@ retraction_combing_max_distance = 50 retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 10 speed_topbottom = =math.ceil(speed_print * 35 / 50) @@ -37,8 +37,3 @@ support_bottom_distance = =support_z_distance support_line_width = =round(line_width * 0.6 / 0.7, 2) support_z_distance = =layer_height top_bottom_thickness = 1.2 - -material_bed_temperature_layer_0 = 115 -default_material_bed_temperature = 105 -prime_blob_enable = False -layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_CPE_Draft_Print.inst.cfg similarity index 69% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_CPE_Draft_Print.inst.cfg index 67132b67fc..a4e20f0054 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_CPE_Draft_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Fast -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 material = generic_cpe variant = AA 0.8 -buildplate = Aluminum [values] brim_width = 15 @@ -23,9 +22,4 @@ speed_print = 40 speed_topbottom = =math.ceil(speed_print * 25 / 40) speed_wall = =math.ceil(speed_print * 30 / 40) -jerk_travel = 50 - -material_bed_temperature_layer_0 = 90 -default_material_bed_temperature = 80 -prime_blob_enable = False -layer_height_0 = 0.3 +jerk_travel = 50 \ No newline at end of file diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_CPE_Superdraft_Print.inst.cfg similarity index 72% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_CPE_Superdraft_Print.inst.cfg index 49e70af112..9e6a0a2e04 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_CPE_Superdraft_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Sprint -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 material = generic_cpe variant = AA 0.8 -buildplate = Aluminum [values] brim_width = 15 @@ -24,9 +23,4 @@ speed_topbottom = =math.ceil(speed_print * 30 / 45) speed_wall = =math.ceil(speed_print * 40 / 45) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) -jerk_travel = 50 - -material_bed_temperature_layer_0 = 90 -default_material_bed_temperature = 80 -prime_blob_enable = False -layer_height_0 = 0.3 +jerk_travel = 50 \ No newline at end of file diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_CPE_Verydraft_Print.inst.cfg similarity index 72% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_CPE_Verydraft_Print.inst.cfg index 9d781092b1..ce5e9afcd1 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_CPE_Verydraft_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Extra Fast -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 material = generic_cpe variant = AA 0.8 -buildplate = Aluminum [values] brim_width = 15 @@ -24,8 +23,3 @@ speed_topbottom = =math.ceil(speed_print * 25 / 40) speed_wall = =math.ceil(speed_print * 30 / 40) jerk_travel = 50 - -material_bed_temperature_layer_0 = 90 -default_material_bed_temperature = 80 -prime_blob_enable = False -layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_Nylon_Draft_Print.inst.cfg new file mode 100644 index 0000000000..4eecc8a625 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_Nylon_Draft_Print.inst.cfg @@ -0,0 +1,35 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_nylon +variant = AA 0.8 + +[values] +brim_width = 5.6 +cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 10 +infill_before_walls = True +infill_line_width = =line_width +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 1.4 +material_standby_temperature = 100 +ooze_shield_angle = 40 +prime_tower_enable = True +raft_acceleration = =acceleration_layer_0 +raft_airgap = =round(layer_height_0 * 0.85, 2) +raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) +raft_margin = 10 +raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 +switch_extruder_prime_speed = 30 +switch_extruder_retraction_amount = 30 +switch_extruder_retraction_speeds = 40 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_Nylon_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..1bbf002989 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_Nylon_Superdraft_Print.inst.cfg @@ -0,0 +1,35 @@ +[general] +version = 4 +name = Sprint +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = superdraft +weight = -4 +material = generic_nylon +variant = AA 0.8 + +[values] +brim_width = 5.6 +cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 10 +infill_before_walls = True +infill_line_width = =line_width +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 1.4 +material_standby_temperature = 100 +ooze_shield_angle = 40 +prime_tower_enable = True +raft_acceleration = =acceleration_layer_0 +raft_airgap = =round(layer_height_0 * 0.85, 2) +raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) +raft_margin = 10 +raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 +switch_extruder_prime_speed = 30 +switch_extruder_retraction_amount = 30 +switch_extruder_retraction_speeds = 40 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_Nylon_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_Nylon_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..037ef0c808 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_Nylon_Verydraft_Print.inst.cfg @@ -0,0 +1,35 @@ +[general] +version = 4 +name = Extra Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = verydraft +weight = -3 +material = generic_nylon +variant = AA 0.8 + +[values] +brim_width = 5.6 +cool_min_layer_time_fan_speed_max = 20 +cool_min_speed = 10 +infill_before_walls = True +infill_line_width = =line_width +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 1.4 +material_standby_temperature = 100 +ooze_shield_angle = 40 +prime_tower_enable = True +raft_acceleration = =acceleration_layer_0 +raft_airgap = =round(layer_height_0 * 0.85, 2) +raft_interface_thickness = =round(machine_nozzle_size * 0.3 / 0.4, 2) +raft_margin = 10 +raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 +switch_extruder_prime_speed = 30 +switch_extruder_retraction_amount = 30 +switch_extruder_retraction_speeds = 40 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_PC_Fast_Print.inst.cfg similarity index 77% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_PC_Fast_Print.inst.cfg index 04170b3ba2..acd9bdc98a 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_PC_Fast_Print.inst.cfg @@ -1,20 +1,19 @@ [general] version = 4 name = Fast - Experimental -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 material = generic_pc variant = AA 0.8 -buildplate = Aluminum is_experimental = True [values] -brim_width = 10 +brim_width = 14 cool_fan_full_at_height = =layer_height_0 + 14 * layer_height infill_before_walls = True line_width = =machine_nozzle_size * 0.875 @@ -24,15 +23,10 @@ material_standby_temperature = 100 raft_airgap = 0.5 raft_margin = 15 skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 15 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) support_line_width = =round(line_width * 0.6 / 0.7, 2) - -material_bed_temperature_layer_0 = 125 -default_material_bed_temperature = 115 -prime_blob_enable = False -layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_PC_Superdraft_Print.inst.cfg similarity index 73% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_PC_Superdraft_Print.inst.cfg index 90b7afdb8d..e8cc341b36 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_PC_Superdraft_Print.inst.cfg @@ -1,19 +1,19 @@ [general] version = 4 -name = Sprint -definition = ultimaker_s5 +name = Sprint - Experimental +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 material = generic_pc variant = AA 0.8 -buildplate = Aluminum +is_experimental = True [values] -brim_width = 10 +brim_width = 14 cool_fan_full_at_height = =layer_height_0 + 7 * layer_height infill_before_walls = True line_width = =machine_nozzle_size * 0.875 @@ -22,15 +22,10 @@ material_standby_temperature = 100 raft_airgap = 0.5 raft_margin = 15 skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 8 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) support_line_width = =round(line_width * 0.6 / 0.7, 2) - -material_bed_temperature_layer_0 = 125 -default_material_bed_temperature = 115 -prime_blob_enable = False -layer_height_0 = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_PC_Verydraft_Print.inst.cfg similarity index 74% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_PC_Verydraft_Print.inst.cfg index f9b93eac37..9c02969944 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_PC_Verydraft_Print.inst.cfg @@ -1,19 +1,19 @@ [general] version = 4 -name = Extra Fast -definition = ultimaker_s5 +name = Extra Fast - Experimental +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 material = generic_pc variant = AA 0.8 -buildplate = Aluminum +is_experimental = True [values] -brim_width = 10 +brim_width = 14 cool_fan_full_at_height = =layer_height_0 + 9 * layer_height infill_before_walls = True line_width = =machine_nozzle_size * 0.875 @@ -23,16 +23,10 @@ material_standby_temperature = 100 raft_airgap = 0.5 raft_margin = 15 skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 10 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) support_line_width = =round(line_width * 0.6 / 0.7, 2) - -material_bed_temperature_layer_0 = 125 -default_material_bed_temperature = 115 -prime_blob_enable = False -layer_height_0 = 0.3 - diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_PLA_Draft_Print.inst.cfg new file mode 100644 index 0000000000..eb2cb3910c --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_PLA_Draft_Print.inst.cfg @@ -0,0 +1,42 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_pla +variant = AA 0.8 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =100 +cool_min_speed = 2 +gradual_infill_step_height = =3 * layer_height +infill_line_width = =round(line_width * 0.65 / 0.75, 2) +line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_final_print_temperature = =max(-273.15, material_print_temperature - 15) +material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) +material_print_temperature = =default_material_print_temperature + 10 +prime_tower_enable = True +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 +top_bottom_thickness = =layer_height * 4 +wall_line_width = =round(line_width * 0.75 / 0.75, 2) +wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) +wall_thickness = =wall_line_width_0 + wall_line_width_x + +retract_at_layer_change = False +speed_print = 45 +speed_topbottom = =math.ceil(speed_print * 35 / 45) +speed_wall = =math.ceil(speed_print * 40 / 45) +speed_wall_x = =speed_wall +speed_wall_0 = =math.ceil(speed_wall * 35 / 40) +infill_sparse_density = 15 +layer_height_0 = 0.4 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_PLA_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..7214f0d404 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_PLA_Superdraft_Print.inst.cfg @@ -0,0 +1,42 @@ +[general] +version = 4 +name = Sprint +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = superdraft +weight = -4 +material = generic_pla +variant = AA 0.8 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =100 +cool_min_speed = 2 +gradual_infill_step_height = =3 * layer_height +infill_line_width = =round(line_width * 0.65 / 0.75, 2) +line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_final_print_temperature = =max(-273.15, material_print_temperature - 15) +material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) +material_print_temperature = =default_material_print_temperature + 15 +prime_tower_enable = True +raft_margin = 10 +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 +top_bottom_thickness = =layer_height * 4 +wall_line_width = =round(line_width * 0.75 / 0.75, 2) +wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) +wall_thickness = =wall_line_width_0 + wall_line_width_x +retract_at_layer_change = False +speed_print = 45 +speed_topbottom = =math.ceil(speed_print * 35 / 45) +speed_wall = =math.ceil(speed_print * 40 / 45) +speed_wall_x = =speed_wall +speed_wall_0 = =math.ceil(speed_wall * 35 / 40) +infill_sparse_density = 15 +layer_height_0 = 0.4 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_PLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_PLA_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..e7e53f400d --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_PLA_Verydraft_Print.inst.cfg @@ -0,0 +1,41 @@ +[general] +version = 4 +name = Extra Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = verydraft +weight = -3 +material = generic_pla +variant = AA 0.8 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =100 +cool_min_speed = 2 +gradual_infill_step_height = =3 * layer_height +infill_line_width = =round(line_width * 0.65 / 0.75, 2) +line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_final_print_temperature = =max(-273.15, material_print_temperature - 15) +material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) +material_print_temperature = =default_material_print_temperature + 10 +prime_tower_enable = True +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 +top_bottom_thickness = =layer_height * 4 +wall_line_width = =round(line_width * 0.75 / 0.75, 2) +wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) +wall_thickness = =wall_line_width_0 + wall_line_width_x +retract_at_layer_change = False +speed_print = 45 +speed_topbottom = =math.ceil(speed_print * 35 / 45) +speed_wall = =math.ceil(speed_print * 40 / 45) +speed_wall_x = =speed_wall +speed_wall_0 = =math.ceil(speed_wall * 35 / 40) +infill_sparse_density = 15 +layer_height_0 = 0.4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_PP_Draft_Print.inst.cfg similarity index 93% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_PP_Draft_Print.inst.cfg index 3569aac74b..a26ff382d8 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_PP_Draft_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Fast -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 material = generic_pp variant = AA 0.8 -buildplate = Aluminum [values] brim_width = 25 @@ -30,6 +29,7 @@ material_standby_temperature = 100 multiple_mesh_overlap = 0.2 prime_tower_enable = True prime_tower_flow = 100 +prime_tower_min_volume = 10 retract_at_layer_change = False retraction_count_max = 12 retraction_extra_prime_amount = 0.5 @@ -50,5 +50,3 @@ travel_compensate_overlapping_walls_0_enabled = False wall_0_wipe_dist = =line_width * 2 wall_line_width_x = =round(line_width * 0.8 / 0.8, 2) wall_thickness = 1.6 - -default_material_bed_temperature = 95 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_PP_Superdraft_Print.inst.cfg similarity index 93% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_PP_Superdraft_Print.inst.cfg index 0e10a17210..d8b5d0b576 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_PP_Superdraft_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Sprint -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 material = generic_pp variant = AA 0.8 -buildplate = Aluminum [values] brim_width = 25 @@ -30,6 +29,7 @@ material_standby_temperature = 100 multiple_mesh_overlap = 0.2 prime_tower_enable = True prime_tower_flow = 100 +prime_tower_min_volume = 20 retract_at_layer_change = False retraction_count_max = 12 retraction_extra_prime_amount = 0.5 @@ -50,6 +50,3 @@ travel_compensate_overlapping_walls_0_enabled = False wall_0_wipe_dist = =line_width * 2 wall_line_width_x = =round(line_width * 0.8 / 0.8, 2) wall_thickness = 1.6 - -default_material_bed_temperature = 95 - diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_PP_Verydraft_Print.inst.cfg similarity index 93% rename from resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg rename to resources/quality/ultimaker_s3/um_s3_aa0.8_PP_Verydraft_Print.inst.cfg index 79d58f56f4..b033ba10fb 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_PP_Verydraft_Print.inst.cfg @@ -1,16 +1,15 @@ [general] version = 4 name = Extra Fast -definition = ultimaker_s5 +definition = ultimaker_s3 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 material = generic_pp variant = AA 0.8 -buildplate = Aluminum [values] brim_width = 25 @@ -29,6 +28,7 @@ material_standby_temperature = 100 multiple_mesh_overlap = 0.2 prime_tower_enable = True prime_tower_flow = 100 +prime_tower_min_volume = 15 retract_at_layer_change = False retraction_count_max = 12 retraction_extra_prime_amount = 0.5 @@ -49,5 +49,3 @@ travel_compensate_overlapping_walls_0_enabled = False wall_0_wipe_dist = =line_width * 2 wall_line_width_x = =round(line_width * 0.8 / 0.8, 2) wall_thickness = 1.6 - -default_material_bed_temperature = 95 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_TPLA_Draft_Print.inst.cfg new file mode 100644 index 0000000000..ee6da50fc9 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_TPLA_Draft_Print.inst.cfg @@ -0,0 +1,40 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_tough_pla +variant = AA 0.8 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =100 +cool_min_speed = 2 +gradual_infill_step_height = =3 * layer_height +infill_line_width = =round(line_width * 0.75 / 0.75, 2) +infill_pattern = cubic +layer_height_0 = 0.4 +line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_final_print_temperature = =max(-273.15, material_print_temperature - 15) +material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) +material_print_temperature = =default_material_print_temperature + 0 +prime_tower_enable = False +retract_at_layer_change = False +speed_print = 45 +speed_topbottom = =round(speed_print * 35 / 45) +speed_wall = =round(speed_print * 40 / 45) +speed_wall_0 = =round(speed_print * 35 / 45) +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 +top_bottom_thickness = =layer_height * 6 +wall_line_width = =round(line_width * 0.75 / 0.75, 2) +wall_line_width_x = =round(wall_line_width * 0.75 / 0.75, 2) +wall_thickness = =wall_line_width_0 + wall_line_width_x \ No newline at end of file diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_TPLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_TPLA_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..07b4329204 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_TPLA_Superdraft_Print.inst.cfg @@ -0,0 +1,41 @@ +[general] +version = 4 +name = Sprint +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = superdraft +weight = -4 +material = generic_tough_pla +variant = AA 0.8 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =100 +cool_min_speed = 2 +gradual_infill_step_height = =3 * layer_height +infill_line_width = =round(line_width * 0.75 / 0.75, 2) +infill_pattern = cubic +layer_height_0 = 0.4 +line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_final_print_temperature = =max(-273.15, material_print_temperature - 15) +material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) +material_print_temperature = =default_material_print_temperature + 5 +prime_tower_enable = False +raft_margin = 10 +retract_at_layer_change = False +speed_infill = =math.ceil(speed_print * 30 / 30) +speed_print = 30 +speed_topbottom = =math.ceil(speed_print * 20 / 30) +speed_wall = =math.ceil(speed_print * 25/ 30) +speed_wall_0 = =math.ceil(speed_print * 20 / 30) +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 +top_bottom_thickness = =layer_height * 4 +wall_line_width = =round(line_width * 0.75 / 0.75, 2) +wall_thickness = =wall_line_width_0 + wall_line_width_x diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_TPLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_TPLA_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..b0cee0f130 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_TPLA_Verydraft_Print.inst.cfg @@ -0,0 +1,43 @@ +[general] +version = 4 +name = Extra Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = verydraft +weight = -3 +material = generic_tough_pla +variant = AA 0.8 + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =100 +cool_min_speed = 2 +gradual_infill_step_height = =3 * layer_height +infill_line_width = =round(line_width * 0.75 / 0.75, 2) +infill_pattern = cubic +layer_height_0 = 0.4 +line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_final_print_temperature = =max(-273.15, material_print_temperature - 15) +material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) +material_print_temperature = =default_material_print_temperature + 5 +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +prime_tower_enable = False +retract_at_layer_change = False +speed_infill = =math.ceil(speed_print * 30 / 35) +speed_print = 35 +speed_topbottom = =math.ceil(speed_print * 20 / 35) +speed_wall = =math.ceil(speed_print * 25/ 35) +speed_wall_0 = =math.ceil(speed_print * 20 / 35) +support_angle = 70 +support_line_width = =line_width * 0.75 +support_xy_distance = =wall_line_width_0 * 1.5 +top_bottom_thickness = =layer_height * 4 +wall_line_width = =round(line_width * 0.75 / 0.75, 2) +wall_line_width_x = =round(wall_line_width * 0.75 / 0.75, 2) +wall_thickness = =wall_line_width_0 + wall_line_width_x diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_TPU_Draft_Print.inst.cfg new file mode 100644 index 0000000000..728d7e8900 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_TPU_Draft_Print.inst.cfg @@ -0,0 +1,62 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_tpu +variant = AA 0.8 + +[values] +brim_width = 8.75 +cool_min_layer_time_fan_speed_max = 6 +top_skin_expand_distance = =line_width * 2 +infill_before_walls = True +infill_line_width = =round(line_width * 0.7 / 0.8, 2) +infill_pattern = cross_3d +jerk_prime_tower = =math.ceil(jerk_print * 25 / 25) +jerk_support = =math.ceil(jerk_print * 25 / 25) +jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25) +machine_nozzle_cool_down_speed = 0.5 +machine_nozzle_heat_up_speed = 2.5 +material_final_print_temperature = =material_print_temperature +material_flow = 105 +material_initial_print_temperature = =material_print_temperature +material_print_temperature = =default_material_print_temperature - 2 +material_print_temperature_layer_0 = =material_print_temperature + 19 +material_standby_temperature = 100 +multiple_mesh_overlap = 0.2 +prime_tower_enable = True +prime_tower_flow = 100 +retract_at_layer_change = False +retraction_count_max = 12 +retraction_extra_prime_amount = 0.5 +retraction_hop = 1.5 +retraction_hop_only_when_collides = False +retraction_min_travel = =line_width * 2 +retraction_prime_speed = 15 +skin_line_width = =round(line_width * 0.78 / 0.8, 2) +speed_print = 30 +speed_topbottom = =math.ceil(speed_print * 25 / 30) + +speed_wall = =math.ceil(speed_print * 30 / 30) +speed_wall_x = =math.ceil(speed_wall * 30 / 30) +support_angle = 50 +support_bottom_distance = =support_z_distance +support_line_width = =round(line_width * 0.7 / 0.8, 2) +support_offset = =line_width +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 45 +top_bottom_thickness = 1.2 +travel_avoid_distance = 1.5 +travel_compensate_overlapping_walls_0_enabled = False +wall_0_wipe_dist = =line_width * 2 +wall_line_width_x = =round(line_width * 0.6 / 0.8, 2) +wall_thickness = 1.3 + +jerk_travel = 50 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_TPU_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..4dbd5b609d --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_TPU_Superdraft_Print.inst.cfg @@ -0,0 +1,63 @@ +[general] +version = 4 +name = Sprint +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = superdraft +weight = -4 +material = generic_tpu +variant = AA 0.8 + +[values] +brim_width = 8.75 +cool_min_layer_time_fan_speed_max = 6 +top_skin_expand_distance = =line_width * 2 +infill_before_walls = True +infill_line_width = =round(line_width * 0.7 / 0.8, 2) +infill_pattern = cross_3d +infill_sparse_density = 10 +jerk_prime_tower = =math.ceil(jerk_print * 25 / 25) +jerk_support = =math.ceil(jerk_print * 25 / 25) +jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25) +machine_nozzle_cool_down_speed = 0.5 +machine_nozzle_heat_up_speed = 2.5 +material_final_print_temperature = =material_print_temperature +material_flow = 105 +material_initial_print_temperature = =material_print_temperature +material_print_temperature = =default_material_print_temperature + 2 +material_print_temperature_layer_0 = =material_print_temperature + 15 +material_standby_temperature = 100 +multiple_mesh_overlap = 0.2 +prime_tower_enable = True +prime_tower_flow = 100 +retract_at_layer_change = False +retraction_count_max = 12 +retraction_extra_prime_amount = 0.5 +retraction_hop = 1.5 +retraction_hop_only_when_collides = False +retraction_min_travel = =line_width * 2 +retraction_prime_speed = 15 +skin_line_width = =round(line_width * 0.78 / 0.8, 2) +speed_print = 30 +speed_topbottom = =math.ceil(speed_print * 20 / 30) + +speed_wall = =math.ceil(speed_print * 30 / 30) +speed_wall_x = =math.ceil(speed_wall * 30 / 30) +support_angle = 50 +support_bottom_distance = =support_z_distance +support_line_width = =round(line_width * 0.7 / 0.8, 2) +support_offset = =line_width +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 45 +top_bottom_thickness = 1.2 +travel_avoid_distance = 1.5 +travel_compensate_overlapping_walls_0_enabled = False +wall_0_wipe_dist = =line_width * 2 +wall_line_width_x = =round(line_width * 0.6 / 0.8, 2) +wall_thickness = 1.3 + +jerk_travel = 50 diff --git a/resources/quality/ultimaker_s3/um_s3_aa0.8_TPU_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_aa0.8_TPU_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..5d0609850d --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_aa0.8_TPU_Verydraft_Print.inst.cfg @@ -0,0 +1,62 @@ +[general] +version = 4 +name = Extra Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = verydraft +weight = -3 +material = generic_tpu +variant = AA 0.8 + +[values] +brim_width = 8.75 +cool_min_layer_time_fan_speed_max = 6 +top_skin_expand_distance = =line_width * 2 +infill_before_walls = True +infill_line_width = =round(line_width * 0.7 / 0.8, 2) +infill_pattern = cross_3d +infill_sparse_density = 10 +jerk_prime_tower = =math.ceil(jerk_print * 25 / 25) +jerk_support = =math.ceil(jerk_print * 25 / 25) +jerk_wall_0 = =math.ceil(jerk_wall * 15 / 25) +machine_nozzle_cool_down_speed = 0.5 +machine_nozzle_heat_up_speed = 2.5 +material_final_print_temperature = =material_print_temperature +material_flow = 105 +material_initial_print_temperature = =material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 17 +material_standby_temperature = 100 +multiple_mesh_overlap = 0.2 +prime_tower_enable = True +prime_tower_flow = 100 +retract_at_layer_change = False +retraction_count_max = 12 +retraction_extra_prime_amount = 0.5 +retraction_hop = 1.5 +retraction_hop_only_when_collides = False +retraction_min_travel = =line_width * 2 +retraction_prime_speed = 15 +skin_line_width = =round(line_width * 0.78 / 0.8, 2) +speed_print = 30 +speed_topbottom = =math.ceil(speed_print * 23 / 30) + +speed_wall = =math.ceil(speed_print * 30 / 30) +speed_wall_x = =math.ceil(speed_wall * 30 / 30) +support_angle = 50 +support_bottom_distance = =support_z_distance +support_line_width = =round(line_width * 0.7 / 0.8, 2) +support_offset = =line_width +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 20 +switch_extruder_retraction_speeds = 45 +top_bottom_thickness = 1.2 +travel_avoid_distance = 1.5 +travel_compensate_overlapping_walls_0_enabled = False +wall_0_wipe_dist = =line_width * 2 +wall_line_width_x = =round(line_width * 0.6 / 0.8, 2) +wall_thickness = 1.3 + +jerk_travel = 50 diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.4_PVA_Draft_Print.inst.cfg new file mode 100644 index 0000000000..ed4f25a56d --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.4_PVA_Draft_Print.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_pva +variant = BB 0.4 + +[values] +brim_replaces_support = False +material_print_temperature = =default_material_print_temperature + 10 +material_standby_temperature = 100 +prime_tower_enable = False +skin_overlap = 20 +support_brim_enable = True diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.4_PVA_Fast_Print.inst.cfg new file mode 100644 index 0000000000..3749672b7f --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.4_PVA_Fast_Print.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -1 +material = generic_pva +variant = BB 0.4 + +[values] +brim_replaces_support = False +material_print_temperature = =default_material_print_temperature + 5 +material_standby_temperature = 100 +prime_tower_enable = False +skin_overlap = 15 +support_brim_enable = True +support_infill_sparse_thickness = 0.3 diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.4_PVA_High_Quality.inst.cfg new file mode 100644 index 0000000000..87c825b193 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.4_PVA_High_Quality.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = Extra Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +material = generic_pva +variant = BB 0.4 + +[values] +brim_replaces_support = False +material_standby_temperature = 100 +prime_tower_enable = False +support_brim_enable = True +support_infill_sparse_thickness = 0.18 diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.4_PVA_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..cb9f9ded57 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.4_PVA_Normal_Quality.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +material = generic_pva +variant = BB 0.4 + +[values] +brim_replaces_support = False +material_standby_temperature = 100 +prime_tower_enable = False +support_brim_enable = True diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.8_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.8_PVA_Draft_Print.inst.cfg new file mode 100644 index 0000000000..84ea35546b --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.8_PVA_Draft_Print.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_pva +variant = BB 0.8 + +[values] +brim_replaces_support = False +material_print_temperature = =default_material_print_temperature + 5 +material_standby_temperature = 100 +support_brim_enable = True diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.8_PVA_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..a868c08920 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.8_PVA_Superdraft_Print.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = Sprint +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = superdraft +weight = -4 +material = generic_pva +variant = BB 0.8 + +[values] +brim_replaces_support = False +material_standby_temperature = 100 +support_brim_enable = True +support_interface_height = 0.9 diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.8_PVA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.8_PVA_Verydraft_Print.inst.cfg new file mode 100644 index 0000000000..6194f236b8 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.8_PVA_Verydraft_Print.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = Extra Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = verydraft +weight = -3 +material = generic_pva +variant = BB 0.8 + +[values] +brim_replaces_support = False +material_standby_temperature = 100 +support_brim_enable = True +support_infill_sparse_thickness = 0.3 +support_interface_height = 1.2 diff --git a/resources/quality/ultimaker_s3/um_s3_cc0.6_CFFCPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_cc0.6_CFFCPE_Draft_Print.inst.cfg new file mode 100644 index 0000000000..9fc669fa92 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_cc0.6_CFFCPE_Draft_Print.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_cffcpe +variant = CC 0.6 + +[values] +adhesion_type = skirt +cool_fan_enabled = True +cool_min_layer_time = 7 +cool_min_layer_time_fan_speed_max = 15 +cool_min_speed = 6 +infill_line_width = =line_width +initial_layer_line_width_factor = 130.0 +line_width = =machine_nozzle_size * (0.58/0.6) +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +skin_overlap = 20 +support_bottom_distance = =support_z_distance / 2 +support_top_distance = =support_z_distance +support_z_distance = =layer_height * 2 +wall_line_width_x = =line_width diff --git a/resources/quality/ultimaker_s3/um_s3_cc0.6_CFFPA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_cc0.6_CFFPA_Draft_Print.inst.cfg new file mode 100644 index 0000000000..57ef6fcaa2 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_cc0.6_CFFPA_Draft_Print.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_cffpa +variant = CC 0.6 + +[values] +adhesion_type = skirt +cool_fan_enabled = True +cool_min_layer_time = 7 +cool_min_layer_time_fan_speed_max = 15 +cool_min_speed = 6 +infill_line_width = =line_width +initial_layer_line_width_factor = 130.0 +line_width = =machine_nozzle_size * (0.58/0.6) +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +skin_overlap = 20 +support_bottom_distance = =support_z_distance / 2 +support_top_distance = =support_z_distance +support_z_distance = =layer_height * 2 +wall_line_width_x = =line_width diff --git a/resources/quality/ultimaker_s3/um_s3_cc0.6_GFFCPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_cc0.6_GFFCPE_Draft_Print.inst.cfg new file mode 100644 index 0000000000..1d8350e007 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_cc0.6_GFFCPE_Draft_Print.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_gffcpe +variant = CC 0.6 + +[values] +adhesion_type = brim +cool_fan_enabled = True +cool_min_layer_time = 7 +cool_min_layer_time_fan_speed_max = 15 +cool_min_speed = 6 +infill_line_width = =line_width +initial_layer_line_width_factor = 130.0 +line_width = =machine_nozzle_size * (0.58/0.6) +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +skin_overlap = 20 +support_bottom_distance = =support_z_distance / 2 +support_top_distance = =support_z_distance +support_z_distance = =layer_height * 2 +wall_line_width_x = =line_width diff --git a/resources/quality/ultimaker_s3/um_s3_cc0.6_GFFPA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_cc0.6_GFFPA_Draft_Print.inst.cfg new file mode 100644 index 0000000000..dcb5a14928 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_cc0.6_GFFPA_Draft_Print.inst.cfg @@ -0,0 +1,31 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +material = generic_gffpa +variant = CC 0.6 + +[values] +adhesion_type = brim +cool_fan_enabled = True +cool_min_layer_time = 7 +cool_min_layer_time_fan_speed_max = 15 +cool_min_speed = 6 +infill_line_width = =line_width +initial_layer_line_width_factor = 130.0 +line_width = =machine_nozzle_size * (0.58/0.6) +material_bed_temperature_layer_0 = =material_bed_temperature + 5 +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature +material_standby_temperature = 100 +skin_overlap = 20 +support_bottom_distance = =support_z_distance / 2 +support_top_distance = =support_z_distance +support_z_distance = =layer_height * 2 +wall_line_width_x = =line_width diff --git a/resources/quality/ultimaker_s3/um_s3_cc0.6_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_cc0.6_PLA_Draft_Print.inst.cfg new file mode 100644 index 0000000000..420aed0076 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_cc0.6_PLA_Draft_Print.inst.cfg @@ -0,0 +1,43 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -3 +material = generic_pla +variant = CC 0.6 +is_experimental = True + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =100 +cool_min_speed = 2 +gradual_infill_step_height = =3 * layer_height +infill_line_width = =round(line_width * 0.65 / 0.75, 2) +infill_pattern = triangles +line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_final_print_temperature = =max(-273.15, material_print_temperature - 15) +material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) +material_print_temperature = =default_material_print_temperature + 10 +material_standby_temperature = 100 +prime_tower_enable = True +retract_at_layer_change = False +speed_print = 45 +speed_topbottom = =math.ceil(speed_print * 35 / 45) +speed_wall = =math.ceil(speed_print * 40 / 45) +speed_wall_x = =speed_wall +speed_wall_0 = =math.ceil(speed_wall * 35 / 40) +support_angle = 70 +support_line_width = =line_width * 0.75 +support_pattern = ='triangles' +support_xy_distance = =wall_line_width_0 * 1.5 +top_bottom_thickness = =layer_height * 4 +wall_line_width = =round(line_width * 0.75 / 0.75, 2) +wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) +wall_thickness = =wall_line_width_0 + wall_line_width_x diff --git a/resources/quality/ultimaker_s3/um_s3_cc0.6_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s3/um_s3_cc0.6_PLA_Fast_Print.inst.cfg new file mode 100644 index 0000000000..ffafb9fc94 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_cc0.6_PLA_Fast_Print.inst.cfg @@ -0,0 +1,43 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -2 +material = generic_pla +variant = CC 0.6 +is_experimental = True + +[values] +cool_fan_full_at_height = =layer_height_0 + 2 * layer_height +cool_fan_speed_max = =100 +cool_min_speed = 2 +gradual_infill_step_height = =3 * layer_height +infill_line_width = =round(line_width * 0.65 / 0.75, 2) +infill_pattern = triangles +line_width = =machine_nozzle_size * 0.9375 +machine_nozzle_cool_down_speed = 0.75 +machine_nozzle_heat_up_speed = 1.6 +material_final_print_temperature = =max(-273.15, material_print_temperature - 15) +material_initial_print_temperature = =max(-273.15, material_print_temperature - 10) +material_print_temperature = =default_material_print_temperature + 10 +material_standby_temperature = 100 +prime_tower_enable = True +retract_at_layer_change = False +speed_print = 45 +speed_topbottom = =math.ceil(speed_print * 35 / 45) +speed_wall = =math.ceil(speed_print * 40 / 45) +speed_wall_x = =speed_wall +speed_wall_0 = =math.ceil(speed_wall * 35 / 40) +support_angle = 70 +support_line_width = =line_width * 0.75 +support_pattern = ='triangles' +support_xy_distance = =wall_line_width_0 * 1.5 +top_bottom_thickness = =layer_height * 4 +wall_line_width = =round(line_width * 0.75 / 0.75, 2) +wall_line_width_x = =round(wall_line_width * 0.625 / 0.75, 2) +wall_thickness = =wall_line_width_0 + wall_line_width_x diff --git a/resources/quality/ultimaker_s3/um_s3_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_global_Draft_Quality.inst.cfg new file mode 100644 index 0000000000..175bf0b435 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_global_Draft_Quality.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = draft +weight = -2 +global_quality = True + +[values] +layer_height = 0.2 diff --git a/resources/quality/ultimaker_s3/um_s3_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_global_Fast_Quality.inst.cfg new file mode 100644 index 0000000000..562b3ea77b --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_global_Fast_Quality.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Normal +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = fast +weight = -1 +global_quality = True + +[values] +layer_height = 0.15 diff --git a/resources/quality/ultimaker_s3/um_s3_global_High_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_global_High_Quality.inst.cfg new file mode 100644 index 0000000000..142002eb1e --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_global_High_Quality.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Extra Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = high +weight = 1 +global_quality = True + +[values] +layer_height = 0.06 diff --git a/resources/quality/ultimaker_s3/um_s3_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_global_Normal_Quality.inst.cfg new file mode 100644 index 0000000000..f1cc8b52fe --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_global_Normal_Quality.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Fine +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = normal +weight = 0 +global_quality = True + +[values] +layer_height = 0.1 diff --git a/resources/quality/ultimaker_s3/um_s3_global_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_global_Superdraft_Quality.inst.cfg new file mode 100644 index 0000000000..136f7f85b9 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_global_Superdraft_Quality.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Sprint +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = superdraft +weight = -4 +global_quality = True + +[values] +layer_height = 0.4 diff --git a/resources/quality/ultimaker_s3/um_s3_global_Verydraft_Quality.inst.cfg b/resources/quality/ultimaker_s3/um_s3_global_Verydraft_Quality.inst.cfg new file mode 100644 index 0000000000..149ba68e6b --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_global_Verydraft_Quality.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 4 +name = Extra Fast +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = quality +quality_type = verydraft +weight = -3 +global_quality = True + +[values] +layer_height = 0.3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg index 1b46116686..051464c6ee 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg index 0beec0fba4..a91783aefd 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_Nylon_Normal_Quality.inst.cfg index 7623872d07..9ff298214a 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_Nylon_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg index e09ea57792..b9f469230e 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine - Experimental definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg index e284ac277a..c156f3e6b5 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg index a8c5f08448..4f1dad43b2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine - Experimental definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_TPLA_Normal_Quality.inst.cfg index 27c9c1d63e..1fdee1e826 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_TPLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_TPLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg index 5d2e8767ba..40dff3a7ef 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg index 7e5fcc0ab6..d777592091 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg index 829939b2a6..53295102fc 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg index a6a51aca4c..6457e0e3ec 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg index 73ac26f806..34e13ba101 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg index 030f4f7652..a18bc574eb 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg index c0f3dd0ac9..05cef82f8d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg index aa32861ddb..7d31368bed 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg index 26edd2d8a7..418ff7836a 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg index e200c3b078..473b03f44b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg index dc665ae114..ddcf1dce03 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg index 311c335a86..1fd6231274 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg index 02122a40fa..ee552da3c2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg index 54ab48e88d..3256ac1fac 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg index be9b43b1b8..6267edc26e 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg index 03fe4f4b8a..c935fff0b0 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg index bd078f7e4d..87ec934e6b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg index 45506f4152..1cd175dc6b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg index c159402e3f..7acd1a02ab 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg index f6713fd4e9..a1ff911104 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg index fbc5328d80..55433e6784 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg index d6e002c7f1..8127b0994d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg index 0f708b16db..419d530317 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg index ca4ef6bd9b..45e501e3a8 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg index 56cb57cb08..48ae8924eb 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg index 44b643d529..f63085ae99 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg index aa737dc1ea..d049bc0cb9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg index d008bb37fc..826482e541 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg index b0c00f2c07..afa68afab8 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg index 835c53eaef..7c334e1fbf 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg index 8be35d2ae2..71d53a70c4 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg index 460fd73afa..b3cfaff922 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg index 3488756cb6..42722295dd 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg index dc2b844d90..8958bb144a 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg index ec93e5ec23..234556e8a3 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg index eff47b9c20..0d3e3133b0 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg index 62e543977c..2de1bcd2b2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Draft_Print.inst.cfg index 56a16595e8..eded05cfb2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Superdraft_Print.inst.cfg index 77c0031feb..f3fb6ec7b0 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Verydraft_Print.inst.cfg index 5a4ee5c515..48a612d57c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg index a1c4479973..2bf9edc3db 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg index 3bde53d593..a69e813ac6 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint - Experimental definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg index 159c909ba5..8f1a865679 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Draft_Print.inst.cfg index af016c06da..e9d099c3b5 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Superdraft_Print.inst.cfg index 17036438a9..9ebf20ed49 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Verydraft_Print.inst.cfg index 2973abfdd3..d8226fcd1f 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Draft_Print.inst.cfg index 7760ffa89e..218e916758 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Superdraft_Print.inst.cfg index 2499e6b3d2..ac2aace7c0 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Verydraft_Print.inst.cfg index 2e611aeecc..5c8de50af3 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg index 2ac89416aa..a976218220 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg index 31db0f93dd..f964b085e0 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint - Experimental definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg index 2ef532a8b9..b95a89aa13 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Draft_Print.inst.cfg index ecfab94ef3..6fec3f4589 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Superdraft_Print.inst.cfg index 38f3c9c9d9..74d3448cd6 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Verydraft_Print.inst.cfg index b4b65ee5f7..ddb5fadca1 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Draft_Print.inst.cfg index 9a413c42c1..73de3a8626 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Superdraft_Print.inst.cfg index 0286f482cf..9b5c29adcc 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Verydraft_Print.inst.cfg index ed53d87b78..e8df22484c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Draft_Print.inst.cfg index 790ff4a922..c88a9e6952 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Superdraft_Print.inst.cfg index 9111bb5804..fd77a356fe 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Verydraft_Print.inst.cfg index af0fb786d2..9729e50d88 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Draft_Print.inst.cfg index 479aab6e7c..b5959ef77e 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg index 2b2f280730..2f9fe4d401 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Verydraft_Print.inst.cfg index ef38d96aea..9597911a6b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg index 804e9fd62b..f4bbe2c169 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg index 52a571c4f1..a9f16a90fe 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg index e8e293c81b..1456cfc024 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg index b512b47514..73aee41487 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg index 04015fe0f8..aed9b058e5 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg index 8d79e8fafe..e6f2ce58f2 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg index 31663ab192..853c5109ef 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFCPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFCPE_Draft_Print.inst.cfg index e3ecf51f13..368243de23 100644 --- a/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFCPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFCPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFPA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFPA_Draft_Print.inst.cfg index f73379dd3d..3ba8e812b0 100644 --- a/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFPA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFPA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFCPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFCPE_Draft_Print.inst.cfg index 906f22a66f..6f3d637fce 100644 --- a/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFCPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFCPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFPA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFPA_Draft_Print.inst.cfg index e411fa877b..d02bb70c68 100644 --- a/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFPA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFPA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_PLA_Draft_Print.inst.cfg index 156799aa6f..3757863caf 100644 --- a/resources/quality/ultimaker_s5/um_s5_cc0.6_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_PLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_PLA_Fast_Print.inst.cfg index f69093ff02..400c004d1f 100644 --- a/resources/quality/ultimaker_s5/um_s5_cc0.6_PLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_PLA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Draft_Quality.inst.cfg index 6d5e9cce24..dd8a4bb853 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Draft_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Fast_Quality.inst.cfg index 64fa64c463..9f03aeba67 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Fast_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_global_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_High_Quality.inst.cfg index 0f15089757..3e1a5dd6ad 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Normal_Quality.inst.cfg index f31a3e5ee3..22616f7e1c 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_global_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Superdraft_Quality.inst.cfg index d97e906d8e..79648c1ad9 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Superdraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_global_Verydraft_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Verydraft_Quality.inst.cfg index 4a6a431e5f..5996bd2a0c 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Verydraft_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/vertex_delta_k8800/k8800_ABS_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_ABS_Extreme_Quality.inst.cfg index d1547719f3..c8462e47dd 100644 --- a/resources/quality/vertex_delta_k8800/k8800_ABS_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_ABS_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_ABS_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_ABS_High_Quality.inst.cfg index 169fda1f47..952d09114a 100644 --- a/resources/quality/vertex_delta_k8800/k8800_ABS_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_ABS_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_ABS_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_ABS_Normal_Quality.inst.cfg index a2a298542e..d254da6672 100644 --- a/resources/quality/vertex_delta_k8800/k8800_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/vertex_delta_k8800/k8800_Global_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_Global_Extreme_Quality.inst.cfg index f82194c911..42a1dcd801 100644 --- a/resources/quality/vertex_delta_k8800/k8800_Global_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_Global_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_Global_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_Global_High_Quality.inst.cfg index 9d8f5fa98d..8c1f050a1b 100644 --- a/resources/quality/vertex_delta_k8800/k8800_Global_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_Global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_Global_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_Global_Normal_Quality.inst.cfg index 08bc3aa522..7cde2b8d48 100644 --- a/resources/quality/vertex_delta_k8800/k8800_Global_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_Global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/vertex_delta_k8800/k8800_PET_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PET_Extreme_Quality.inst.cfg index 09c3902405..1b0f8549a8 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PET_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PET_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_PET_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PET_High_Quality.inst.cfg index 058ed545b7..c4ea9cbd10 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PET_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PET_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_PET_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PET_Normal_Quality.inst.cfg index 595f2be25f..cbf1e753df 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PET_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PET_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/vertex_delta_k8800/k8800_PLA_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PLA_Extreme_Quality.inst.cfg index 9ec084e758..faa8425426 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PLA_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PLA_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_PLA_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PLA_High_Quality.inst.cfg index 9f1bd25564..2b7bd4b57c 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PLA_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_PLA_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PLA_Normal_Quality.inst.cfg index b60c8d8496..9f204106af 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/vertex_delta_k8800/k8800_TPU_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_TPU_Extreme_Quality.inst.cfg index 567de3a73b..2e19a53295 100644 --- a/resources/quality/vertex_delta_k8800/k8800_TPU_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_TPU_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_TPU_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_TPU_High_Quality.inst.cfg index dbcb27b229..09ed702c98 100644 --- a/resources/quality/vertex_delta_k8800/k8800_TPU_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_TPU_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_TPU_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_TPU_Normal_Quality.inst.cfg index 975556bb86..49ac5fa45f 100644 --- a/resources/quality/vertex_delta_k8800/k8800_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_TPU_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/zyyx/zyyx_agile_global_fast.inst.cfg b/resources/quality/zyyx/zyyx_agile_global_fast.inst.cfg index a795485a6d..54d9c0fe5b 100644 --- a/resources/quality/zyyx/zyyx_agile_global_fast.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_global_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = zyyx_agile [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = 1 diff --git a/resources/quality/zyyx/zyyx_agile_global_fine.inst.cfg b/resources/quality/zyyx/zyyx_agile_global_fine.inst.cfg index 6133c0aa99..decf10a428 100644 --- a/resources/quality/zyyx/zyyx_agile_global_fine.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_global_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = zyyx_agile [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fine weight = 1 diff --git a/resources/quality/zyyx/zyyx_agile_global_normal.inst.cfg b/resources/quality/zyyx/zyyx_agile_global_normal.inst.cfg index 4a5bfc7d47..a8f42927ab 100644 --- a/resources/quality/zyyx/zyyx_agile_global_normal.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_global_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = zyyx_agile [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg index ec89e83337..5f3a7cd252 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = zyyx_agile [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = 1 diff --git a/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg index e9ce3c7244..935dc1d127 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = zyyx_agile [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fine weight = 1 diff --git a/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg index 81d7bcd308..9214287bf5 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = zyyx_agile [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg index f805c0f3be..528d9b5412 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = zyyx_agile [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fast weight = 1 diff --git a/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg index 9647938cf6..cfb70fba00 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = zyyx_agile [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = fine weight = 1 diff --git a/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg index af2a32384c..f6fcd371ff 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = zyyx_agile [metadata] -setting_version = 7 +setting_version = 10 type = quality quality_type = normal weight = 0 diff --git a/resources/setting_visibility/expert.cfg b/resources/setting_visibility/expert.cfg index c8d13a1836..2b9ad362fc 100644 --- a/resources/setting_visibility/expert.cfg +++ b/resources/setting_visibility/expert.cfg @@ -52,6 +52,7 @@ fill_outline_gaps xy_offset xy_offset_layer_0 z_seam_type +z_seam_position z_seam_x z_seam_y z_seam_corner @@ -99,6 +100,7 @@ top_skin_expand_distance bottom_skin_expand_distance max_skin_angle_for_expansion min_skin_width_for_expansion +infill_randomize_start_location [material] default_material_print_temperature @@ -113,6 +115,18 @@ material_bed_temperature_layer_0 material_adhesion_tendency material_surface_energy material_flow +wall_material_flow +wall_0_material_flow +wall_x_material_flow +skin_material_flow +roofing_material_flow +infill_material_flow +skirt_brim_material_flow +support_material_flow +support_interface_material_flow +support_roof_material_flow +support_bottom_material_flow +prime_tower_flow material_flow_layer_0 retraction_enable retract_at_layer_change @@ -147,7 +161,6 @@ speed_layer_0 speed_print_layer_0 speed_travel_layer_0 skirt_brim_speed -max_feedrate_z_override speed_slowdown_layers speed_equalize_flow_enabled speed_equalize_flow_max @@ -192,7 +205,6 @@ travel_retract_before_outer_wall travel_avoid_other_parts travel_avoid_supports travel_avoid_distance -start_layers_at_same_position layer_start_x layer_start_y retraction_hop_enabled @@ -259,7 +271,7 @@ support_interface_pattern minimum_interface_area support_use_towers support_tower_diameter -support_minimal_diameter +support_tower_maximum_supported_diameter support_tower_roof_angle support_mesh_drop_down @@ -293,12 +305,10 @@ raft_fan_speed [dual] prime_tower_enable -prime_tower_circular prime_tower_size prime_tower_min_volume prime_tower_position_x prime_tower_position_y -prime_tower_flow prime_tower_wipe_enabled prime_tower_brim_enable ooze_shield_enabled @@ -362,7 +372,6 @@ coasting_enable coasting_volume coasting_min_volume coasting_speed -skin_alternate_rotation cross_infill_pocket_size spaghetti_infill_enabled spaghetti_infill_stepped @@ -399,3 +408,7 @@ wipe_hop_speed wipe_brush_pos_x wipe_repeat_count wipe_move_distance +small_hole_max_size +small_feature_max_length +small_feature_speed_factor +small_feature_speed_factor_0 diff --git a/resources/shaders/overhang.shader b/resources/shaders/overhang.shader index e1c03f7586..7f1b04dd59 100644 --- a/resources/shaders/overhang.shader +++ b/resources/shaders/overhang.shader @@ -32,6 +32,8 @@ fragment = uniform lowp float u_overhangAngle; uniform lowp vec4 u_overhangColor; + uniform lowp vec4 u_faceColor; + uniform highp int u_faceId; varying highp vec3 f_vertex; varying highp vec3 f_normal; @@ -99,6 +101,8 @@ fragment41core = uniform lowp float u_overhangAngle; uniform lowp vec4 u_overhangColor; + uniform lowp vec4 u_faceColor; + uniform highp int u_faceId; in highp vec3 f_vertex; in highp vec3 f_normal; @@ -127,7 +131,7 @@ fragment41core = highp float NdotR = clamp(dot(viewVector, reflectedLight), 0.0, 1.0); finalColor += pow(NdotR, u_shininess) * u_specularColor; - finalColor = (-normal.y > u_overhangAngle) ? u_overhangColor : finalColor; + finalColor = (u_faceId != gl_PrimitiveID) ? ((-normal.y > u_overhangAngle) ? u_overhangColor : finalColor) : u_faceColor; frag_color = finalColor; frag_color.a = 1.0; @@ -138,6 +142,7 @@ u_ambientColor = [0.3, 0.3, 0.3, 1.0] u_diffuseColor = [1.0, 0.79, 0.14, 1.0] u_specularColor = [0.4, 0.4, 0.4, 1.0] u_overhangColor = [1.0, 0.0, 0.0, 1.0] +u_faceColor = [0.0, 0.0, 1.0, 1.0] u_shininess = 20.0 [bindings] @@ -148,6 +153,7 @@ u_normalMatrix = normal_matrix u_viewPosition = view_position u_lightPosition = light_0_position u_diffuseColor = diffuse_color +u_faceId = hover_face [attributes] a_vertex = vertex diff --git a/resources/shaders/striped.shader b/resources/shaders/striped.shader index 9da921a629..71b1f7b0fa 100644 --- a/resources/shaders/striped.shader +++ b/resources/shaders/striped.shader @@ -45,7 +45,7 @@ fragment = mediump vec4 finalColor = vec4(0.0); mediump vec4 diffuseColor = u_vertical_stripes ? (((mod(v_vertex.x, u_width) < (u_width / 2.)) ^^ (mod(v_vertex.z, u_width) < (u_width / 2.))) ? u_diffuseColor1 : u_diffuseColor2) : - ((mod((-v_position.x + v_position.y), u_width) < (u_width / 2.)) ? u_diffuseColor1 : u_diffuseColor2); + ((mod(((-v_vertex.x + v_vertex.y + v_vertex.z) * 4.), u_width) < (u_width / 2.)) ? u_diffuseColor1 : u_diffuseColor2); /* Ambient Component */ finalColor += u_ambientColor; @@ -118,7 +118,7 @@ fragment41core = mediump vec4 finalColor = vec4(0.0); mediump vec4 diffuseColor = u_vertical_stripes ? (((mod(v_vertex.x, u_width) < (u_width / 2.)) ^^ (mod(v_vertex.z, u_width) < (u_width / 2.))) ? u_diffuseColor1 : u_diffuseColor2) : - ((mod((-v_position.x + v_position.y), u_width) < (u_width / 2.)) ? u_diffuseColor1 : u_diffuseColor2); + ((mod(((-v_vertex.x + v_vertex.y + v_vertex.z) * 4.), u_width) < (u_width / 2.)) ? u_diffuseColor1 : u_diffuseColor2); /* Ambient Component */ finalColor += u_ambientColor; diff --git a/resources/texts/change_log.txt b/resources/texts/change_log.txt index f50913cbb4..cdf0e979cd 100644 --- a/resources/texts/change_log.txt +++ b/resources/texts/change_log.txt @@ -1,3 +1,231 @@ +[4.3.0] +*Ultimaker S3. +This release includes a new profile for our latest S-line of 3D printers: the Ultimaker S3. Eagle-eyed beta testers may have noticed this extra printer profile in the beta release, too. Well done to those who spotted it. Learn more about the Ultimaker S3 by reading the blog on Ultimaker.com. + +*Even more 3D file formats. +This version is compatible with even more 3D file formats out-of-the-box, so you can integrate CAD software, 3D scanning software, and 3D modeling software into your workflow with ease. Natively open Collada, GLTF, OpenCTM, and PLY formats, to name a few. And don’t forget, downloading plugins from the Ultimaker Marketplace brings in support for many more. + +*Align faces to the build plate. +Orienting your models with the rotation tool or the lay flat tool can be a hassle with complex geometries. This new time-saving feature lets you select a face of your model to rest on the build plate, so you can get the orientation you need quickly and easily. Please note this is disabled in compatibility mode (and if your machine is running OpenGL 3.2 or lower). + +*Support infill/interface line directions. +Improve reliability with more precise control over certain aspects of your print. Choose the angle that support-infill and interfaces print at, thanks to a contribution from vgribinchuck. Input a set of angles you want lines generated at, and these will be placed sequentially throughout your 3D print. + +*Randomize infill start. +Randomize which infill line is printed first. This distributes strength across the model, preventing one segment becoming the weakest link, at the cost of an additional travel move. + +*Print small features slower. +Smartavionics has contributed a setting which recognizes small perimeters and reduces print speed in order to boost the reliability and accuracy of small printed features. This is especially useful for small perimeters such as printed holes, as they tend to get ripped away from the build plate easily due to their low contact area. + +*Easy selector for Z seam positions. +Z seams are now easier to position on your model, thanks to a contribution by trouch. A drop down selection box has been added to custom mode, giving you a list of presets to place the z seam on your model. + +*Colorblind assist theme. +Nubnubbud has added a new theme for colorblind users which makes more distinction between colors, such as the yellow/green line colors in the layer view. + +*DisplayFilenameAndLayerOnLCD script. +Some improvements for this post processing script from the community. N95JPL has contributed updates to offer a wider range of optional information. Adecastilho has contributed updates so that the layer count is displayed before the filename to prevent the layer number getting truncated in the event of long filename, as well as an option to start layer count at either 0 or 1. The ':' in the display string has also been removed as it is a GCODE command that splits the line into two different commands. + +*Peripheral information for output devices. +Architectural changes in Ultimaker Cura to allow display information about peripherals in the printer output device, so that I can use it to later on show that information in the Monitor stage plugin. + +*Quality changes on import. +Users can now import profiles that have been created on a different machine other than the active one. + +*Remove prime after coasting. +Reduce the visibility of the z seam when printing with coasting by preventing nozzle priming. + +*Map Material Station slot data. +The available configurations drop down will display information about a Ultimaker S5 Material Station if connected. Read more about the Ultimaker S5 Material Station on ultimaker.com + +*Manage Printer link. +Added a “Manage Printer” link in the monitor tab which takes you to Ultimaker Connect. + +*Improvement in code quality. +Improved code quality resulting in improved stability. + +* Bug fixes +- Uninstall in silent mode. Fixed an issue where a dialog displays when uninstalling in silent mode. +- Build Interface if Support is Present. In some cases, support could be pushed away by large support XY distance, but interfaces could be left on overhangs which leads to situation when interface is generated without support. This has been fixed. +- Install in silent mode. The bundled Arduino driver is signed by a certificate that's not trusted on Windows by default, so there was no way to suppress the prompt or to have the installer skip driver installation. This has been fixed. +- 3MF project printer connection not included. When loading a project file that was saved while a network connection was active, the network connection is not re-established. This has been fixed. +- Thin Walls broken. Fixed an error with thin walls being broken. +- Tray icon remaining. Fixed a bug where the tray icon would remain after closing the application. +- Marketplace text. Fixed an issue where Marketplace text is blurry on some screens +- Unsupported profile imports. Fixed an issue where exported profiles could not be reimported. +- Loading file message. Added visual feedback when loading files such as STLs +- Loading GCODE on disabled extruders. Fixed an issue where GCODE imported using multi-extrusion fails to load if an extruder is disabled. +- Support brim with concentric support pattern. Fixed an issue where support would be in mid-air. +- Reduced cloud logging. Logging has been reduced for cloud connections on unstable connections. +- Application menu extruder menu. Fixed an issue where changing the extruder via the application menu didn’t work. +- Tool handles move when rotating. Fixed an issue where rotate tool handles would change location when rotating. +- F5 reload. Fixed an issue where F5 doesn't reload GCODE. +- Application not starting before the splash screen. Fixed an issue where the application wouldn’t start before the splash window. +- Qt 5.13 crashes. Fixed an issue where the ShaderEffect crashes using Qt 5.13 +- Can’t select other materials in print setting tab. Fixed an issue where other materials couldn’t be selected using the print settings tab. +- Drop down to buildplate after resize. Models don’t drop down to the build plate if they are scaled down from ‘too large to fit’. +- Unsupported quality profiles. Fixed unsupported quality profiles appearing for 0.25 + 0.8 print core combinations. +- 'Arrange all models' for groups. Fixed an issue where arrange all models hangs for grouped models. +- Update Checker not working. Fixed this so that updates are visible if using a legacy version. +- Missing support brim. Fixed an issue where support brim was missing if platform adhesion set to ‘None’. +- Multiply non-normal mesh doesn't work. Fixed instances where processes stopped and messages would hang. +- Settings not updating in GUI with inheritance. Fixed settings not updating GUI with inheritance. +- Prevent 'generic'-part in name of specific materials. Introduced checks for ‘generic’ material types to help material categorization. +- Hide temperature settings. The "Default Print Temperature" setting is currently editable, but editing this setting can cause problems with temperatures later especially when you have it in your custom profile. We decided to hide this setting so users can no longer edit it in the later releases to avoid confusion. The "Default Build Plate Temperature" has also been hidden because it causes a similar issue. +- Add machine_heated_build_volume. Introduced a new machine_heated_build_volume machine-setting, which is set it to false by default, and only set it to true for the Ultimaker S5. Users can alter their own definition if they do have a heated build volume. +- Z-hops on first layer. First move other start GCODE not z-hopped. Contributed by sailorgreg. +- Preserve extruder-only moves in post stretch script. Contributed by sgtnoodle. +- “Print via Cloud” is no longer possible without an Internet connection +- Monitor tab no longer sometimes shows incorrect printer name or type +- Long print job names are no longer overlapping other text in the monitor tab +- “Connected to Cloud” pop-up now only displays when the currently selected printer is connected to Ultimaker cloud. +- Monitor tab is no longer greyed out when idle. + +*Third-party printer definitions +New machine definitions added for: +- IMADE3D Jellybox. Contributed by filipgoc for IMADE3D Jellybox printers, which adds JellyBOX 2 printer and revises settings of JellyBOX Original. +- Vertex Nano. Contributed by velbn +- Felix Pro 2. Contributed by pnks +- JGAurora A35. Contributed by pinchies. +- eMotionTech Strateo3D. Contributed by KOUBeMT. +- NWA3D A31. Contributed by DragonJe. + +[4.2.0] +*Orthographic view. +When preparing prints, professional users wanted more control over the 3D view type, so this version introduces an orthographic view, which is the same view type used by most professional CAD software packages. Find the orthographic view in View > Camera view > Orthographic, and compare the dimensions of your model to your CAD design with ease. + +*Object list. +Easily identify corresponding filenames and models with this new popup list. Click a model in the viewport and its filename will highlight, or click a filename in the list and the corresponding model will highlight. The open or hidden state of the list will persist between sessions. How convenient. + +*Print previews. +Some improvements have been made to print previews displayed in the monitor tab, Ultimaker Connect, or the Ultimaker S5 interface. In some instances, previews were clipped at the bottom or side, and sometimes models outside of the build plate area were visible. This is all fixed now. + +*AMF file compatibility. +Ultimaker Cura now supports AMF (Additive manufacturing file format) files out-of-the-box, thanks to an AMF file reader contributed by fieldOfView. + +*Slice button delay. +After clicking ‘Slice’, a lack of response could lead to frustrated buttonclicking. This version changes the button text to read ‘Processing’ during any pre-slicing delay. + +*Layer view line type. +The line type color scheme in the layer view has been tweaked with new colors for infill and support interfaces so that they can be distinguished better. + +*Nozzle switch prime distance. +Certain materials “ooze” more than others during retraction and long moves. Vgribinchuk has contributed a new setting that lets you finetune the restart distance, so that the full extrusion width is achieved when resuming a print. + +*Smart Z seam. +A new option to increase the aesthetic quality of your prints has been added to custom mode, under Z seam settings. Smart Z seam works by analyzing your model’s geometry and automatically choosing when to hide or expose the seam, so that visible seams on outer walls are kept to a minimum. + +*Separate Z axis movements. +Z axis movement handling has been improved to reduce the chance of print head collisions with prints. + +*Flow per feature. +You can now adjust material flow for specific features of your print, such as walls, infill, support, prime towers, and adhesion. This allows line spacing to be controlled separately from flow settings. + +*Merge infill lines. +We did some finetuning of the CuraEngine to improve print quality by filling thin infill areas more precisely and efficiently, and reducing movements that caused excessive gantry vibration. + +*Z hop speed. +The Z hop speed for printers with no specific speed value would default to ‘299792458000’ (light speed!) The new Z hop speed setting ensures that all Z hops are performed at a more sensible speed, which you can control. + +*Support tower diameter. +The ‘Minimum diameter’ setting for support towers has been renamed to ‘Maximum Tower-Supported Diameter’, which is more accurate and more specific because it mentions towers. + +*Square prime towers. +Circular prime towers are now the default option. Square prime towers have been eradicated forever. + +*Third-party printer order. +The ‘add printer’ menu now includes third-party printers that are ordered by manufacturer, so that specific machines can be found easily. Printer definitions. New machine definitions added for: +- Anet A6 contributed by markbernard +- Stereotech ST320 and START contributed by frylock34 +- Erzay3D contributed by Robokinetics +- FL Sun QQ contributed by curso007 +- GeeTech A30 contributed by curso007 + +*Creawsome mod. +This version has pulled the Creawsome mod, made by trouch, which adds a lot of print profiles for Creality printers. It includes definitions for Creality CR10 Mini, CR10s, CR10s Pro, CR20, CR20 Pro, Ender 2, Ender 4 and Ender 5, and updates the definitions for CR10, CR10s4, CR10s5 and Ender3. The CRX is untouched. Pull requests are now submitted that merge the mod into mainline Cura. + +* Bug fixes +- Noto Sans. Noto Sans was introduced as the default font in Ultimaker Cura some versions ago, but until now it wouldn’t render properly in the application unless already installed on your computer. This release forces the application to render Noto Sans even when it’s not installed as a font on your computer. Fun fact: Ultimaker recently rebranded, and we made Noto Sans our corporate font as well. +- Reslice with per-model settings. When slicing a model with per-model settings, a change of one of the per model settings would not trigger a reslice. This has been fixed. Serial port interruptions. This version adds a way to stop serial connections if you add command line parameters. +- Print one-at-a-time blob. In print-one-at-a-time mode, prime blobs could cause obstructions and cause prints to fail. This has been fixed. +- Prime tower brim overlap fix. Fixed an issue where models on the build plate could overlap with brims of other models. +- Wrong printer name. Fixed an issue where Ultimaker 3D printers that are synchronized over the network would display ‘Extruder 1’ in place of the printer’s hostname. +- Unnecessary travel at print start. Fixed an issue where printing without a prime blob would cause the print head to make a 10 mm travel move for no reason. +- Stair step height. This version fixes support stair step height, which influences the adhesion between the model and support printed on top (supports everywhere). For now, this bug has had no influence on PVA supported prints. + +[4.1.0] +*Draggable settings panels +There was a lot of feedback from the 4.0 release about the collapsible settings panels. Based on this feedback, we decided to make them completely draggable. The print settings panel (prepare stage) and the color scheme panel (preview stage) can now be dragged and positioned anywhere in the 3D viewer. A double click of the header will reset each to their default position. + +*Updated onboarding flow. +The onboarding flow on first startup has been updated with a look and feel more in line with the new interface. A series of setup steps will be shown, including Welcome, User agreement, Change log, the option to add a (networked) printer, and the option to sign up/sign in with an Ultimaker account. + +*Add printer menu. +Various updates in the ‘Add printer menu’. The machine settings menu has been updated in line with the new look and feel of the interface, and it's now possible to directly add machines from discovered network printers. + +*Expert settings visibility. +Previously, new settings weren't displayed in the expert preset even though they were expert-level settings. The latest features (e.g. Prime tower brim) are now included in the expert preset, for easy access. + +*Experimental print profile indicator. +When an experimental print profile is activated, the settings panel header will now display an "Experimental" tag. + +*Printing guidelines. +More information about how to print advanced materials can be quickly and easily accessed via the interface. When a material is chosen in the configuration selector, an icon will appear next to it, which when clicked will direct the user to a 'Printing Guidelines' page specified by the print profile supplier. + +*Increased rendering speed. +Rendering speed improvements that should be quite noticeable with multiple objects on the build plate. + +*Layer change script. +This new post-processing script injects custom Gcode on a layer change, so that manual commands can be defined, e.g. park the print head. Contributed by wporter82. https://github.com/wporter82 + +*Prime tower brim. +Prime towers might need the extra adhesion of a brim even when the model doesn’t, so an option for a prime tower to print with a brim independently of the model has been added. This setting is available when the adhesion type is set to 'None', 'Skirt' or 'Brim', and the prime tower is enabled. Currently this option doesn’t work with rafts. + +*Prime tower Gcode comments. +Gcode now contains comments to indicate when a prime tower is printed, like so: {code};TYPE:PRIME-TOWER{code} + +*Maximum deviation setting. +Previously, the maximum deviation was hard-coded in CuraEngine to be half of the maximum resolution. A new setting has been added that sets the maximum allowed deviation from the original polygon when reducing model resolution. If line segments are shorter than the maximum resolution, they are removed, unless this introduces a deviation greater than the maximum deviation. + +*Gyroid support. +Smartavionics has contributed a new option for a gyroid support pattern, similar to his gyroid infill contribution. A gyroid pattern is relatively efficient with material, so gyroid patterns permeable to water can dissolve faster. It’s also easier to pull gyroid structures off your model with pliers compared to some other support patterns. https://github.com/smartavionics + +*Purchase materials. +The Marketplace now includes a direct link to a site where users can buy specific materials to work with the corresponding print profile. The link is specified by the print profile supplier through the contributor portal. + +*Marketplace notifications. +When a plugin or print profile in the Marketplace has updates, a badge notification will appear over the Marketplace button and installed packages tab, prompting you to update. + +* New third-party definitions: +- NWA3D A5. Contributed by DragonJe. https://github.com/DragonJe +- Anycubic Chiron. Contributed by BluefireXD. https://github.com/BluefireXD +- Alfawise u30. Contributed by NicolasNSSM. https://github.com/NicolasNSSM +- Cubicon. Contributed by Hyvision. https://github.com/Hyvision +- Wanhao Duplicator 9. Contributed by matshch. https://github.com/matshch +- Creality 3D-X. Contributed by steverc1572 https://github.com/steverc1572 +- Z-Bolt. Contributed by alexkv. https://github.com/alexkv +- TiZYX Evy. Contributed by ValentinPitre. https://github.com/ValentinPitre +- FLSUN QQ. Contributed by ranfahrer. https://github.com/radfahrer +- Structur3D Silicone. Contributed by afinkle. https://github.com/afinkle +- TiZYX Evy Dual. Contributed by ValentinPitre. https://github.com/ValentinPitre + +*Bug fixes: +- Fixed an issue where the application crashed when opening the Ultimaker Marketplace after being logged in for more than 10 minutes. This was due to an expired token when checking network requests. +- For PLA-PLA support combinations, the horizontal expansion value has changed from 0.2 to 0 by default. This fixes an issue where unnecessary support is generated. The default value for PVA remains the same. +- Fixed an issue where choosing to "Update Existing" profile during project file loading did not overwrite the current settings with what was in the project file. +- Removed the GFF and CFF materials from this version onwards. These materials are intended only for testing and are incompatible with the Ultimaker 2+ +- Fixed an issue where the maximum resolution setting removed more vertices than necessary. +- Improved gyroid infill to stop very small (less than 10 uM) line segments being created when the gyroid infill lines are connected, increasing print consistency and reliability. Contributed by smartavionics https://github.com/smartavionics +- Previously, disabling build plate adhesion would also disable support brim settings. A support brim can now be enabled independently of build plate adhesion. +- Improved combing moves over thin model areas. Contributed by smartavionics https://github.com/smartavionics +- Fixed an issue where the printer selector panel text would exceed the boundaries of popups in languages other than English. +- Removed the ability to create print profiles with duplicate names in the print profile manager. Print profiles with the equal names would eventually lead to crashes or undefined behavior. +- Fixed an issue where the application would not remember the previous save path after saving again in the same session. +- Older machines running Mac OS X don't always support OpenGL 4.0+. For better performance the software can now detect if a machine doesn’t support it, and use OpenGL 2.0 instead. Contributed by fieldOfview. https://github.com/fieldofview +- Fixed an issue where the application would crash when selecting the support eraser tool. +- Fixed an issue where Z seams didn’t snap to the sharpest corner. +- Fixed issues where prints would have imperfections and on vertical surfaces. + [4.0.0] *Updated user interface Ultimaker Cura is a very powerful tool with many features to support users’ needs. In the new UI, we present these features in a better, more intuitive way based on the workflow of our users. The Marketplace and user account control have been integrated into the main interface to easily access material profiles and plugins. Three stages are shown in the header to give a clear guidance of the flow. The stage menu is populated with collapsible panels that allow users to focus on the 3D view when needed, while still showing important information at the same time, such as slicing configuration and settings. Users can now easily go to the preview stage to examine the layer view after slicing the model, which previously was less obvious or hidden. The new UI also creates more distinction between recommended and custom mode. Novice users or users who are not interested in all the settings can easily prepare a file, relying on the strength of expert-configured print profiles. Experienced users who want greater control can configure over 300 settings to their needs. diff --git a/resources/themes/cura-dark-colorblind/icons/sign_in_to_cloud.svg b/resources/themes/cura-dark-colorblind/icons/sign_in_to_cloud.svg new file mode 100644 index 0000000000..09ba300b6a --- /dev/null +++ b/resources/themes/cura-dark-colorblind/icons/sign_in_to_cloud.svg @@ -0,0 +1,16 @@ + + + + Group-cloud Copy + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-dark-colorblind/theme.json b/resources/themes/cura-dark-colorblind/theme.json new file mode 100644 index 0000000000..9559101d24 --- /dev/null +++ b/resources/themes/cura-dark-colorblind/theme.json @@ -0,0 +1,28 @@ +{ + "metadata": { + "name": "Colorblind Assist Dark", + "inherits": "cura-dark" + }, + + "colors": { + "x_axis": [212, 0, 0, 255], + "y_axis": [64, 64, 255, 255], + + "model_default": [156, 201, 36, 255], + "model_overhang": [200, 0, 255, 255], + + + "xray": [26, 26, 62, 255], + "xray_error": [255, 0, 0, 255], + + "layerview_inset_0": [255, 64, 0, 255], + "layerview_inset_x": [0, 156, 128, 255], + "layerview_skin": [255, 255, 86, 255], + "layerview_support": [255, 255, 0, 255], + + "layerview_infill": [0, 255, 255, 255], + "layerview_support_infill": [0, 200, 200, 255], + + "layerview_move_retraction": [0, 100, 255, 255] + } +} diff --git a/resources/themes/cura-dark/theme.json b/resources/themes/cura-dark/theme.json index 84f06bee0e..282004c3a9 100644 --- a/resources/themes/cura-dark/theme.json +++ b/resources/themes/cura-dark/theme.json @@ -88,7 +88,7 @@ "action_button": [39, 44, 48, 255], "action_button_text": [255, 255, 255, 200], "action_button_border": [255, 255, 255, 30], - "action_button_hovered": [39, 44, 48, 255], + "action_button_hovered": [79, 85, 89, 255], "action_button_hovered_text": [255, 255, 255, 255], "action_button_hovered_border": [255, 255, 255, 30], "action_button_active": [39, 44, 48, 30], @@ -193,19 +193,20 @@ "xray": [26, 26, 62, 255], "xray_error": [255, 0, 0, 255], - "layerview_ghost": [32, 32, 32, 96], - "layerview_none": [255, 255, 255, 255], - "layerview_inset_0": [255, 0, 0, 255], - "layerview_inset_x": [0, 255, 0, 255], - "layerview_skin": [255, 255, 0, 255], - "layerview_support": [0, 255, 255, 255], - "layerview_skirt": [0, 255, 255, 255], - "layerview_infill": [255, 192, 0, 255], - "layerview_support_infill": [0, 255, 255, 255], - "layerview_move_combing": [0, 0, 255, 255], - "layerview_move_retraction": [128, 128, 255, 255], - "layerview_support_interface": [64, 192, 255, 255], - "layerview_nozzle": [181, 166, 66, 120], + "layerview_ghost": [31, 31, 31, 95], + "layerview_none": [255, 255, 255, 255], + "layerview_inset_0": [255, 0, 0, 255], + "layerview_inset_x": [0, 255, 0, 255], + "layerview_skin": [255, 255, 0, 255], + "layerview_support": [0, 255, 255, 255], + "layerview_skirt": [0, 255, 255, 255], + "layerview_infill": [255, 127, 0, 255], + "layerview_support_infill": [0, 255, 255, 255], + "layerview_move_combing": [0, 0, 255, 255], + "layerview_move_retraction": [128, 127, 255, 255], + "layerview_support_interface": [63, 127, 255, 255], + "layerview_prime_tower": [0, 255, 255, 255], + "layerview_nozzle": [181, 166, 66, 50], "material_compatibility_warning": [255, 255, 255, 255], diff --git a/resources/themes/cura-light-colorblind/icons/sign_in_to_cloud.svg b/resources/themes/cura-light-colorblind/icons/sign_in_to_cloud.svg new file mode 100644 index 0000000000..09ba300b6a --- /dev/null +++ b/resources/themes/cura-light-colorblind/icons/sign_in_to_cloud.svg @@ -0,0 +1,16 @@ + + + + Group-cloud Copy + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light-colorblind/theme.json b/resources/themes/cura-light-colorblind/theme.json new file mode 100644 index 0000000000..10349acbfd --- /dev/null +++ b/resources/themes/cura-light-colorblind/theme.json @@ -0,0 +1,29 @@ +{ + "metadata": { + "name": "Colorblind Assist Light", + "inherits": "cura-light" + }, + + "colors": { + + "x_axis": [200, 0, 0, 255], + "y_axis": [64, 64, 255, 255], + "model_default": [156, 201, 36, 255], + "model_overhang": [200, 0, 255, 255], + + "model_selection_outline": [12, 169, 227, 255], + + "xray": [26, 26, 62, 255], + "xray_error": [255, 0, 0, 255], + + "layerview_inset_0": [255, 64, 0, 255], + "layerview_inset_x": [0, 156, 128, 255], + "layerview_skin": [255, 255, 86, 255], + "layerview_support": [255, 255, 0, 255], + + "layerview_infill": [0, 255, 255, 255], + "layerview_support_infill": [0, 200, 200, 255], + + "layerview_move_retraction": [0, 100, 255, 255] + } +} diff --git a/resources/themes/cura-light/icons/pos_modify_dont_support_overlap.svg b/resources/themes/cura-light/icons/pos_modify_dont_support_overlap.svg new file mode 100644 index 0000000000..124e95f558 --- /dev/null +++ b/resources/themes/cura-light/icons/pos_modify_dont_support_overlap.svg @@ -0,0 +1,26 @@ + + + + pms_modify_dont_support_overlap + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/pos_modify_overlaps.svg b/resources/themes/cura-light/icons/pos_modify_overlaps.svg new file mode 100644 index 0000000000..a664e820a6 --- /dev/null +++ b/resources/themes/cura-light/icons/pos_modify_overlaps.svg @@ -0,0 +1,17 @@ + + + + pms_modify_overlaps + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/pos_normal.svg b/resources/themes/cura-light/icons/pos_normal.svg new file mode 100644 index 0000000000..8a49ef3a00 --- /dev/null +++ b/resources/themes/cura-light/icons/pos_normal.svg @@ -0,0 +1,9 @@ + + + + pms_Normal + Created with Sketch. + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/pos_print_as_support.svg b/resources/themes/cura-light/icons/pos_print_as_support.svg new file mode 100644 index 0000000000..3562ca1fe0 --- /dev/null +++ b/resources/themes/cura-light/icons/pos_print_as_support.svg @@ -0,0 +1,14 @@ + + + + pms_printassupport + Created with Sketch. + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/rotate_face_layflat.svg b/resources/themes/cura-light/icons/rotate_face_layflat.svg new file mode 100644 index 0000000000..261a624cf0 --- /dev/null +++ b/resources/themes/cura-light/icons/rotate_face_layflat.svg @@ -0,0 +1,12 @@ + + + + select face lay flat + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/styles.qml b/resources/themes/cura-light/styles.qml index 2cf3b0ed58..daf06ac6af 100755 --- a/resources/themes/cura-light/styles.qml +++ b/resources/themes/cura-light/styles.qml @@ -241,7 +241,7 @@ QtObject Behavior on color { ColorAnimation { duration: 50; } } border.width: (control.hasOwnProperty("needBorder") && control.needBorder) ? Theme.getSize("default_lining").width : 0 - border.color: Theme.getColor("lining") + border.color: control.checked ? Theme.getColor("icon") : Theme.getColor("lining") } } diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index 218055ba6e..0d9f624805 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -372,18 +372,18 @@ "xray": [26, 26, 62, 255], "xray_error": [255, 0, 0, 255], - "layerview_ghost": [32, 32, 32, 96], + "layerview_ghost": [31, 31, 31, 95], "layerview_none": [255, 255, 255, 255], "layerview_inset_0": [255, 0, 0, 255], "layerview_inset_x": [0, 255, 0, 255], "layerview_skin": [255, 255, 0, 255], "layerview_support": [0, 255, 255, 255], "layerview_skirt": [0, 255, 255, 255], - "layerview_infill": [255, 192, 0, 255], + "layerview_infill": [255, 127, 0, 255], "layerview_support_infill": [0, 255, 255, 255], "layerview_move_combing": [0, 0, 255, 255], - "layerview_move_retraction": [128, 128, 255, 255], - "layerview_support_interface": [64, 192, 255, 255], + "layerview_move_retraction": [128, 127, 255, 255], + "layerview_support_interface": [63, 127, 255, 255], "layerview_prime_tower": [0, 255, 255, 255], "layerview_nozzle": [181, 166, 66, 50], @@ -544,7 +544,7 @@ "slider_groove": [0.5, 0.5], "slider_groove_radius": [0.15, 0.15], "slider_handle": [1.5, 1.5], - "slider_layerview_size": [1.0, 26.0], + "slider_layerview_size": [1.0, 34.0], "layerview_menu_size": [16.0, 4.0], "layerview_legend_size": [1.0, 1.0], @@ -618,6 +618,9 @@ "monitor_shadow_offset": [0.15, 0.15], "monitor_empty_state_offset": [5.6, 5.6], "monitor_empty_state_size": [35.0, 25.0], - "monitor_external_link_icon": [1.16, 1.16] + "monitor_external_link_icon": [1.16, 1.16], + "monitor_column": [18.0, 1.0], + "monitor_progress_bar": [16.5, 1.0], + "monitor_margin": [1.5, 1.5] } } diff --git a/resources/variants/Mark2_for_Ultimaker2_0.25.inst.cfg b/resources/variants/Mark2_for_Ultimaker2_0.25.inst.cfg index 32d12214b2..79ea633d5b 100644 --- a/resources/variants/Mark2_for_Ultimaker2_0.25.inst.cfg +++ b/resources/variants/Mark2_for_Ultimaker2_0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = Mark2_for_Ultimaker2 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/Mark2_for_Ultimaker2_0.4.inst.cfg b/resources/variants/Mark2_for_Ultimaker2_0.4.inst.cfg index 5a04878a4e..4bad7d0a07 100644 --- a/resources/variants/Mark2_for_Ultimaker2_0.4.inst.cfg +++ b/resources/variants/Mark2_for_Ultimaker2_0.4.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = Mark2_for_Ultimaker2 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/Mark2_for_Ultimaker2_0.6.inst.cfg b/resources/variants/Mark2_for_Ultimaker2_0.6.inst.cfg index b9e1745174..f0c1f4ca07 100644 --- a/resources/variants/Mark2_for_Ultimaker2_0.6.inst.cfg +++ b/resources/variants/Mark2_for_Ultimaker2_0.6.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = Mark2_for_Ultimaker2 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/Mark2_for_Ultimaker2_0.8.inst.cfg b/resources/variants/Mark2_for_Ultimaker2_0.8.inst.cfg index 4656c9f502..b62c7e4640 100644 --- a/resources/variants/Mark2_for_Ultimaker2_0.8.inst.cfg +++ b/resources/variants/Mark2_for_Ultimaker2_0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = Mark2_for_Ultimaker2 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/cartesio_0.25.inst.cfg b/resources/variants/cartesio_0.25.inst.cfg index 24203fa0d3..1f43e8cdb0 100644 --- a/resources/variants/cartesio_0.25.inst.cfg +++ b/resources/variants/cartesio_0.25.inst.cfg @@ -5,7 +5,7 @@ definition = cartesio [metadata] author = Cartesio -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/cartesio_0.4.inst.cfg b/resources/variants/cartesio_0.4.inst.cfg index 6b980110b7..3449c8931e 100644 --- a/resources/variants/cartesio_0.4.inst.cfg +++ b/resources/variants/cartesio_0.4.inst.cfg @@ -5,7 +5,7 @@ definition = cartesio [metadata] author = Cartesio -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/cartesio_0.8.inst.cfg b/resources/variants/cartesio_0.8.inst.cfg index 62669929dc..48313f5e41 100644 --- a/resources/variants/cartesio_0.8.inst.cfg +++ b/resources/variants/cartesio_0.8.inst.cfg @@ -5,7 +5,7 @@ definition = cartesio [metadata] author = Cartesio -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/creality_base_0.2.inst.cfg b/resources/variants/creality_base_0.2.inst.cfg new file mode 100644 index 0000000000..3f98c344cd --- /dev/null +++ b/resources/variants/creality_base_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_base + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_base_0.3.inst.cfg b/resources/variants/creality_base_0.3.inst.cfg new file mode 100644 index 0000000000..8367f9853c --- /dev/null +++ b/resources/variants/creality_base_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_base + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_base_0.4.inst.cfg b/resources/variants/creality_base_0.4.inst.cfg new file mode 100644 index 0000000000..40eaf4895d --- /dev/null +++ b/resources/variants/creality_base_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_base + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_base_0.5.inst.cfg b/resources/variants/creality_base_0.5.inst.cfg new file mode 100644 index 0000000000..48da4008e6 --- /dev/null +++ b/resources/variants/creality_base_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_base + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/hms434_0.6tpnozzle.inst.cfg b/resources/variants/creality_base_0.6.inst.cfg similarity index 50% rename from resources/variants/hms434_0.6tpnozzle.inst.cfg rename to resources/variants/creality_base_0.6.inst.cfg index e7bcdd5fd4..0983c3d4a4 100644 --- a/resources/variants/hms434_0.6tpnozzle.inst.cfg +++ b/resources/variants/creality_base_0.6.inst.cfg @@ -1,13 +1,12 @@ [general] -name = 0.6mm TP extruder +name = 0.6mm Nozzle version = 4 -definition = hms434 +definition = creality_base [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle [values] machine_nozzle_size = 0.6 -machine_nozzle_tip_outer_diameter = 1.05 diff --git a/resources/variants/creality_base_0.8.inst.cfg b/resources/variants/creality_base_0.8.inst.cfg new file mode 100644 index 0000000000..31ca8f5a48 --- /dev/null +++ b/resources/variants/creality_base_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_base + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_base_1.0.inst.cfg b/resources/variants/creality_base_1.0.inst.cfg new file mode 100644 index 0000000000..7177a35ec8 --- /dev/null +++ b/resources/variants/creality_base_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_base + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/creality_cr10_0.2.inst.cfg b/resources/variants/creality_cr10_0.2.inst.cfg new file mode 100644 index 0000000000..3527e6e44b --- /dev/null +++ b/resources/variants/creality_cr10_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_cr10 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_cr10_0.3.inst.cfg b/resources/variants/creality_cr10_0.3.inst.cfg new file mode 100644 index 0000000000..ae26fa646d --- /dev/null +++ b/resources/variants/creality_cr10_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_cr10 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_cr10_0.4.inst.cfg b/resources/variants/creality_cr10_0.4.inst.cfg new file mode 100644 index 0000000000..643908a4a2 --- /dev/null +++ b/resources/variants/creality_cr10_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_cr10 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_cr10_0.5.inst.cfg b/resources/variants/creality_cr10_0.5.inst.cfg new file mode 100644 index 0000000000..155206b4de --- /dev/null +++ b/resources/variants/creality_cr10_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_cr10 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_cr10_0.6.inst.cfg b/resources/variants/creality_cr10_0.6.inst.cfg new file mode 100644 index 0000000000..50b7ee8420 --- /dev/null +++ b/resources/variants/creality_cr10_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_cr10 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_cr10_0.8.inst.cfg b/resources/variants/creality_cr10_0.8.inst.cfg new file mode 100644 index 0000000000..9450413cb8 --- /dev/null +++ b/resources/variants/creality_cr10_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_cr10 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_cr10_1.0.inst.cfg b/resources/variants/creality_cr10_1.0.inst.cfg new file mode 100644 index 0000000000..20bf3d0231 --- /dev/null +++ b/resources/variants/creality_cr10_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_cr10 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/creality_cr10max_0.2.inst.cfg b/resources/variants/creality_cr10max_0.2.inst.cfg new file mode 100644 index 0000000000..426d6fdc22 --- /dev/null +++ b/resources/variants/creality_cr10max_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_cr10max + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_cr10max_0.3.inst.cfg b/resources/variants/creality_cr10max_0.3.inst.cfg new file mode 100644 index 0000000000..054fd59e09 --- /dev/null +++ b/resources/variants/creality_cr10max_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_cr10max + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_cr10max_0.4.inst.cfg b/resources/variants/creality_cr10max_0.4.inst.cfg new file mode 100644 index 0000000000..af0e5ca6e6 --- /dev/null +++ b/resources/variants/creality_cr10max_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_cr10max + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_cr10max_0.5.inst.cfg b/resources/variants/creality_cr10max_0.5.inst.cfg new file mode 100644 index 0000000000..d2c059842a --- /dev/null +++ b/resources/variants/creality_cr10max_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_cr10max + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_cr10max_0.6.inst.cfg b/resources/variants/creality_cr10max_0.6.inst.cfg new file mode 100644 index 0000000000..63e0b1bd42 --- /dev/null +++ b/resources/variants/creality_cr10max_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_cr10max + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_cr10max_0.8.inst.cfg b/resources/variants/creality_cr10max_0.8.inst.cfg new file mode 100644 index 0000000000..23a0ecd108 --- /dev/null +++ b/resources/variants/creality_cr10max_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_cr10max + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_cr10max_1.0.inst.cfg b/resources/variants/creality_cr10max_1.0.inst.cfg new file mode 100644 index 0000000000..a8d9f4db4d --- /dev/null +++ b/resources/variants/creality_cr10max_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_cr10max + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/creality_cr10mini_0.2.inst.cfg b/resources/variants/creality_cr10mini_0.2.inst.cfg new file mode 100644 index 0000000000..637b34b5d5 --- /dev/null +++ b/resources/variants/creality_cr10mini_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_cr10mini + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_cr10mini_0.3.inst.cfg b/resources/variants/creality_cr10mini_0.3.inst.cfg new file mode 100644 index 0000000000..834e0d90db --- /dev/null +++ b/resources/variants/creality_cr10mini_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_cr10mini + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_cr10mini_0.4.inst.cfg b/resources/variants/creality_cr10mini_0.4.inst.cfg new file mode 100644 index 0000000000..b2d546924c --- /dev/null +++ b/resources/variants/creality_cr10mini_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_cr10mini + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_cr10mini_0.5.inst.cfg b/resources/variants/creality_cr10mini_0.5.inst.cfg new file mode 100644 index 0000000000..79deae4686 --- /dev/null +++ b/resources/variants/creality_cr10mini_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_cr10mini + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_cr10mini_0.6.inst.cfg b/resources/variants/creality_cr10mini_0.6.inst.cfg new file mode 100644 index 0000000000..6ba86eee50 --- /dev/null +++ b/resources/variants/creality_cr10mini_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_cr10mini + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_cr10mini_0.8.inst.cfg b/resources/variants/creality_cr10mini_0.8.inst.cfg new file mode 100644 index 0000000000..fc406c4d53 --- /dev/null +++ b/resources/variants/creality_cr10mini_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_cr10mini + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_cr10mini_1.0.inst.cfg b/resources/variants/creality_cr10mini_1.0.inst.cfg new file mode 100644 index 0000000000..ae13e6007e --- /dev/null +++ b/resources/variants/creality_cr10mini_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_cr10mini + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/creality_cr10s4_0.2.inst.cfg b/resources/variants/creality_cr10s4_0.2.inst.cfg new file mode 100644 index 0000000000..03bd203fc6 --- /dev/null +++ b/resources/variants/creality_cr10s4_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_cr10s4 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_cr10s4_0.3.inst.cfg b/resources/variants/creality_cr10s4_0.3.inst.cfg new file mode 100644 index 0000000000..6b18594573 --- /dev/null +++ b/resources/variants/creality_cr10s4_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_cr10s4 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_cr10s4_0.4.inst.cfg b/resources/variants/creality_cr10s4_0.4.inst.cfg new file mode 100644 index 0000000000..7d8484b6a3 --- /dev/null +++ b/resources/variants/creality_cr10s4_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_cr10s4 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_cr10s4_0.5.inst.cfg b/resources/variants/creality_cr10s4_0.5.inst.cfg new file mode 100644 index 0000000000..95348ba9a8 --- /dev/null +++ b/resources/variants/creality_cr10s4_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_cr10s4 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_cr10s4_0.6.inst.cfg b/resources/variants/creality_cr10s4_0.6.inst.cfg new file mode 100644 index 0000000000..a34f8e7822 --- /dev/null +++ b/resources/variants/creality_cr10s4_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_cr10s4 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_cr10s4_0.8.inst.cfg b/resources/variants/creality_cr10s4_0.8.inst.cfg new file mode 100644 index 0000000000..24d9646fac --- /dev/null +++ b/resources/variants/creality_cr10s4_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_cr10s4 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_cr10s4_1.0.inst.cfg b/resources/variants/creality_cr10s4_1.0.inst.cfg new file mode 100644 index 0000000000..81730c7d32 --- /dev/null +++ b/resources/variants/creality_cr10s4_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_cr10s4 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/creality_cr10s5_0.2.inst.cfg b/resources/variants/creality_cr10s5_0.2.inst.cfg new file mode 100644 index 0000000000..7fc6fe5d25 --- /dev/null +++ b/resources/variants/creality_cr10s5_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_cr10s5 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_cr10s5_0.3.inst.cfg b/resources/variants/creality_cr10s5_0.3.inst.cfg new file mode 100644 index 0000000000..b9c354ef84 --- /dev/null +++ b/resources/variants/creality_cr10s5_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_cr10s5 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_cr10s5_0.4.inst.cfg b/resources/variants/creality_cr10s5_0.4.inst.cfg new file mode 100644 index 0000000000..b17188b249 --- /dev/null +++ b/resources/variants/creality_cr10s5_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_cr10s5 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_cr10s5_0.5.inst.cfg b/resources/variants/creality_cr10s5_0.5.inst.cfg new file mode 100644 index 0000000000..539b55464e --- /dev/null +++ b/resources/variants/creality_cr10s5_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_cr10s5 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_cr10s5_0.6.inst.cfg b/resources/variants/creality_cr10s5_0.6.inst.cfg new file mode 100644 index 0000000000..baac6bf9c9 --- /dev/null +++ b/resources/variants/creality_cr10s5_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_cr10s5 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_cr10s5_0.8.inst.cfg b/resources/variants/creality_cr10s5_0.8.inst.cfg new file mode 100644 index 0000000000..428e200113 --- /dev/null +++ b/resources/variants/creality_cr10s5_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_cr10s5 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_cr10s5_1.0.inst.cfg b/resources/variants/creality_cr10s5_1.0.inst.cfg new file mode 100644 index 0000000000..aa15d504ac --- /dev/null +++ b/resources/variants/creality_cr10s5_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_cr10s5 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/creality_cr10s_0.2.inst.cfg b/resources/variants/creality_cr10s_0.2.inst.cfg new file mode 100644 index 0000000000..1a605cca34 --- /dev/null +++ b/resources/variants/creality_cr10s_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_cr10s + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_cr10s_0.3.inst.cfg b/resources/variants/creality_cr10s_0.3.inst.cfg new file mode 100644 index 0000000000..4115dbb199 --- /dev/null +++ b/resources/variants/creality_cr10s_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_cr10s + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_cr10s_0.4.inst.cfg b/resources/variants/creality_cr10s_0.4.inst.cfg new file mode 100644 index 0000000000..d75b6a8e47 --- /dev/null +++ b/resources/variants/creality_cr10s_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_cr10s + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_cr10s_0.5.inst.cfg b/resources/variants/creality_cr10s_0.5.inst.cfg new file mode 100644 index 0000000000..e1bec0a62b --- /dev/null +++ b/resources/variants/creality_cr10s_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_cr10s + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_cr10s_0.6.inst.cfg b/resources/variants/creality_cr10s_0.6.inst.cfg new file mode 100644 index 0000000000..73ec3c2314 --- /dev/null +++ b/resources/variants/creality_cr10s_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_cr10s + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_cr10s_0.8.inst.cfg b/resources/variants/creality_cr10s_0.8.inst.cfg new file mode 100644 index 0000000000..7917b24e4d --- /dev/null +++ b/resources/variants/creality_cr10s_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_cr10s + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_cr10s_1.0.inst.cfg b/resources/variants/creality_cr10s_1.0.inst.cfg new file mode 100644 index 0000000000..fc1b217ba8 --- /dev/null +++ b/resources/variants/creality_cr10s_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_cr10s + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/creality_cr10spro_0.2.inst.cfg b/resources/variants/creality_cr10spro_0.2.inst.cfg new file mode 100644 index 0000000000..0ffded2b21 --- /dev/null +++ b/resources/variants/creality_cr10spro_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_cr10spro + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_cr10spro_0.3.inst.cfg b/resources/variants/creality_cr10spro_0.3.inst.cfg new file mode 100644 index 0000000000..eb3308f1c6 --- /dev/null +++ b/resources/variants/creality_cr10spro_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_cr10spro + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_cr10spro_0.4.inst.cfg b/resources/variants/creality_cr10spro_0.4.inst.cfg new file mode 100644 index 0000000000..bba3818260 --- /dev/null +++ b/resources/variants/creality_cr10spro_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_cr10spro + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_cr10spro_0.5.inst.cfg b/resources/variants/creality_cr10spro_0.5.inst.cfg new file mode 100644 index 0000000000..e60fbded2d --- /dev/null +++ b/resources/variants/creality_cr10spro_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_cr10spro + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_cr10spro_0.6.inst.cfg b/resources/variants/creality_cr10spro_0.6.inst.cfg new file mode 100644 index 0000000000..0912bb7272 --- /dev/null +++ b/resources/variants/creality_cr10spro_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_cr10spro + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_cr10spro_0.8.inst.cfg b/resources/variants/creality_cr10spro_0.8.inst.cfg new file mode 100644 index 0000000000..0e341137de --- /dev/null +++ b/resources/variants/creality_cr10spro_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_cr10spro + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_cr10spro_1.0.inst.cfg b/resources/variants/creality_cr10spro_1.0.inst.cfg new file mode 100644 index 0000000000..42da705c01 --- /dev/null +++ b/resources/variants/creality_cr10spro_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_cr10spro + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/creality_cr20_0.2.inst.cfg b/resources/variants/creality_cr20_0.2.inst.cfg new file mode 100644 index 0000000000..089f494ee8 --- /dev/null +++ b/resources/variants/creality_cr20_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_cr20 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_cr20_0.3.inst.cfg b/resources/variants/creality_cr20_0.3.inst.cfg new file mode 100644 index 0000000000..226767e273 --- /dev/null +++ b/resources/variants/creality_cr20_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_cr20 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_cr20_0.4.inst.cfg b/resources/variants/creality_cr20_0.4.inst.cfg new file mode 100644 index 0000000000..3c926d7b7a --- /dev/null +++ b/resources/variants/creality_cr20_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_cr20 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_cr20_0.5.inst.cfg b/resources/variants/creality_cr20_0.5.inst.cfg new file mode 100644 index 0000000000..2758eea044 --- /dev/null +++ b/resources/variants/creality_cr20_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_cr20 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_cr20_0.6.inst.cfg b/resources/variants/creality_cr20_0.6.inst.cfg new file mode 100644 index 0000000000..3a603c39d6 --- /dev/null +++ b/resources/variants/creality_cr20_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_cr20 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_cr20_0.8.inst.cfg b/resources/variants/creality_cr20_0.8.inst.cfg new file mode 100644 index 0000000000..948b21325f --- /dev/null +++ b/resources/variants/creality_cr20_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_cr20 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_cr20_1.0.inst.cfg b/resources/variants/creality_cr20_1.0.inst.cfg new file mode 100644 index 0000000000..67e5b0f136 --- /dev/null +++ b/resources/variants/creality_cr20_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_cr20 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/creality_cr20pro_0.2.inst.cfg b/resources/variants/creality_cr20pro_0.2.inst.cfg new file mode 100644 index 0000000000..19cbd228ab --- /dev/null +++ b/resources/variants/creality_cr20pro_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_cr20pro + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_cr20pro_0.3.inst.cfg b/resources/variants/creality_cr20pro_0.3.inst.cfg new file mode 100644 index 0000000000..967360b908 --- /dev/null +++ b/resources/variants/creality_cr20pro_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_cr20pro + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_cr20pro_0.4.inst.cfg b/resources/variants/creality_cr20pro_0.4.inst.cfg new file mode 100644 index 0000000000..efda313666 --- /dev/null +++ b/resources/variants/creality_cr20pro_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_cr20pro + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_cr20pro_0.5.inst.cfg b/resources/variants/creality_cr20pro_0.5.inst.cfg new file mode 100644 index 0000000000..64f84ed545 --- /dev/null +++ b/resources/variants/creality_cr20pro_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_cr20pro + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_cr20pro_0.6.inst.cfg b/resources/variants/creality_cr20pro_0.6.inst.cfg new file mode 100644 index 0000000000..835ad2a9e0 --- /dev/null +++ b/resources/variants/creality_cr20pro_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_cr20pro + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_cr20pro_0.8.inst.cfg b/resources/variants/creality_cr20pro_0.8.inst.cfg new file mode 100644 index 0000000000..d7447bbecf --- /dev/null +++ b/resources/variants/creality_cr20pro_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_cr20pro + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_cr20pro_1.0.inst.cfg b/resources/variants/creality_cr20pro_1.0.inst.cfg new file mode 100644 index 0000000000..47c7270add --- /dev/null +++ b/resources/variants/creality_cr20pro_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_cr20pro + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/creality_ender2_0.2.inst.cfg b/resources/variants/creality_ender2_0.2.inst.cfg new file mode 100644 index 0000000000..8f9373b263 --- /dev/null +++ b/resources/variants/creality_ender2_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_ender2 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_ender2_0.3.inst.cfg b/resources/variants/creality_ender2_0.3.inst.cfg new file mode 100644 index 0000000000..496dca9ef4 --- /dev/null +++ b/resources/variants/creality_ender2_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_ender2 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_ender2_0.4.inst.cfg b/resources/variants/creality_ender2_0.4.inst.cfg new file mode 100644 index 0000000000..0891305806 --- /dev/null +++ b/resources/variants/creality_ender2_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_ender2 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_ender2_0.5.inst.cfg b/resources/variants/creality_ender2_0.5.inst.cfg new file mode 100644 index 0000000000..fde911dd24 --- /dev/null +++ b/resources/variants/creality_ender2_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_ender2 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_ender2_0.6.inst.cfg b/resources/variants/creality_ender2_0.6.inst.cfg new file mode 100644 index 0000000000..dcf676920c --- /dev/null +++ b/resources/variants/creality_ender2_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_ender2 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_ender2_0.8.inst.cfg b/resources/variants/creality_ender2_0.8.inst.cfg new file mode 100644 index 0000000000..5532a65f19 --- /dev/null +++ b/resources/variants/creality_ender2_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_ender2 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_ender2_1.0.inst.cfg b/resources/variants/creality_ender2_1.0.inst.cfg new file mode 100644 index 0000000000..25f195e41b --- /dev/null +++ b/resources/variants/creality_ender2_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_ender2 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/creality_ender3_0.2.inst.cfg b/resources/variants/creality_ender3_0.2.inst.cfg new file mode 100644 index 0000000000..3cdd7e7c93 --- /dev/null +++ b/resources/variants/creality_ender3_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_ender3 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_ender3_0.3.inst.cfg b/resources/variants/creality_ender3_0.3.inst.cfg new file mode 100644 index 0000000000..9da7afd758 --- /dev/null +++ b/resources/variants/creality_ender3_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_ender3 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_ender3_0.4.inst.cfg b/resources/variants/creality_ender3_0.4.inst.cfg new file mode 100644 index 0000000000..a87c6d77bd --- /dev/null +++ b/resources/variants/creality_ender3_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_ender3 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_ender3_0.5.inst.cfg b/resources/variants/creality_ender3_0.5.inst.cfg new file mode 100644 index 0000000000..040502a921 --- /dev/null +++ b/resources/variants/creality_ender3_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_ender3 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_ender3_0.6.inst.cfg b/resources/variants/creality_ender3_0.6.inst.cfg new file mode 100644 index 0000000000..d161652a79 --- /dev/null +++ b/resources/variants/creality_ender3_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_ender3 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_ender3_0.8.inst.cfg b/resources/variants/creality_ender3_0.8.inst.cfg new file mode 100644 index 0000000000..ce9947642e --- /dev/null +++ b/resources/variants/creality_ender3_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_ender3 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_ender3_1.0.inst.cfg b/resources/variants/creality_ender3_1.0.inst.cfg new file mode 100644 index 0000000000..cf6c6ed752 --- /dev/null +++ b/resources/variants/creality_ender3_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_ender3 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/creality_ender4_0.2.inst.cfg b/resources/variants/creality_ender4_0.2.inst.cfg new file mode 100644 index 0000000000..f6e7372c1a --- /dev/null +++ b/resources/variants/creality_ender4_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_ender4 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_ender4_0.3.inst.cfg b/resources/variants/creality_ender4_0.3.inst.cfg new file mode 100644 index 0000000000..644fa86c25 --- /dev/null +++ b/resources/variants/creality_ender4_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_ender4 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_ender4_0.4.inst.cfg b/resources/variants/creality_ender4_0.4.inst.cfg new file mode 100644 index 0000000000..1949813c36 --- /dev/null +++ b/resources/variants/creality_ender4_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_ender4 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_ender4_0.5.inst.cfg b/resources/variants/creality_ender4_0.5.inst.cfg new file mode 100644 index 0000000000..8b4a83e187 --- /dev/null +++ b/resources/variants/creality_ender4_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_ender4 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_ender4_0.6.inst.cfg b/resources/variants/creality_ender4_0.6.inst.cfg new file mode 100644 index 0000000000..6961a6d314 --- /dev/null +++ b/resources/variants/creality_ender4_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_ender4 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_ender4_0.8.inst.cfg b/resources/variants/creality_ender4_0.8.inst.cfg new file mode 100644 index 0000000000..1499efa525 --- /dev/null +++ b/resources/variants/creality_ender4_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_ender4 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_ender4_1.0.inst.cfg b/resources/variants/creality_ender4_1.0.inst.cfg new file mode 100644 index 0000000000..446907a101 --- /dev/null +++ b/resources/variants/creality_ender4_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_ender4 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/creality_ender5_0.2.inst.cfg b/resources/variants/creality_ender5_0.2.inst.cfg new file mode 100644 index 0000000000..df6f83c34c --- /dev/null +++ b/resources/variants/creality_ender5_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_ender5 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_ender5_0.3.inst.cfg b/resources/variants/creality_ender5_0.3.inst.cfg new file mode 100644 index 0000000000..2b44699709 --- /dev/null +++ b/resources/variants/creality_ender5_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_ender5 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_ender5_0.4.inst.cfg b/resources/variants/creality_ender5_0.4.inst.cfg new file mode 100644 index 0000000000..f5b4c0f06d --- /dev/null +++ b/resources/variants/creality_ender5_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_ender5 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_ender5_0.5.inst.cfg b/resources/variants/creality_ender5_0.5.inst.cfg new file mode 100644 index 0000000000..773ec1c80d --- /dev/null +++ b/resources/variants/creality_ender5_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_ender5 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_ender5_0.6.inst.cfg b/resources/variants/creality_ender5_0.6.inst.cfg new file mode 100644 index 0000000000..e32cb3db8b --- /dev/null +++ b/resources/variants/creality_ender5_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_ender5 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_ender5_0.8.inst.cfg b/resources/variants/creality_ender5_0.8.inst.cfg new file mode 100644 index 0000000000..329b3f03bc --- /dev/null +++ b/resources/variants/creality_ender5_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_ender5 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_ender5_1.0.inst.cfg b/resources/variants/creality_ender5_1.0.inst.cfg new file mode 100644 index 0000000000..fdbb2bdeaf --- /dev/null +++ b/resources/variants/creality_ender5_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_ender5 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/creality_ender5plus_0.2.inst.cfg b/resources/variants/creality_ender5plus_0.2.inst.cfg new file mode 100644 index 0000000000..583a5604d2 --- /dev/null +++ b/resources/variants/creality_ender5plus_0.2.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.2mm Nozzle +version = 4 +definition = creality_ender5plus + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.2 diff --git a/resources/variants/creality_ender5plus_0.3.inst.cfg b/resources/variants/creality_ender5plus_0.3.inst.cfg new file mode 100644 index 0000000000..ae1d33d78b --- /dev/null +++ b/resources/variants/creality_ender5plus_0.3.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.3mm Nozzle +version = 4 +definition = creality_ender5plus + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.3 diff --git a/resources/variants/creality_ender5plus_0.4.inst.cfg b/resources/variants/creality_ender5plus_0.4.inst.cfg new file mode 100644 index 0000000000..8af2405f93 --- /dev/null +++ b/resources/variants/creality_ender5plus_0.4.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.4mm Nozzle +version = 4 +definition = creality_ender5plus + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/creality_ender5plus_0.5.inst.cfg b/resources/variants/creality_ender5plus_0.5.inst.cfg new file mode 100644 index 0000000000..61db41b0b9 --- /dev/null +++ b/resources/variants/creality_ender5plus_0.5.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.5mm Nozzle +version = 4 +definition = creality_ender5plus + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/creality_ender5plus_0.6.inst.cfg b/resources/variants/creality_ender5plus_0.6.inst.cfg new file mode 100644 index 0000000000..4f9aea34db --- /dev/null +++ b/resources/variants/creality_ender5plus_0.6.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.6mm Nozzle +version = 4 +definition = creality_ender5plus + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/creality_ender5plus_0.8.inst.cfg b/resources/variants/creality_ender5plus_0.8.inst.cfg new file mode 100644 index 0000000000..137bb93253 --- /dev/null +++ b/resources/variants/creality_ender5plus_0.8.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 0.8mm Nozzle +version = 4 +definition = creality_ender5plus + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.8 diff --git a/resources/variants/creality_ender5plus_1.0.inst.cfg b/resources/variants/creality_ender5plus_1.0.inst.cfg new file mode 100644 index 0000000000..a7aa3a3a49 --- /dev/null +++ b/resources/variants/creality_ender5plus_1.0.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = 1.0mm Nozzle +version = 4 +definition = creality_ender5plus + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.0 diff --git a/resources/variants/deltacomb_025_e3d.inst.cfg b/resources/variants/deltacomb_025_e3d.inst.cfg index fd6575bf9a..1685ddacab 100755 --- a/resources/variants/deltacomb_025_e3d.inst.cfg +++ b/resources/variants/deltacomb_025_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = deltacomb [metadata] author = Deltacomb 3D -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb_040_e3d.inst.cfg b/resources/variants/deltacomb_040_e3d.inst.cfg index 3fab3e74c7..e3b1c2c5bb 100755 --- a/resources/variants/deltacomb_040_e3d.inst.cfg +++ b/resources/variants/deltacomb_040_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = deltacomb [metadata] author = Deltacomb 3D -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb_080_e3d.inst.cfg b/resources/variants/deltacomb_080_e3d.inst.cfg index 61f8226280..bd24120ba3 100755 --- a/resources/variants/deltacomb_080_e3d.inst.cfg +++ b/resources/variants/deltacomb_080_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = deltacomb [metadata] author = Deltacomb 3D -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_hyb35.inst.cfg b/resources/variants/fabtotum_hyb35.inst.cfg index bf00512c8f..5dff2c12d5 100644 --- a/resources/variants/fabtotum_hyb35.inst.cfg +++ b/resources/variants/fabtotum_hyb35.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_lite04.inst.cfg b/resources/variants/fabtotum_lite04.inst.cfg index cb4f7e4d34..ba57935fc6 100644 --- a/resources/variants/fabtotum_lite04.inst.cfg +++ b/resources/variants/fabtotum_lite04.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_lite06.inst.cfg b/resources/variants/fabtotum_lite06.inst.cfg index 9f0e3fe145..573cee1af3 100644 --- a/resources/variants/fabtotum_lite06.inst.cfg +++ b/resources/variants/fabtotum_lite06.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_pro02.inst.cfg b/resources/variants/fabtotum_pro02.inst.cfg index b80f80155b..26f5febec3 100644 --- a/resources/variants/fabtotum_pro02.inst.cfg +++ b/resources/variants/fabtotum_pro02.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_pro04.inst.cfg b/resources/variants/fabtotum_pro04.inst.cfg index 7a0afdccb2..a6d9043808 100644 --- a/resources/variants/fabtotum_pro04.inst.cfg +++ b/resources/variants/fabtotum_pro04.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_pro06.inst.cfg b/resources/variants/fabtotum_pro06.inst.cfg index 6330b2e77c..8ae1698831 100644 --- a/resources/variants/fabtotum_pro06.inst.cfg +++ b/resources/variants/fabtotum_pro06.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_pro08.inst.cfg b/resources/variants/fabtotum_pro08.inst.cfg index 412bbf7410..1d5d3d2528 100644 --- a/resources/variants/fabtotum_pro08.inst.cfg +++ b/resources/variants/fabtotum_pro08.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/hms434_0.25tpnozzle.inst.cfg b/resources/variants/felixpro2_0.25.inst.cfg similarity index 50% rename from resources/variants/hms434_0.25tpnozzle.inst.cfg rename to resources/variants/felixpro2_0.25.inst.cfg index 72e4afe87a..9359da0bc0 100644 --- a/resources/variants/hms434_0.25tpnozzle.inst.cfg +++ b/resources/variants/felixpro2_0.25.inst.cfg @@ -1,13 +1,14 @@ [general] -name = 0.25mm TP extruder +name = 0.25 mm version = 4 -definition = hms434 +definition = felixpro2dual [metadata] -setting_version = 7 +author = pnks type = variant +setting_version = 10 hardware_type = nozzle [values] machine_nozzle_size = 0.25 -machine_nozzle_tip_outer_diameter = 1.05 +layer_height_0 = 0.15 diff --git a/resources/variants/felixpro2_0.35.inst.cfg b/resources/variants/felixpro2_0.35.inst.cfg new file mode 100644 index 0000000000..3572fce149 --- /dev/null +++ b/resources/variants/felixpro2_0.35.inst.cfg @@ -0,0 +1,14 @@ +[general] +name = 0.35 mm +version = 4 +definition = felixpro2dual + +[metadata] +author = pnks +type = variant +setting_version = 10 +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.35 +layer_height_0 = 0.2 diff --git a/resources/variants/felixpro2_0.50.inst.cfg b/resources/variants/felixpro2_0.50.inst.cfg new file mode 100644 index 0000000000..d390d22ba9 --- /dev/null +++ b/resources/variants/felixpro2_0.50.inst.cfg @@ -0,0 +1,13 @@ +[general] +name = 0.50 mm +version = 4 +definition = felixpro2dual + +[metadata] +author = pnks +type = variant +setting_version = 10 +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.5 diff --git a/resources/variants/felixpro2_0.70.inst.cfg b/resources/variants/felixpro2_0.70.inst.cfg new file mode 100644 index 0000000000..40ca526023 --- /dev/null +++ b/resources/variants/felixpro2_0.70.inst.cfg @@ -0,0 +1,14 @@ +[general] +name = 0.70 mm +version = 4 +definition = felixpro2dual + +[metadata] +author = pnks +type = variant +setting_version = 10 +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.70 +layer_height_0 = 0.4 diff --git a/resources/variants/felixtec4_0.25.inst.cfg b/resources/variants/felixtec4_0.25.inst.cfg index 7a158bcc80..a95f96feea 100644 --- a/resources/variants/felixtec4_0.25.inst.cfg +++ b/resources/variants/felixtec4_0.25.inst.cfg @@ -6,7 +6,7 @@ definition = felixtec4dual [metadata] author = kerog777 type = variant -setting_version = 7 +setting_version = 10 hardware_type = nozzle [values] diff --git a/resources/variants/felixtec4_0.35.inst.cfg b/resources/variants/felixtec4_0.35.inst.cfg index 35850afa7a..fadd19bed7 100644 --- a/resources/variants/felixtec4_0.35.inst.cfg +++ b/resources/variants/felixtec4_0.35.inst.cfg @@ -6,7 +6,7 @@ definition = felixtec4dual [metadata] author = kerog777 type = variant -setting_version = 7 +setting_version = 10 hardware_type = nozzle [values] diff --git a/resources/variants/felixtec4_0.50.inst.cfg b/resources/variants/felixtec4_0.50.inst.cfg index d4ee356132..98bc237c18 100644 --- a/resources/variants/felixtec4_0.50.inst.cfg +++ b/resources/variants/felixtec4_0.50.inst.cfg @@ -7,7 +7,7 @@ definition = felixtec4dual author = kerog777 type = variant hardware_type = nozzle -setting_version = 7 +setting_version = 10 [values] machine_nozzle_size = 0.5 diff --git a/resources/variants/felixtec4_0.70.inst.cfg b/resources/variants/felixtec4_0.70.inst.cfg index b5dfc3758c..6a731870a9 100644 --- a/resources/variants/felixtec4_0.70.inst.cfg +++ b/resources/variants/felixtec4_0.70.inst.cfg @@ -7,7 +7,7 @@ definition = felixtec4dual author = kerog777 type = variant hardware_type = nozzle -setting_version = 7 +setting_version = 10 [values] machine_nozzle_size = 0.70 diff --git a/resources/variants/gmax15plus_025_e3d.inst.cfg b/resources/variants/gmax15plus_025_e3d.inst.cfg index 42d692d5df..4bf7b7765e 100644 --- a/resources/variants/gmax15plus_025_e3d.inst.cfg +++ b/resources/variants/gmax15plus_025_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_04_e3d.inst.cfg b/resources/variants/gmax15plus_04_e3d.inst.cfg index fca1fd837d..a4cc8e8db9 100644 --- a/resources/variants/gmax15plus_04_e3d.inst.cfg +++ b/resources/variants/gmax15plus_04_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_05_e3d.inst.cfg b/resources/variants/gmax15plus_05_e3d.inst.cfg index 9c514dea8f..0269c03480 100644 --- a/resources/variants/gmax15plus_05_e3d.inst.cfg +++ b/resources/variants/gmax15plus_05_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_05_jhead.inst.cfg b/resources/variants/gmax15plus_05_jhead.inst.cfg index 29dded70e2..909cf7386e 100644 --- a/resources/variants/gmax15plus_05_jhead.inst.cfg +++ b/resources/variants/gmax15plus_05_jhead.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_06_e3d.inst.cfg b/resources/variants/gmax15plus_06_e3d.inst.cfg index 18569ff55a..266b45d25c 100644 --- a/resources/variants/gmax15plus_06_e3d.inst.cfg +++ b/resources/variants/gmax15plus_06_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_08_e3d.inst.cfg b/resources/variants/gmax15plus_08_e3d.inst.cfg index 5ec1ce6916..11f5e2f608 100644 --- a/resources/variants/gmax15plus_08_e3d.inst.cfg +++ b/resources/variants/gmax15plus_08_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_10_jhead.inst.cfg b/resources/variants/gmax15plus_10_jhead.inst.cfg index 81c8ce2fcc..688add6c34 100644 --- a/resources/variants/gmax15plus_10_jhead.inst.cfg +++ b/resources/variants/gmax15plus_10_jhead.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_12_e3d.inst.cfg b/resources/variants/gmax15plus_12_e3d.inst.cfg index 3381f53cd0..357aaed672 100644 --- a/resources/variants/gmax15plus_12_e3d.inst.cfg +++ b/resources/variants/gmax15plus_12_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_025_e3d.inst.cfg b/resources/variants/gmax15plus_dual_025_e3d.inst.cfg index a3d22f8629..a04b5cc8be 100644 --- a/resources/variants/gmax15plus_dual_025_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_025_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_04_e3d.inst.cfg b/resources/variants/gmax15plus_dual_04_e3d.inst.cfg index 4338432b10..facedf04a6 100644 --- a/resources/variants/gmax15plus_dual_04_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_04_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_05_e3d.inst.cfg b/resources/variants/gmax15plus_dual_05_e3d.inst.cfg index 1c1151324c..7d866b19d0 100644 --- a/resources/variants/gmax15plus_dual_05_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_05_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_05_jhead.inst.cfg b/resources/variants/gmax15plus_dual_05_jhead.inst.cfg index ce2e9546be..7824d1dfd8 100644 --- a/resources/variants/gmax15plus_dual_05_jhead.inst.cfg +++ b/resources/variants/gmax15plus_dual_05_jhead.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_06_e3d.inst.cfg b/resources/variants/gmax15plus_dual_06_e3d.inst.cfg index ec2f378ff5..1cbc7ecbfc 100644 --- a/resources/variants/gmax15plus_dual_06_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_06_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_08_e3d.inst.cfg b/resources/variants/gmax15plus_dual_08_e3d.inst.cfg index 06f9969302..6756e64862 100644 --- a/resources/variants/gmax15plus_dual_08_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_08_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_10_jhead.inst.cfg b/resources/variants/gmax15plus_dual_10_jhead.inst.cfg index 6fefc37862..95f347ec0e 100644 --- a/resources/variants/gmax15plus_dual_10_jhead.inst.cfg +++ b/resources/variants/gmax15plus_dual_10_jhead.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/hms434_0.4tpnozzle.inst.cfg b/resources/variants/hms434_0.4tpnozzle.inst.cfg index 64bf1d6e63..20f2ca808a 100644 --- a/resources/variants/hms434_0.4tpnozzle.inst.cfg +++ b/resources/variants/hms434_0.4tpnozzle.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = hms434 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/hms434_0.8tpnozzle.inst.cfg b/resources/variants/hms434_0.8tpnozzle.inst.cfg index 1a09188dc4..076412b8bb 100644 --- a/resources/variants/hms434_0.8tpnozzle.inst.cfg +++ b/resources/variants/hms434_0.8tpnozzle.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = hms434 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/hms434_1.2tpnozzle.inst.cfg b/resources/variants/hms434_1.2tpnozzle.inst.cfg deleted file mode 100644 index 21ef8f2a17..0000000000 --- a/resources/variants/hms434_1.2tpnozzle.inst.cfg +++ /dev/null @@ -1,13 +0,0 @@ -[general] -name = 1.2mm TP extruder -version = 4 -definition = hms434 - -[metadata] -setting_version = 7 -type = variant -hardware_type = nozzle - -[values] -machine_nozzle_size = 1.2 -machine_nozzle_tip_outer_diameter = 1.3 diff --git a/resources/variants/hms434_1.5tpnozzle.inst.cfg b/resources/variants/hms434_1.5tpnozzle.inst.cfg deleted file mode 100644 index 23aeffaee5..0000000000 --- a/resources/variants/hms434_1.5tpnozzle.inst.cfg +++ /dev/null @@ -1,13 +0,0 @@ -[general] -name = 1.5mm TP extruder -version = 4 -definition = hms434 - -[metadata] -setting_version = 7 -type = variant -hardware_type = nozzle - -[values] -machine_nozzle_size = 1.5 -machine_nozzle_tip_outer_diameter = 1.6 diff --git a/resources/variants/imade3d_jellybox_0.4.inst.cfg b/resources/variants/imade3d_jellybox_0.4.inst.cfg index 18481a8342..2278bd8471 100644 --- a/resources/variants/imade3d_jellybox_0.4.inst.cfg +++ b/resources/variants/imade3d_jellybox_0.4.inst.cfg @@ -5,7 +5,7 @@ definition = imade3d_jellybox [metadata] author = IMADE3D -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg b/resources/variants/imade3d_jellybox_2_0.4.inst.cfg similarity index 63% rename from resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg rename to resources/variants/imade3d_jellybox_2_0.4.inst.cfg index 2f4d35676e..4220d3d141 100644 --- a/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg +++ b/resources/variants/imade3d_jellybox_2_0.4.inst.cfg @@ -1,11 +1,11 @@ [general] -name = 0.4 mm 2-fans +name = 0.4 mm version = 4 -definition = imade3d_jellybox +definition = imade3d_jellybox_2 [metadata] author = IMADE3D -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/nwa3d_a31_04.inst.cfg b/resources/variants/nwa3d_a31_04.inst.cfg new file mode 100644 index 0000000000..a18911507f --- /dev/null +++ b/resources/variants/nwa3d_a31_04.inst.cfg @@ -0,0 +1,13 @@ +[general] +name = Standard 0.4mm +version = 4 +definition = nwa3d_a31 + +[metadata] +author = DragonJe +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.4 diff --git a/resources/variants/nwa3d_a31_06.inst.cfg b/resources/variants/nwa3d_a31_06.inst.cfg new file mode 100644 index 0000000000..e96ebf2014 --- /dev/null +++ b/resources/variants/nwa3d_a31_06.inst.cfg @@ -0,0 +1,13 @@ +[general] +name = Engineering 0.6mm +version = 4 +definition = nwa3d_a31 + +[metadata] +author = DragonJe +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.6 diff --git a/resources/variants/strateo3d_standard_04.inst.cfg b/resources/variants/strateo3d_standard_04.inst.cfg new file mode 100644 index 0000000000..29cd075177 --- /dev/null +++ b/resources/variants/strateo3d_standard_04.inst.cfg @@ -0,0 +1,20 @@ +[general] +name = Standard 0.4 +version = 4 +definition = strateo3d + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_id = Standard 0.4 +machine_nozzle_size = 0.4 +machine_nozzle_tip_outer_diameter = 1.0 +layer_height = 0.2 +layer_height_0 = 0.3 +prime_tower_enable = True +retract_at_layer_change = False +support_angle = 60 +support_use_towers = True \ No newline at end of file diff --git a/resources/variants/strateo3d_standard_06.inst.cfg b/resources/variants/strateo3d_standard_06.inst.cfg new file mode 100644 index 0000000000..b4618f2bd8 --- /dev/null +++ b/resources/variants/strateo3d_standard_06.inst.cfg @@ -0,0 +1,20 @@ +[general] +name = Standard 0.6 +version = 4 +definition = strateo3d + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_id = Standard 0.6 +machine_nozzle_size = 0.6 +machine_nozzle_tip_outer_diameter = 1.5 +layer_height = 0.3 +layer_height_0 = 0.4 +prime_tower_enable = True +retract_at_layer_change = False +support_angle = 55 +support_use_towers = True \ No newline at end of file diff --git a/resources/variants/structur3d_discov3ry1_complete_um2plus_0.20.inst.cfg b/resources/variants/structur3d_discov3ry1_complete_um2plus_0.20.inst.cfg index bd67b654cd..8b2daab709 100644 --- a/resources/variants/structur3d_discov3ry1_complete_um2plus_0.20.inst.cfg +++ b/resources/variants/structur3d_discov3ry1_complete_um2plus_0.20.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = structur3d_discov3ry1_complete_um2plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/structur3d_discov3ry1_complete_um2plus_0.25.inst.cfg b/resources/variants/structur3d_discov3ry1_complete_um2plus_0.25.inst.cfg index 389984f293..06836d8d67 100644 --- a/resources/variants/structur3d_discov3ry1_complete_um2plus_0.25.inst.cfg +++ b/resources/variants/structur3d_discov3ry1_complete_um2plus_0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = structur3d_discov3ry1_complete_um2plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/structur3d_discov3ry1_complete_um2plus_0.41.inst.cfg b/resources/variants/structur3d_discov3ry1_complete_um2plus_0.41.inst.cfg index f6936233e9..11df55d473 100644 --- a/resources/variants/structur3d_discov3ry1_complete_um2plus_0.41.inst.cfg +++ b/resources/variants/structur3d_discov3ry1_complete_um2plus_0.41.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = structur3d_discov3ry1_complete_um2plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/structur3d_discov3ry1_complete_um2plus_0.58.inst.cfg b/resources/variants/structur3d_discov3ry1_complete_um2plus_0.58.inst.cfg index b30770afc4..bbf9c14afa 100644 --- a/resources/variants/structur3d_discov3ry1_complete_um2plus_0.58.inst.cfg +++ b/resources/variants/structur3d_discov3ry1_complete_um2plus_0.58.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = structur3d_discov3ry1_complete_um2plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/structur3d_discov3ry1_complete_um2plus_0.84.inst.cfg b/resources/variants/structur3d_discov3ry1_complete_um2plus_0.84.inst.cfg index b83bef727d..6da3a58b8f 100644 --- a/resources/variants/structur3d_discov3ry1_complete_um2plus_0.84.inst.cfg +++ b/resources/variants/structur3d_discov3ry1_complete_um2plus_0.84.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = structur3d_discov3ry1_complete_um2plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/structur3d_discov3ry1_complete_um2plus_1.19.inst.cfg b/resources/variants/structur3d_discov3ry1_complete_um2plus_1.19.inst.cfg index 9a0f4922ef..6e0a9d89e6 100644 --- a/resources/variants/structur3d_discov3ry1_complete_um2plus_1.19.inst.cfg +++ b/resources/variants/structur3d_discov3ry1_complete_um2plus_1.19.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = structur3d_discov3ry1_complete_um2plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/structur3d_discov3ry1_complete_um2plus_1.60.inst.cfg b/resources/variants/structur3d_discov3ry1_complete_um2plus_1.60.inst.cfg index a235f406c0..b5faa591d9 100644 --- a/resources/variants/structur3d_discov3ry1_complete_um2plus_1.60.inst.cfg +++ b/resources/variants/structur3d_discov3ry1_complete_um2plus_1.60.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = structur3d_discov3ry1_complete_um2plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_evy_0.2.inst.cfg b/resources/variants/tizyx_evy_0.2.inst.cfg index 94a72926a5..4b17b4504e 100644 --- a/resources/variants/tizyx_evy_0.2.inst.cfg +++ b/resources/variants/tizyx_evy_0.2.inst.cfg @@ -5,7 +5,7 @@ definition = tizyx_evy [metadata] author = TiZYX -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_evy_0.3.inst.cfg b/resources/variants/tizyx_evy_0.3.inst.cfg index 4a1594b625..e99fba1f35 100644 --- a/resources/variants/tizyx_evy_0.3.inst.cfg +++ b/resources/variants/tizyx_evy_0.3.inst.cfg @@ -5,7 +5,7 @@ definition = tizyx_evy [metadata] author = TiZYX -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_evy_0.4.inst.cfg b/resources/variants/tizyx_evy_0.4.inst.cfg index ab67d2492e..bc8b2d4506 100644 --- a/resources/variants/tizyx_evy_0.4.inst.cfg +++ b/resources/variants/tizyx_evy_0.4.inst.cfg @@ -5,7 +5,7 @@ definition = tizyx_evy [metadata] author = TiZYX -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_evy_0.5.inst.cfg b/resources/variants/tizyx_evy_0.5.inst.cfg index 6b1cf6b0fb..1b6b543928 100644 --- a/resources/variants/tizyx_evy_0.5.inst.cfg +++ b/resources/variants/tizyx_evy_0.5.inst.cfg @@ -5,7 +5,7 @@ definition = tizyx_evy [metadata] author = TiZYX -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_evy_0.6.inst.cfg b/resources/variants/tizyx_evy_0.6.inst.cfg index 58368245cf..4b4a7f9bfa 100644 --- a/resources/variants/tizyx_evy_0.6.inst.cfg +++ b/resources/variants/tizyx_evy_0.6.inst.cfg @@ -5,7 +5,7 @@ definition = tizyx_evy [metadata] author = TiZYX -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_evy_0.8.inst.cfg b/resources/variants/tizyx_evy_0.8.inst.cfg index 8f6d8ce633..8f60c8fee8 100644 --- a/resources/variants/tizyx_evy_0.8.inst.cfg +++ b/resources/variants/tizyx_evy_0.8.inst.cfg @@ -5,7 +5,7 @@ definition = tizyx_evy [metadata] author = TiZYX -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_evy_1.0.inst.cfg b/resources/variants/tizyx_evy_1.0.inst.cfg index 7e00752a90..000a99da83 100644 --- a/resources/variants/tizyx_evy_1.0.inst.cfg +++ b/resources/variants/tizyx_evy_1.0.inst.cfg @@ -5,7 +5,7 @@ definition = tizyx_evy [metadata] author = TiZYX -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_evy_dual_classic.inst.cfg b/resources/variants/tizyx_evy_dual_classic.inst.cfg index 00b7a7745a..3aec98dbd5 100644 --- a/resources/variants/tizyx_evy_dual_classic.inst.cfg +++ b/resources/variants/tizyx_evy_dual_classic.inst.cfg @@ -5,9 +5,11 @@ definition = tizyx_evy_dual [metadata] author = TiZYX -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.4 \ No newline at end of file +machine_nozzle_size = 0.4 +switch_extruder_retraction_amount = 100 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/variants/tizyx_evy_dual_direct_drive.inst.cfg b/resources/variants/tizyx_evy_dual_direct_drive.inst.cfg index 7bc450607e..e5a4d1968b 100644 --- a/resources/variants/tizyx_evy_dual_direct_drive.inst.cfg +++ b/resources/variants/tizyx_evy_dual_direct_drive.inst.cfg @@ -5,9 +5,11 @@ definition = tizyx_evy_dual [metadata] author = TiZYX -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.4 \ No newline at end of file +machine_nozzle_size = 0.4 +switch_extruder_retraction_amount = 72 +switch_extruder_retraction_speeds = 70 \ No newline at end of file diff --git a/resources/variants/tizyx_k25_0.2.inst.cfg b/resources/variants/tizyx_k25_0.2.inst.cfg index 589d50f93c..7e47eade66 100644 --- a/resources/variants/tizyx_k25_0.2.inst.cfg +++ b/resources/variants/tizyx_k25_0.2.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = tizyx_k25 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_k25_0.3.inst.cfg b/resources/variants/tizyx_k25_0.3.inst.cfg index 41612baa4d..eb16b525c0 100644 --- a/resources/variants/tizyx_k25_0.3.inst.cfg +++ b/resources/variants/tizyx_k25_0.3.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = tizyx_k25 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_k25_0.4.inst.cfg b/resources/variants/tizyx_k25_0.4.inst.cfg index b3fca877b3..efcaa8d51f 100644 --- a/resources/variants/tizyx_k25_0.4.inst.cfg +++ b/resources/variants/tizyx_k25_0.4.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = tizyx_k25 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_k25_0.5.inst.cfg b/resources/variants/tizyx_k25_0.5.inst.cfg index e0dd4f1054..ee74d24961 100644 --- a/resources/variants/tizyx_k25_0.5.inst.cfg +++ b/resources/variants/tizyx_k25_0.5.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = tizyx_k25 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_k25_0.6.inst.cfg b/resources/variants/tizyx_k25_0.6.inst.cfg index d2aebe4695..ad2bb9f9c9 100644 --- a/resources/variants/tizyx_k25_0.6.inst.cfg +++ b/resources/variants/tizyx_k25_0.6.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = tizyx_k25 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_k25_0.8.inst.cfg b/resources/variants/tizyx_k25_0.8.inst.cfg index 5a425988ee..05126457ee 100644 --- a/resources/variants/tizyx_k25_0.8.inst.cfg +++ b/resources/variants/tizyx_k25_0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = tizyx_k25 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_k25_1.0.inst.cfg b/resources/variants/tizyx_k25_1.0.inst.cfg index 01c8944960..065ca23cfb 100644 --- a/resources/variants/tizyx_k25_1.0.inst.cfg +++ b/resources/variants/tizyx_k25_1.0.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = tizyx_k25 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_0.25.inst.cfg b/resources/variants/ultimaker2_extended_olsson_0.25.inst.cfg similarity index 72% rename from resources/variants/ultimaker2_extended_0.25.inst.cfg rename to resources/variants/ultimaker2_extended_olsson_0.25.inst.cfg index eceb659e21..a18cf745f7 100644 --- a/resources/variants/ultimaker2_extended_0.25.inst.cfg +++ b/resources/variants/ultimaker2_extended_olsson_0.25.inst.cfg @@ -1,10 +1,10 @@ [general] name = 0.25 mm version = 4 -definition = ultimaker2_extended +definition = ultimaker2_extended_olsson [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_0.4.inst.cfg b/resources/variants/ultimaker2_extended_olsson_0.4.inst.cfg similarity index 72% rename from resources/variants/ultimaker2_extended_0.4.inst.cfg rename to resources/variants/ultimaker2_extended_olsson_0.4.inst.cfg index e3dad7fd56..65d86c419d 100644 --- a/resources/variants/ultimaker2_extended_0.4.inst.cfg +++ b/resources/variants/ultimaker2_extended_olsson_0.4.inst.cfg @@ -1,10 +1,10 @@ [general] name = 0.4 mm version = 4 -definition = ultimaker2_extended +definition = ultimaker2_extended_olsson [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_0.6.inst.cfg b/resources/variants/ultimaker2_extended_olsson_0.6.inst.cfg similarity index 72% rename from resources/variants/ultimaker2_extended_0.6.inst.cfg rename to resources/variants/ultimaker2_extended_olsson_0.6.inst.cfg index 82a5c08362..274b371448 100644 --- a/resources/variants/ultimaker2_extended_0.6.inst.cfg +++ b/resources/variants/ultimaker2_extended_olsson_0.6.inst.cfg @@ -1,10 +1,10 @@ [general] name = 0.6 mm version = 4 -definition = ultimaker2_extended +definition = ultimaker2_extended_olsson [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_0.8.inst.cfg b/resources/variants/ultimaker2_extended_olsson_0.8.inst.cfg similarity index 72% rename from resources/variants/ultimaker2_extended_0.8.inst.cfg rename to resources/variants/ultimaker2_extended_olsson_0.8.inst.cfg index 4f9d1d8889..9b43296950 100644 --- a/resources/variants/ultimaker2_extended_0.8.inst.cfg +++ b/resources/variants/ultimaker2_extended_olsson_0.8.inst.cfg @@ -1,10 +1,10 @@ [general] name = 0.8 mm version = 4 -definition = ultimaker2_extended +definition = ultimaker2_extended_olsson [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg index 034d094e86..374ed2120a 100644 --- a/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended_plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg index 976e129393..66aaf862fa 100644 --- a/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended_plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg index b7cbe8fa62..3dc24ea7f8 100644 --- a/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended_plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg index 437e107e89..9179cd2249 100644 --- a/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended_plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_0.25.inst.cfg b/resources/variants/ultimaker2_olsson_0.25.inst.cfg similarity index 77% rename from resources/variants/ultimaker2_0.25.inst.cfg rename to resources/variants/ultimaker2_olsson_0.25.inst.cfg index 87bb0a237d..dd33048059 100644 --- a/resources/variants/ultimaker2_0.25.inst.cfg +++ b/resources/variants/ultimaker2_olsson_0.25.inst.cfg @@ -1,10 +1,10 @@ [general] name = 0.25 mm version = 4 -definition = ultimaker2 +definition = ultimaker2_olsson [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_0.4.inst.cfg b/resources/variants/ultimaker2_olsson_0.4.inst.cfg similarity index 75% rename from resources/variants/ultimaker2_0.4.inst.cfg rename to resources/variants/ultimaker2_olsson_0.4.inst.cfg index b50cc32eca..77e1f523e0 100644 --- a/resources/variants/ultimaker2_0.4.inst.cfg +++ b/resources/variants/ultimaker2_olsson_0.4.inst.cfg @@ -1,10 +1,10 @@ [general] name = 0.4 mm version = 4 -definition = ultimaker2 +definition = ultimaker2_olsson [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_0.6.inst.cfg b/resources/variants/ultimaker2_olsson_0.6.inst.cfg similarity index 75% rename from resources/variants/ultimaker2_0.6.inst.cfg rename to resources/variants/ultimaker2_olsson_0.6.inst.cfg index fac65ed284..57a30eab82 100644 --- a/resources/variants/ultimaker2_0.6.inst.cfg +++ b/resources/variants/ultimaker2_olsson_0.6.inst.cfg @@ -1,10 +1,10 @@ [general] name = 0.6 mm version = 4 -definition = ultimaker2 +definition = ultimaker2_olsson [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_0.8.inst.cfg b/resources/variants/ultimaker2_olsson_0.8.inst.cfg similarity index 75% rename from resources/variants/ultimaker2_0.8.inst.cfg rename to resources/variants/ultimaker2_olsson_0.8.inst.cfg index 9177e8e6ee..2e47ebb5cf 100644 --- a/resources/variants/ultimaker2_0.8.inst.cfg +++ b/resources/variants/ultimaker2_olsson_0.8.inst.cfg @@ -1,10 +1,10 @@ [general] name = 0.8 mm version = 4 -definition = ultimaker2 +definition = ultimaker2_olsson [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_plus_0.25.inst.cfg b/resources/variants/ultimaker2_plus_0.25.inst.cfg index 0880159d03..938e17335d 100644 --- a/resources/variants/ultimaker2_plus_0.25.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_plus_0.4.inst.cfg b/resources/variants/ultimaker2_plus_0.4.inst.cfg index 4543c148bb..cb7d2bf54b 100644 --- a/resources/variants/ultimaker2_plus_0.4.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.4.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_plus_0.6.inst.cfg b/resources/variants/ultimaker2_plus_0.6.inst.cfg index 57ff6714a7..4a2523fca1 100644 --- a/resources/variants/ultimaker2_plus_0.6.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.6.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_plus_0.8.inst.cfg b/resources/variants/ultimaker2_plus_0.8.inst.cfg index 0fd1b50c5f..09ad29e698 100644 --- a/resources/variants/ultimaker2_plus_0.8.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_plus [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_aa0.25.inst.cfg b/resources/variants/ultimaker3_aa0.25.inst.cfg index 1dadf10e91..fe7f3a3d48 100644 --- a/resources/variants/ultimaker3_aa0.25.inst.cfg +++ b/resources/variants/ultimaker3_aa0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_aa0.8.inst.cfg b/resources/variants/ultimaker3_aa0.8.inst.cfg index 2d3f210019..18653c0973 100644 --- a/resources/variants/ultimaker3_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_aa0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_aa04.inst.cfg b/resources/variants/ultimaker3_aa04.inst.cfg index b5a250184f..ddfb5f5415 100644 --- a/resources/variants/ultimaker3_aa04.inst.cfg +++ b/resources/variants/ultimaker3_aa04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_bb0.8.inst.cfg b/resources/variants/ultimaker3_bb0.8.inst.cfg index df5b654e2e..0801816a60 100644 --- a/resources/variants/ultimaker3_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_bb0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_bb04.inst.cfg b/resources/variants/ultimaker3_bb04.inst.cfg index 70e2a5faa8..6929f72e0a 100644 --- a/resources/variants/ultimaker3_bb04.inst.cfg +++ b/resources/variants/ultimaker3_bb04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_aa0.25.inst.cfg b/resources/variants/ultimaker3_extended_aa0.25.inst.cfg index 5a9292ad1f..78e1e90e41 100644 --- a/resources/variants/ultimaker3_extended_aa0.25.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg index 03b5b0753d..60396f6fef 100644 --- a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_aa04.inst.cfg b/resources/variants/ultimaker3_extended_aa04.inst.cfg index 8303eca4e6..97a4580117 100644 --- a/resources/variants/ultimaker3_extended_aa04.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg index 13bb67d108..b57a3b221e 100644 --- a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_bb04.inst.cfg b/resources/variants/ultimaker3_extended_bb04.inst.cfg index 36191bd054..b5fcecebf6 100644 --- a/resources/variants/ultimaker3_extended_bb04.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s3_aa0.25.inst.cfg b/resources/variants/ultimaker_s3_aa0.25.inst.cfg new file mode 100644 index 0000000000..66e913862e --- /dev/null +++ b/resources/variants/ultimaker_s3_aa0.25.inst.cfg @@ -0,0 +1,50 @@ +[general] +name = AA 0.25 +version = 4 +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +brim_width = 7 +infill_line_width = 0.23 +layer_height_0 = 0.17 +line_width = 0.23 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +machine_nozzle_id = AA 0.25 +machine_nozzle_size = 0.25 +machine_nozzle_tip_outer_diameter = 0.65 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +raft_airgap = 0.3 +raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 +raft_interface_line_spacing = =raft_interface_line_width + 0.2 +raft_interface_line_width = =line_width * 2 +raft_interface_thickness = =layer_height * 1.5 +raft_jerk = =jerk_print +raft_margin = 15 +raft_surface_layers = 2 +retraction_count_max = 25 +retraction_extrusion_window = 1 +retraction_min_travel = 0.7 +retraction_prime_speed = =retraction_speed +skin_overlap = 15 +speed_layer_0 = 20 +speed_print = 55 +speed_topbottom = 20 +speed_wall = =math.ceil(speed_print * 30 / 55) +support_angle = 60 +support_bottom_distance = =support_z_distance / 2 +support_pattern = zigzag +support_top_distance = =support_z_distance +support_use_towers = True +support_z_distance = =layer_height * 2 +switch_extruder_prime_speed = =switch_extruder_retraction_speeds +switch_extruder_retraction_amount = =machine_heat_zone_length +top_bottom_thickness = 1.2 +wall_line_width_x = 0.23 +wall_thickness = 1.3 diff --git a/resources/variants/ultimaker_s3_aa0.8.inst.cfg b/resources/variants/ultimaker_s3_aa0.8.inst.cfg new file mode 100644 index 0000000000..6bde96fede --- /dev/null +++ b/resources/variants/ultimaker_s3_aa0.8.inst.cfg @@ -0,0 +1,67 @@ +[general] +name = AA 0.8 +version = 4 +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +acceleration_enabled = True +acceleration_print = 4000 +brim_width = 7 +cool_fan_speed = 7 +cool_fan_speed_max = 100 +cool_min_speed = 5 +default_material_print_temperature = 200 +infill_before_walls = False +infill_line_width = =round(line_width * 0.6 / 0.7, 2) +infill_overlap = 0 +infill_pattern = triangles +infill_wipe_dist = 0 +jerk_enabled = True +jerk_print = 25 +jerk_topbottom = =math.ceil(jerk_print * 25 / 25) +jerk_wall = =math.ceil(jerk_print * 25 / 25) +jerk_wall_0 = =math.ceil(jerk_wall * 25 / 25) +layer_height = 0.2 +line_width = =machine_nozzle_size +machine_min_cool_heat_time_window = 15 +machine_nozzle_cool_down_speed = 0.85 +machine_nozzle_heat_up_speed = 1.5 +machine_nozzle_id = AA 0.8 +machine_nozzle_size = 0.8 +machine_nozzle_tip_outer_diameter = 2.0 +material_final_print_temperature = =material_print_temperature - 10 +material_initial_print_temperature = =material_print_temperature - 5 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_enable = False +prime_tower_wipe_enabled = True +retract_at_layer_change = =not magic_spiralize +retraction_amount = 6.5 +retraction_count_max = 25 +retraction_extrusion_window = 1 +retraction_hop = 2 +retraction_hop_only_when_collides = True +retraction_min_travel = =line_width * 2 +skin_overlap = 5 +speed_equalize_flow_enabled = True +speed_layer_0 = 20 +speed_print = 35 +speed_topbottom = =math.ceil(speed_print * 25 / 35) +speed_wall_0 = =math.ceil(speed_wall * 25 / 30) +support_angle = 60 +support_bottom_distance = =support_z_distance / 2 +support_pattern = zigzag +support_top_distance = =support_z_distance +support_z_distance = =layer_height * 2 +switch_extruder_prime_speed = 20 +switch_extruder_retraction_amount = 16.5 +top_bottom_thickness = 1.4 +wall_0_inset = 0 +wall_line_width_0 = =wall_line_width +wall_line_width_x = =wall_line_width +wall_thickness = 2 diff --git a/resources/variants/ultimaker_s3_aa04.inst.cfg b/resources/variants/ultimaker_s3_aa04.inst.cfg new file mode 100644 index 0000000000..981e86e212 --- /dev/null +++ b/resources/variants/ultimaker_s3_aa04.inst.cfg @@ -0,0 +1,42 @@ +[general] +name = AA 0.4 +version = 4 +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +brim_width = 7 +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_id = AA 0.4 +machine_nozzle_tip_outer_diameter = 1.0 +raft_acceleration = =acceleration_print +raft_airgap = 0.3 +raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 +raft_interface_line_spacing = =raft_interface_line_width + 0.2 +raft_interface_line_width = =line_width * 2 +raft_interface_thickness = =layer_height * 1.5 +raft_jerk = =jerk_print +raft_margin = 15 +raft_surface_layers = 2 +retraction_amount = 6.5 +retraction_count_max = 25 +retraction_min_travel = =line_width * 2 +retraction_prime_speed = =retraction_speed +skin_overlap = 15 +speed_print = 70 +speed_topbottom = =math.ceil(speed_print * 30 / 70) +speed_wall = =math.ceil(speed_print * 30 / 70) +support_angle = 60 +support_bottom_distance = =support_z_distance / 2 +support_pattern = zigzag +support_top_distance = =support_z_distance +support_use_towers = True +support_z_distance = =layer_height * 2 +switch_extruder_prime_speed = =switch_extruder_retraction_speeds +switch_extruder_retraction_amount = =machine_heat_zone_length +top_bottom_thickness = 1.2 +wall_thickness = 1.3 diff --git a/resources/variants/ultimaker_s3_bb0.8.inst.cfg b/resources/variants/ultimaker_s3_bb0.8.inst.cfg new file mode 100644 index 0000000000..3986306c43 --- /dev/null +++ b/resources/variants/ultimaker_s3_bb0.8.inst.cfg @@ -0,0 +1,93 @@ +[general] +name = BB 0.8 +version = 4 +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +acceleration_enabled = True +acceleration_print = 4000 +acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) +acceleration_support_interface = =math.ceil(acceleration_support * 1500 / 2000) +acceleration_support_bottom = =math.ceil(acceleration_support_interface * 100 / 1500) +acceleration_prime_tower = =math.ceil(acceleration_print * 200 / 4000) +brim_width = 3 +cool_fan_speed = 50 +cool_min_speed = 5 +gradual_support_infill_step_height = 1.6 +gradual_support_infill_steps = 2 +infill_line_width = =round(line_width * 0.8 / 0.7, 2) +infill_overlap = 0 +infill_pattern = triangles +infill_wipe_dist = 0 +jerk_enabled = True +jerk_prime_tower = =math.ceil(jerk_print * 2 / 25) +jerk_print = 25 +jerk_support = =math.ceil(jerk_print * 15 / 25) +jerk_support_interface = =math.ceil(jerk_support * 10 / 15) +jerk_support_bottom = =math.ceil(jerk_support_interface * 1 / 10) +layer_height = 0.2 +machine_min_cool_heat_time_window = 15 +machine_nozzle_heat_up_speed = 1.5 +machine_nozzle_id = BB 0.8 +machine_nozzle_size = 0.8 +machine_nozzle_tip_outer_diameter = 2.0 +material_print_temperature = =default_material_print_temperature + 10 +material_standby_temperature = 100 +multiple_mesh_overlap = 0 +prime_tower_enable = False +prime_tower_wipe_enabled = True +raft_acceleration = =acceleration_layer_0 +raft_airgap = 0 +raft_base_speed = 20 +raft_base_thickness = 0.3 +raft_interface_line_spacing = 0.5 +raft_interface_line_width = 0.5 +raft_interface_speed = 20 +raft_interface_thickness = 0.2 +raft_margin = 10 +raft_speed = 25 +raft_surface_layers = 1 +retraction_amount = 4.5 +retraction_count_max = 15 +retraction_extrusion_window = =retraction_amount +retraction_hop = 2 +retraction_hop_only_when_collides = True +retraction_min_travel = =line_width * 3 +retraction_prime_speed = 15 +skin_overlap = 5 +speed_layer_0 = 20 +speed_print = 35 +speed_support = =math.ceil(speed_print * 25 / 35) +speed_support_interface = =math.ceil(speed_support * 20 / 25) +speed_support_bottom = =math.ceil(speed_support_interface * 10 / 20) +speed_wall_0 = =math.ceil(speed_wall * 25 / 30) +speed_prime_tower = =math.ceil(speed_print * 7 / 35) +support_angle = 60 +support_bottom_height = =layer_height * 2 +support_bottom_pattern = zigzag +support_bottom_stair_step_height = =layer_height +support_infill_rate = 50 +support_infill_sparse_thickness = 0.4 +support_interface_enable = True +support_interface_height = 0.6 +support_interface_skip_height = =layer_height +support_join_distance = 3 +support_line_width = =round(line_width * 0.4 / 0.35, 2) +support_offset = 1.5 +support_pattern = triangles +support_use_towers = False +support_xy_distance = =round(wall_line_width_0 * 0.75, 2) +support_xy_distance_overhang = =wall_line_width_0 / 4 +support_z_distance = 0 +switch_extruder_prime_speed = 15 +switch_extruder_retraction_amount = 12 +top_bottom_thickness = 1 +wall_0_inset = 0 +wall_line_width_0 = =wall_line_width +wall_line_width_x = =wall_line_width +wall_thickness = 1 diff --git a/resources/variants/ultimaker_s3_bb04.inst.cfg b/resources/variants/ultimaker_s3_bb04.inst.cfg new file mode 100644 index 0000000000..155ab6b67b --- /dev/null +++ b/resources/variants/ultimaker_s3_bb04.inst.cfg @@ -0,0 +1,51 @@ +[general] +name = BB 0.4 +version = 4 +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +acceleration_support = =math.ceil(acceleration_print * 2000 / 4000) +acceleration_support_interface = =math.ceil(acceleration_support * 1500 / 2000) +acceleration_support_bottom = =math.ceil(acceleration_support_interface * 100 / 1500) +acceleration_prime_tower = =math.ceil(acceleration_print * 200 / 4000) +cool_fan_speed_max = =cool_fan_speed +gradual_support_infill_steps = 2 +jerk_prime_tower = =math.ceil(jerk_print * 2 / 25) +jerk_support = =math.ceil(jerk_print * 15 / 25) +jerk_support_interface = =math.ceil(jerk_support * 10 / 15) +jerk_support_bottom = =math.ceil(jerk_support_interface * 1 / 10) +machine_nozzle_heat_up_speed = 1.5 +machine_nozzle_id = BB 0.4 +machine_nozzle_tip_outer_diameter = 1.0 +raft_base_speed = 20 +raft_interface_speed = 20 +raft_speed = 25 +retraction_amount = 4.5 +retraction_count_max = 20 +retraction_extrusion_window = =retraction_amount +retraction_min_travel = =3 * line_width +speed_layer_0 = 20 +speed_prime_tower = =math.ceil(speed_print * 10 / 35) +speed_support = =math.ceil(speed_print * 25 / 35) +speed_support_interface = =math.ceil(speed_support * 20 / 25) +speed_support_bottom = =math.ceil(speed_support_interface * 10 / 20) +speed_wall_0 = =math.ceil(speed_wall * 25 / 30) +support_bottom_height = =layer_height * 2 +support_bottom_pattern = zigzag +support_bottom_stair_step_height = =layer_height +support_infill_rate = 50 +support_infill_sparse_thickness = 0.2 +support_interface_enable = True +support_interface_height = 0.6 +support_interface_skip_height = =layer_height +support_join_distance = 3 +support_line_width = =round(line_width * 0.4 / 0.35, 2) +support_offset = 3 +support_xy_distance = =round(wall_line_width_0 * 0.75, 2) +support_xy_distance_overhang = =wall_line_width_0 / 2 +switch_extruder_retraction_amount = 12 diff --git a/resources/variants/ultimaker_s3_cc06.inst.cfg b/resources/variants/ultimaker_s3_cc06.inst.cfg new file mode 100644 index 0000000000..85b88daa96 --- /dev/null +++ b/resources/variants/ultimaker_s3_cc06.inst.cfg @@ -0,0 +1,46 @@ +[general] +name = CC 0.6 +version = 4 +definition = ultimaker_s3 + +[metadata] +setting_version = 10 +type = variant +hardware_type = nozzle + +[values] +brim_width = 7 +machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_id = CC 0.6 +machine_nozzle_size = 0.6 +raft_acceleration = =acceleration_print +raft_airgap = 0.3 +raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 +raft_interface_line_spacing = =raft_interface_line_width + 0.2 +raft_interface_line_width = =line_width * 2 +raft_interface_thickness = =layer_height * 1.5 +raft_jerk = =jerk_print +raft_margin = 15 +raft_surface_layers = 2 +retraction_count_max = 25 +retraction_min_travel = =line_width * 2 +retraction_prime_speed = =retraction_speed +speed_infill = =speed_print +speed_layer_0 = 20 +speed_print = 45 +speed_support = =speed_topbottom +speed_topbottom = =math.ceil(speed_print * 25 / 45) +speed_travel_layer_0 = 50 +speed_wall = =math.ceil(speed_print * 30 / 45) +speed_wall_0 = =math.ceil(speed_wall * 25 / 30) +speed_wall_x = =speed_wall +support_angle = 60 +support_bottom_distance = =support_z_distance / 2 +support_pattern = zigzag +support_top_distance = =support_z_distance +support_use_towers = True +support_z_distance = =layer_height * 2 +switch_extruder_prime_speed = =switch_extruder_retraction_speeds +switch_extruder_retraction_amount = =machine_heat_zone_length +top_bottom_thickness = =layer_height * 6 +wall_thickness = =line_width * 3 diff --git a/resources/variants/ultimaker_s5_aa0.25.inst.cfg b/resources/variants/ultimaker_s5_aa0.25.inst.cfg index e2ed3defe9..c7c909eded 100644 --- a/resources/variants/ultimaker_s5_aa0.25.inst.cfg +++ b/resources/variants/ultimaker_s5_aa0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_aa0.8.inst.cfg b/resources/variants/ultimaker_s5_aa0.8.inst.cfg index 84b3802fef..95de63a4d0 100644 --- a/resources/variants/ultimaker_s5_aa0.8.inst.cfg +++ b/resources/variants/ultimaker_s5_aa0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_aa04.inst.cfg b/resources/variants/ultimaker_s5_aa04.inst.cfg index 88dbc25d91..542ffbe007 100644 --- a/resources/variants/ultimaker_s5_aa04.inst.cfg +++ b/resources/variants/ultimaker_s5_aa04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_aluminum.inst.cfg b/resources/variants/ultimaker_s5_aluminum.inst.cfg index 65b0a6da68..27e19f5016 100644 --- a/resources/variants/ultimaker_s5_aluminum.inst.cfg +++ b/resources/variants/ultimaker_s5_aluminum.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = buildplate diff --git a/resources/variants/ultimaker_s5_bb0.8.inst.cfg b/resources/variants/ultimaker_s5_bb0.8.inst.cfg index d05ce74f61..1e9f25546c 100644 --- a/resources/variants/ultimaker_s5_bb0.8.inst.cfg +++ b/resources/variants/ultimaker_s5_bb0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_bb04.inst.cfg b/resources/variants/ultimaker_s5_bb04.inst.cfg index 2d3bc42a50..44971fa47d 100644 --- a/resources/variants/ultimaker_s5_bb04.inst.cfg +++ b/resources/variants/ultimaker_s5_bb04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_cc06.inst.cfg b/resources/variants/ultimaker_s5_cc06.inst.cfg index f64e3b9055..4a8cac944f 100644 --- a/resources/variants/ultimaker_s5_cc06.inst.cfg +++ b/resources/variants/ultimaker_s5_cc06.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_glass.inst.cfg b/resources/variants/ultimaker_s5_glass.inst.cfg index 87196e5e9b..9e97939bff 100644 --- a/resources/variants/ultimaker_s5_glass.inst.cfg +++ b/resources/variants/ultimaker_s5_glass.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 7 +setting_version = 10 type = variant hardware_type = buildplate diff --git a/run_coverage.py b/run_coverage.py new file mode 100644 index 0000000000..2fd60f9342 --- /dev/null +++ b/run_coverage.py @@ -0,0 +1,22 @@ +import pytest +from pathlib import Path + +# Small helper script to run the coverage of main code & all plugins + +path = Path("plugins") +args = ["--cov" ,"cura" , "--cov-report", "html"] +all_paths = [] +for p in path.glob('**/*'): + if p.is_dir(): + if p.name in ["__pycache__", "tests"]: + continue + args.append("--cov") + args.append(str(p)) + all_paths.append(str(p)) + +for path in all_paths: + args.append(path) +args.append(".") +args.append("-x") +pytest.main(args) + diff --git a/run_mypy.py b/run_mypy.py index 27f07cd281..6be424bda8 100644 --- a/run_mypy.py +++ b/run_mypy.py @@ -1,80 +1,82 @@ -#!/usr/bin/env python -import os -import sys -import subprocess - - -# A quick Python implementation of unix 'where' command. -def where(exe_name: str, search_path: str = os.getenv("PATH")) -> str: - if search_path is None: - search_path = "" - paths = search_path.split(os.pathsep) - result = "" - print(" -> sys.executable location: %s" % sys.executable) - sys_exec_dir = os.path.dirname(sys.executable) - root_dir = os.path.dirname(sys_exec_dir) - paths += [sys_exec_dir, - os.path.join(root_dir, "bin"), - os.path.join(root_dir, "scripts"), - ] - paths = set(paths) - - for path in sorted(paths): - print(" -> Searching %s" % path) - candidate_path = os.path.join(path, exe_name) - if os.path.exists(candidate_path): - result = candidate_path - break - return result - - -def findModules(path): - result = [] - for entry in os.scandir(path): - if entry.is_dir() and os.path.exists(os.path.join(path, entry.name, "__init__.py")): - result.append(entry.name) - return result - - -def main(): - # Find Uranium via the PYTHONPATH var - uraniumUMPath = where("UM", os.getenv("PYTHONPATH")) - if uraniumUMPath is None: - uraniumUMPath = os.path.join("..", "Uranium") - uraniumPath = os.path.dirname(uraniumUMPath) - - mypy_path_parts = [".", os.path.join(".", "plugins"), os.path.join(".", "plugins", "VersionUpgrade"), - uraniumPath, os.path.join(uraniumPath, "stubs")] - if sys.platform == "win32": - os.putenv("MYPYPATH", ";".join(mypy_path_parts)) - else: - os.putenv("MYPYPATH", ":".join(mypy_path_parts)) - - # Mypy really needs to be run via its Python script otherwise it can't find its data files. - mypy_exe_name = "mypy.exe" if sys.platform == "win32" else "mypy" - mypy_exe_dir = where(mypy_exe_name) - mypy_module = os.path.join(os.path.dirname(mypy_exe_dir), mypy_exe_name) - print("Found mypy exe path: %s" % mypy_exe_dir) - print("Found mypy module path: %s" % mypy_module) - - plugins = findModules("plugins") - plugins.sort() - - mods = ["cura"] + plugins + findModules("plugins/VersionUpgrade") - - for mod in mods: - print("------------- Checking module {mod}".format(**locals())) - if sys.platform == "win32": - result = subprocess.run([mypy_module, "-p", mod, "--ignore-missing-imports"]) - else: - result = subprocess.run([sys.executable, mypy_module, "-p", mod, "--ignore-missing-imports"]) - if result.returncode != 0: - print("\nModule {mod} failed checking. :(".format(**locals())) - return 1 - else: - print("\n\nDone checking. All is good.") - return 0 - - -if __name__ == "__main__": - sys.exit(main()) +#!/usr/bin/env python +import os +import sys +import subprocess + + +# A quick Python implementation of unix 'where' command. +def where(exe_name: str, search_path: str = os.getenv("PATH")) -> str: + if search_path is None: + search_path = "" + paths = search_path.split(os.pathsep) + result = "" + print(" -> sys.executable location: %s" % sys.executable) + sys_exec_dir = os.path.dirname(sys.executable) + root_dir = os.path.dirname(sys_exec_dir) + paths += [sys_exec_dir, + os.path.join(root_dir, "bin"), + os.path.join(root_dir, "scripts"), + ] + paths = set(paths) + + for path in sorted(paths): + print(" -> Searching %s" % path) + candidate_path = os.path.join(path, exe_name) + if os.path.exists(candidate_path): + result = candidate_path + break + return result + + +def findModules(path): + result = [] + for entry in os.scandir(path): + if entry.is_dir() and os.path.exists(os.path.join(path, entry.name, "__init__.py")): + result.append(entry.name) + return result + + +def main(): + # Find Uranium via the PYTHONPATH var + uraniumUMPath = where("UM", os.getenv("PYTHONPATH")) + if uraniumUMPath is None: + uraniumUMPath = os.path.join("..", "Uranium") + uraniumPath = os.path.dirname(uraniumUMPath) + + mypy_path_parts = [".", os.path.join(".", "plugins"), os.path.join(".", "plugins", "VersionUpgrade"), + uraniumPath, os.path.join(uraniumPath, "stubs")] + if sys.platform == "win32": + os.putenv("MYPYPATH", ";".join(mypy_path_parts)) + else: + os.putenv("MYPYPATH", ":".join(mypy_path_parts)) + + # Mypy really needs to be run via its Python script otherwise it can't find its data files. + mypy_exe_name = "mypy.exe" if sys.platform == "win32" else "mypy" + mypy_exe_dir = where(mypy_exe_name) + mypy_module = os.path.join(os.path.dirname(mypy_exe_dir), mypy_exe_name) + print("Found mypy exe path: %s" % mypy_exe_dir) + print("Found mypy module path: %s" % mypy_module) + + plugins = findModules("plugins") + plugins.sort() + + mods = ["cura"] + plugins + findModules("plugins/VersionUpgrade") + success_code = 0 + for mod in mods: + print("------------- Checking module {mod}".format(**locals())) + if sys.platform == "win32": + result = subprocess.run([mypy_module, "-p", mod, "--ignore-missing-imports"]) + else: + result = subprocess.run([sys.executable, mypy_module, "-p", mod, "--ignore-missing-imports"]) + if result.returncode != 0: + print("\nModule {mod} failed checking. :(".format(**locals())) + success_code = 1 + if success_code: + print("\n\nSome modules failed checking!") + else: + print("\n\nDone checking. All is good.") + return success_code + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/lionbridge_import.py b/scripts/lionbridge_import.py new file mode 100644 index 0000000000..0c2c132216 --- /dev/null +++ b/scripts/lionbridge_import.py @@ -0,0 +1,180 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import argparse #To get the source directory from command line arguments. +import io # To fix encoding issues in Windows +import os #To find files from the source. +import os.path #To find files from the source and the destination path. + +cura_files = {"cura", "fdmprinter.def.json", "fdmextruder.def.json"} +uranium_files = {"uranium"} + +## Imports translation files from Lionbridge. +# +# Lionbridge has a bit of a weird export feature. It exports it to the same +# file type as what we imported, so that's a .pot file. However this .pot file +# only contains the translations, so the header is completely empty. We need +# to merge those translations into our existing files so that the header is +# preserved. +def lionbridge_import(source: str) -> None: + print("Importing from:", source) + print("Importing to Cura:", destination_cura()) + print("Importing to Uranium:", destination_uranium()) + + for language in (directory for directory in os.listdir(source) if os.path.isdir(os.path.join(source, directory))): + print("================ Processing language:", language, "================") + directory = os.path.join(source, language) + for file_pot in (file for file in os.listdir(directory) if file.endswith(".pot")): + source_file = file_pot[:-4] #Strip extension. + if source_file in cura_files: + destination_file = os.path.join(destination_cura(), language.replace("-", "_"), source_file + ".po") + print("Merging", source_file, "(Cura) into", destination_file) + elif source_file in uranium_files: + destination_file = os.path.join(destination_uranium(), language.replace("-", "_"), source_file + ".po") + print("Merging", source_file, "(Uranium) into", destination_file) + else: + raise Exception("Unknown file: " + source_file + "... Is this Cura or Uranium?") + + with io.open(os.path.join(directory, file_pot), encoding = "utf8") as f: + source_str = f.read() + with io.open(destination_file, encoding = "utf8") as f: + destination_str = f.read() + result = merge(source_str, destination_str) + with io.open(destination_file, "w", encoding = "utf8") as f: + f.write(result) + +## Gets the destination path to copy the translations for Cura to. +# \return Destination path for Cura. +def destination_cura() -> str: + return os.path.abspath(os.path.join(__file__, "..", "..", "resources", "i18n")) + +## Gets the destination path to copy the translations for Uranium to. +# \return Destination path for Uranium. +def destination_uranium() -> str: + try: + import UM + except ImportError: + relative_path = os.path.join(__file__, "..", "..", "..", "Uranium", "resources", "i18n", "uranium.pot") + print(os.path.abspath(relative_path)) + if os.path.exists(relative_path): + return os.path.abspath(relative_path) + else: + raise Exception("Can't find Uranium. Please put UM on the PYTHONPATH or put the Uranium folder next to the Cura folder.") + return os.path.abspath(os.path.join(UM.__file__, "..", "..", "resources", "i18n")) + +## Merges translations from the source file into the destination file if they +# were missing in the destination file. +# \param source The contents of the source .po file. +# \param destination The contents of the destination .po file. +def merge(source: str, destination: str) -> str: + result_lines = [] + last_destination = { + "msgctxt": "\"\"\n", + "msgid": "\"\"\n", + "msgstr": "\"\"\n", + "msgid_plural": "\"\"\n" + } + + current_state = "none" + for line in destination.split("\n"): + if line.startswith("msgctxt \""): + current_state = "msgctxt" + line = line[8:] + last_destination[current_state] = "" + elif line.startswith("msgid \""): + current_state = "msgid" + line = line[6:] + last_destination[current_state] = "" + elif line.startswith("msgstr \""): + current_state = "msgstr" + line = line[7:] + last_destination[current_state] = "" + elif line.startswith("msgid_plural \""): + current_state = "msgid_plural" + line = line[13:] + last_destination[current_state] = "" + + if line.startswith("\"") and line.endswith("\""): + last_destination[current_state] += line + "\n" + else: #White lines or comment lines trigger us to search for the translation in the source file. + if last_destination["msgstr"] == "\"\"\n" and last_destination["msgid"] != "\"\"\n": #No translation for this yet! + last_destination["msgstr"] = find_translation(source, last_destination["msgctxt"], last_destination["msgid"]) #Actually place the translation in. + if last_destination["msgctxt"] != "\"\"\n" or last_destination["msgid"] != "\"\"\n" or last_destination["msgid_plural"] != "\"\"\n" or last_destination["msgstr"] != "\"\"\n": + if last_destination["msgctxt"] != "\"\"\n": + result_lines.append("msgctxt {msgctxt}".format(msgctxt = last_destination["msgctxt"][:-1])) #The [:-1] to strip the last newline. + result_lines.append("msgid {msgid}".format(msgid = last_destination["msgid"][:-1])) + if last_destination["msgid_plural"] != "\"\"\n": + result_lines.append("msgid_plural {msgid_plural}".format(msgid_plural = last_destination["msgid_plural"][:-1])) + else: + result_lines.append("msgstr {msgstr}".format(msgstr = last_destination["msgstr"][:-1])) + last_destination = { + "msgctxt": "\"\"\n", + "msgid": "\"\"\n", + "msgstr": "\"\"\n", + "msgid_plural": "\"\"\n" + } + + result_lines.append(line) #This line itself. + return "\n".join(result_lines) + +## Finds a translation in the source file. +# \param source The contents of the source .po file. +# \param msgctxt The ctxt of the translation to find. +# \param msgid The id of the translation to find. +def find_translation(source: str, msgctxt: str, msgid: str) -> str: + last_source = { + "msgctxt": "\"\"\n", + "msgid": "\"\"\n", + "msgstr": "\"\"\n", + "msgid_plural": "\"\"\n" + } + + current_state = "none" + for line in source.split("\n"): + if line.startswith("msgctxt \""): + current_state = "msgctxt" + line = line[8:] + last_source[current_state] = "" + elif line.startswith("msgid \""): + current_state = "msgid" + line = line[6:] + last_source[current_state] = "" + elif line.startswith("msgstr \""): + current_state = "msgstr" + line = line[7:] + last_source[current_state] = "" + elif line.startswith("msgid_plural \""): + current_state = "msgid_plural" + line = line[13:] + last_source[current_state] = "" + + if line.startswith("\"") and line.endswith("\""): + last_source[current_state] += line + "\n" + else: #White lines trigger us to process this translation. Is it the correct one? + #Process the source and destination keys for comparison independent of newline technique. + source_ctxt = "".join((line.strip()[1:-1] for line in last_source["msgctxt"].split("\n"))) + source_id = "".join((line.strip()[1:-1] for line in last_source["msgid"].split("\n"))) + dest_ctxt = "".join((line.strip()[1:-1] for line in msgctxt.split("\n"))) + dest_id = "".join((line.strip()[1:-1] for line in msgid.split("\n"))) + + if source_ctxt == dest_ctxt and source_id == dest_id: + if last_source["msgstr"] == "\"\"\n" and last_source["msgid_plural"] == "\"\"\n": + print("!!! Empty translation for {" + dest_ctxt + "}", dest_id, "!!!") + return last_source["msgstr"] + + last_source = { + "msgctxt": "\"\"\n", + "msgid": "\"\"\n", + "msgstr": "\"\"\n", + "msgid_plural": "\"\"\n" + } + + #Still here? Then the entire msgctxt+msgid combination was not found at all. + print("!!! Missing translation for {" + msgctxt.strip() + "}", msgid.strip(), "!!!") + return "\"\"\n" + +if __name__ == "__main__": + argparser = argparse.ArgumentParser(description = "Import translation files from Lionbridge.") + argparser.add_argument("source") + args = argparser.parse_args() + lionbridge_import(args.source) \ No newline at end of file diff --git a/tests/API/TestAccount.py b/tests/API/TestAccount.py index 7a9997c771..fd3d5aea55 100644 --- a/tests/API/TestAccount.py +++ b/tests/API/TestAccount.py @@ -21,14 +21,14 @@ def test_login(): account._authorization_service = mocked_auth_service account.login() - mocked_auth_service.startAuthorizationFlow.assert_called_once() + mocked_auth_service.startAuthorizationFlow.assert_called_once_with() # Fake a sucesfull login account._onLoginStateChanged(True) # Attempting to log in again shouldn't change anything. account.login() - mocked_auth_service.startAuthorizationFlow.assert_called_once() + mocked_auth_service.startAuthorizationFlow.assert_called_once_with() def test_initialize(): @@ -37,7 +37,7 @@ def test_initialize(): account._authorization_service = mocked_auth_service account.initialize() - mocked_auth_service.loadAuthDataFromPreferences.assert_called_once() + mocked_auth_service.loadAuthDataFromPreferences.assert_called_once_with() def test_logout(): @@ -46,7 +46,7 @@ def test_logout(): account._authorization_service = mocked_auth_service account.logout() - mocked_auth_service.deleteAuthData.assert_not_called() # We weren't logged in, so nothing should happen + mocked_auth_service.deleteAuthData.assert_not_called() # We weren't logged in, so nothing should happen assert not account.isLoggedIn # Pretend the stage changed @@ -54,7 +54,7 @@ def test_logout(): assert account.isLoggedIn account.logout() - mocked_auth_service.deleteAuthData.assert_called_once() + mocked_auth_service.deleteAuthData.assert_called_once_with() def test_errorLoginState(): @@ -108,4 +108,4 @@ def test_userProfile(user_profile): assert returned_user_profile["user_id"] == "user_id!" mocked_auth_service.getUserProfile = MagicMock(return_value=None) - assert account.userProfile is None \ No newline at end of file + assert account.userProfile is None diff --git a/tests/Machines/Models/TestDiscoveredPrintersModel.py b/tests/Machines/Models/TestDiscoveredPrintersModel.py index 8d9a770c2a..3a25fa8a02 100644 --- a/tests/Machines/Models/TestDiscoveredPrintersModel.py +++ b/tests/Machines/Models/TestDiscoveredPrintersModel.py @@ -2,13 +2,17 @@ from unittest.mock import MagicMock, PropertyMock import pytest -from cura.Machines.Models.DiscoveredPrintersModel import DiscoveredPrintersModel +from cura.Machines.Models.DiscoveredPrintersModel import DiscoveredPrintersModel, DiscoveredPrinter @pytest.fixture() def discovered_printer_model(application) -> DiscoveredPrintersModel: return DiscoveredPrintersModel(application) +@pytest.fixture() +def discovered_printer() -> DiscoveredPrinter: + return DiscoveredPrinter("127.0.0.1", "zomg", "yay", None, "bleep", MagicMock()) + def test_discoveredPrinters(discovered_printer_model): mocked_device = MagicMock() @@ -23,6 +27,37 @@ def test_discoveredPrinters(discovered_printer_model): assert len(discovered_printer_model.discoveredPrinters) == 1 + discovered_printer_model.discoveredPrintersChanged = MagicMock() # Test if removing it works discovered_printer_model.removeDiscoveredPrinter("ip") assert len(discovered_printer_model.discoveredPrinters) == 0 + assert discovered_printer_model.discoveredPrintersChanged.emit.call_count == 1 + # Removing it again shouldn't cause another signal emit + discovered_printer_model.removeDiscoveredPrinter("ip") + assert discovered_printer_model.discoveredPrintersChanged.emit.call_count == 1 + +test_validate_data_get_set = [ + {"attribute": "name", "value": "zomg"}, + {"attribute": "machineType", "value": "BHDHAHHADAD"}, +] + +@pytest.mark.parametrize("data", test_validate_data_get_set) +def test_getAndSet(data, discovered_printer): + # Attempt to set the value + # Convert the first letter into a capital + attribute = list(data["attribute"]) + attribute[0] = attribute[0].capitalize() + attribute = "".join(attribute) + + # Attempt to set the value + getattr(discovered_printer, "set" + attribute)(data["value"]) + + # Ensure that the value got set + assert getattr(discovered_printer, data["attribute"]) == data["value"] + + +def test_isHostofGroup(discovered_printer): + discovered_printer.device.clusterSize = 0 + assert not discovered_printer.isHostOfGroup + discovered_printer.device.clusterSize = 2 + assert discovered_printer.isHostOfGroup \ No newline at end of file diff --git a/tests/Machines/TestContainerTree.py b/tests/Machines/TestContainerTree.py new file mode 100644 index 0000000000..ef11d9acc0 --- /dev/null +++ b/tests/Machines/TestContainerTree.py @@ -0,0 +1,93 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from unittest.mock import patch, MagicMock +import pytest +from UM.Settings.DefinitionContainer import DefinitionContainer +from cura.Machines.ContainerTree import ContainerTree +from cura.Settings.GlobalStack import GlobalStack + + +def createMockedStack(definition_id: str): + result = MagicMock(spec = GlobalStack) + result.definition.getId = MagicMock(return_value = definition_id) + + extruder_left_mock = MagicMock() + extruder_left_mock.variant.getName = MagicMock(return_value = definition_id + "_left_variant_name") + extruder_left_mock.material.getMetaDataEntry = MagicMock(return_value = definition_id + "_left_material_base_file") + extruder_left_mock.isEnabled = True + extruder_right_mock = MagicMock() + extruder_right_mock.variant.getName = MagicMock(return_value = definition_id + "_right_variant_name") + extruder_right_mock.material.getMetaDataEntry = MagicMock(return_value = definition_id + "_right_material_base_file") + extruder_right_mock.isEnabled = True + extruder_list = [extruder_left_mock, extruder_right_mock] + result.extruderList = extruder_list + return result + + +@pytest.fixture +def container_registry(): + result = MagicMock() + result.findContainerStacks = MagicMock(return_value = [createMockedStack("machine_1"), createMockedStack("machine_2")]) + result.findContainersMetadata = lambda id: [{"id": id}] if id in {"machine_1", "machine_2"} else [] + return result + +@pytest.fixture +def application(): + return MagicMock(getGlobalContainerStack = MagicMock(return_value = createMockedStack("current_global_stack"))) + + +def test_containerTreeInit(container_registry): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + container_tree = ContainerTree() + + assert "machine_1" in container_tree.machines + assert "machine_2" in container_tree.machines + +def test_getCurrentQualityGroupsNoGlobalStack(container_registry): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value = MagicMock(getGlobalContainerStack = MagicMock(return_value = None)))): + container_tree = ContainerTree() + result = container_tree.getCurrentQualityGroups() + + assert len(result) == 0 + +def test_getCurrentQualityGroups(container_registry, application): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + container_tree = ContainerTree() + container_tree.machines._machines["current_global_stack"] = MagicMock() # Mock so that we can track whether the getQualityGroups function gets called with correct parameters. + + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value = application)): + result = container_tree.getCurrentQualityGroups() + + # As defined in the fixture for application. + expected_variant_names = ["current_global_stack_left_variant_name", "current_global_stack_right_variant_name"] + expected_material_base_files = ["current_global_stack_left_material_base_file", "current_global_stack_right_material_base_file"] + expected_is_enabled = [True, True] + + container_tree.machines["current_global_stack"].getQualityGroups.assert_called_with(expected_variant_names, expected_material_base_files, expected_is_enabled) + assert result == container_tree.machines["current_global_stack"].getQualityGroups.return_value + +def test_getCurrentQualityChangesGroupsNoGlobalStack(container_registry): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value = MagicMock(getGlobalContainerStack = MagicMock(return_value = None)))): + container_tree = ContainerTree() + result = container_tree.getCurrentQualityChangesGroups() + + assert len(result) == 0 + +def test_getCurrentQualityChangesGroups(container_registry, application): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + container_tree = ContainerTree() + container_tree.machines._machines["current_global_stack"] = MagicMock() # Mock so that we can track whether the getQualityGroups function gets called with correct parameters. + + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value = application)): + result = container_tree.getCurrentQualityChangesGroups() + + # As defined in the fixture for application. + expected_variant_names = ["current_global_stack_left_variant_name", "current_global_stack_right_variant_name"] + expected_material_base_files = ["current_global_stack_left_material_base_file", "current_global_stack_right_material_base_file"] + expected_is_enabled = [True, True] + + container_tree.machines["current_global_stack"].getQualityChangesGroups.assert_called_with(expected_variant_names, expected_material_base_files, expected_is_enabled) + assert result == container_tree.machines["current_global_stack"].getQualityChangesGroups.return_value \ No newline at end of file diff --git a/tests/Machines/TestMachineNode.py b/tests/Machines/TestMachineNode.py new file mode 100644 index 0000000000..50d7bdafa0 --- /dev/null +++ b/tests/Machines/TestMachineNode.py @@ -0,0 +1,174 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from unittest.mock import patch, MagicMock +import pytest + +from UM.Settings.Interfaces import ContainerInterface +from cura.Machines.MachineNode import MachineNode + +metadata_dict = { + "has_materials": "false", + "has_variants": "true", + "has_machine_quality": "true", + "quality_definition": "test_quality_definition", + "exclude_materials": ["excluded_material_1", "excluded_material_2"], + "preferred_variant_name": "beautiful_nozzle", + "preferred_material": "beautiful_material", + "preferred_quality_type": "beautiful_quality_type" +} + + +@pytest.fixture +def container_registry(): + result = MagicMock() + result.findInstanceContainersMetadata = MagicMock(return_value = [{"id": "variant_1", "name": "Variant One", "quality_type": "normal"}, {"id": "variant_2", "name": "Variant Two", "quality_type": "great"}]) + result.findContainersMetadata = MagicMock(return_value = [metadata_dict]) + return result + +## Creates a machine node without anything underneath it. No sub-nodes. +# +# For testing stuff with machine nodes without testing _loadAll(). You'll need +# to add subnodes manually in your test. +@pytest.fixture +def empty_machine_node(): + empty_container_registry = MagicMock() + empty_container_registry.findContainersMetadata = MagicMock(return_value = [metadata_dict]) # Still contain the MachineNode's own metadata for the constructor. + empty_container_registry.findInstanceContainersMetadata = MagicMock(return_value = []) + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = empty_container_registry)): + with patch("cura.Machines.MachineNode.MachineNode._loadAll", MagicMock()): + return MachineNode("machine_1") + +def getMetadataEntrySideEffect(*args, **kwargs): + return metadata_dict.get(args[0]) + + +def createMockedInstanceContainer(): + result = MagicMock(spec = ContainerInterface) + result.getMetaDataEntry = MagicMock(side_effect = getMetadataEntrySideEffect) + return result + + +def createMachineNode(container_id, container_registry): + with patch("cura.Machines.MachineNode.VariantNode"): # We're not testing the variant node here, so patch it out. + with patch("cura.Machines.MachineNode.QualityNode"): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + return MachineNode(container_id) + + +def test_machineNodeInit(container_registry): + machine_node = createMachineNode("machine_1", container_registry) + + # As variants get stored by name, we want to check if those get added. + assert "Variant One" in machine_node.variants + assert "Variant Two" in machine_node.variants + assert len(machine_node.variants) == 2 # And ensure that *only* those two got added. + +def test_metadataProperties(container_registry): + node = createMachineNode("machine_1", container_registry) + + # Check if each of the metadata entries got stored properly. + assert not node.has_materials + assert node.has_variants + assert node.has_machine_quality + assert node.quality_definition == metadata_dict["quality_definition"] + assert node.exclude_materials == metadata_dict["exclude_materials"] + assert node.preferred_variant_name == metadata_dict["preferred_variant_name"] + assert node.preferred_material == metadata_dict["preferred_material"] + assert node.preferred_quality_type == metadata_dict["preferred_quality_type"] + +## Test getting quality groups when there are quality profiles available for +# the requested configurations on two extruders. +def test_getQualityGroupsBothExtrudersAvailable(empty_machine_node): + # Prepare a tree inside the machine node. + extruder_0_node = MagicMock(quality_type = "quality_type_1") + extruder_1_node = MagicMock(quality_type = "quality_type_1") # Same quality type, so this is the one that can be returned. + empty_machine_node.variants = { + "variant_1": MagicMock( + materials = { + "material_1": MagicMock( + qualities = { + "quality_1": extruder_0_node + } + ) + } + ), + "variant_2": MagicMock( + materials = { + "material_2": MagicMock( + qualities = { + "quality_2": extruder_1_node + } + ) + } + ) + } + global_node = MagicMock( + container = MagicMock(id = "global_quality_container"), # Needs to exist, otherwise it won't add this quality type. + getMetaDataEntry = lambda _, __: "Global Quality Profile Name" + ) + empty_machine_node.global_qualities = { + "quality_type_1": global_node + } + + # Request the quality groups for the variants in the machine tree. + result = empty_machine_node.getQualityGroups(["variant_1", "variant_2"], ["material_1", "material_2"], [True, True]) + + assert "quality_type_1" in result, "This quality type was available for both extruders." + assert result["quality_type_1"].node_for_global == global_node + assert result["quality_type_1"].nodes_for_extruders[0] == extruder_0_node + assert result["quality_type_1"].nodes_for_extruders[1] == extruder_1_node + assert result["quality_type_1"].name == global_node.getMetaDataEntry("name", "Unnamed Profile") + assert result["quality_type_1"].quality_type == "quality_type_1" + +## Test the "is_available" flag on quality groups. +# +# If a profile is available for a quality type on an extruder but not on all +# extruders, there should be a quality group for it but it should not be made +# available. +def test_getQualityGroupsAvailability(empty_machine_node): + # Prepare a tree inside the machine node. + extruder_0_both = MagicMock(quality_type = "quality_type_both") # This quality type is available for both extruders. + extruder_1_both = MagicMock(quality_type = "quality_type_both") + extruder_0_exclusive = MagicMock(quality_type = "quality_type_0") # These quality types are only available on one of the extruders. + extruder_1_exclusive = MagicMock(quality_type = "quality_type_1") + empty_machine_node.variants = { + "variant_1": MagicMock( + materials = { + "material_1": MagicMock( + qualities = { + "quality_0_both": extruder_0_both, + "quality_0_exclusive": extruder_0_exclusive + } + ) + } + ), + "variant_2": MagicMock( + materials = { + "material_2": MagicMock( + qualities = { + "quality_1_both": extruder_1_both, + "quality_1_exclusive": extruder_1_exclusive + } + ) + } + ) + } + global_both = MagicMock(container = MagicMock(id = "global_quality_both"), getMetaDataEntry = lambda _, __: "Global Quality Both") + global_0 = MagicMock(container = MagicMock(id = "global_quality_0"), getMetaDataEntry = lambda _, __: "Global Quality 0 Exclusive") + global_1 = MagicMock(container = MagicMock(id = "global_quality_1"), getMetaDataEntry = lambda _, __: "Global Quality 1 Exclusive") + empty_machine_node.global_qualities = { + "quality_type_both": global_both, + "quality_type_0": global_0, + "quality_type_1": global_1 + } + + # Request the quality groups for the variants in the machine tree. + result = empty_machine_node.getQualityGroups(["variant_1", "variant_2"], ["material_1", "material_2"], [True, True]) + + assert "quality_type_both" in result, "This quality type was available on both extruders." + assert result["quality_type_both"].is_available, "This quality type was available on both extruders and thus should be made available." + assert "quality_type_0" in result, "This quality type was available for one of the extruders, and so there must be a group for it (even though it's unavailable)." + assert not result["quality_type_0"].is_available, "This quality type was only available for one of the extruders and thus can't be activated." + assert "quality_type_1" in result, "This quality type was available for one of the extruders, and so there must be a group for it (even though it's unavailable)." + assert not result["quality_type_1"].is_available, "This quality type was only available for one of the extruders and thus can't be activated." \ No newline at end of file diff --git a/tests/Machines/TestMaterialNode.py b/tests/Machines/TestMaterialNode.py new file mode 100644 index 0000000000..a04c8b253b --- /dev/null +++ b/tests/Machines/TestMaterialNode.py @@ -0,0 +1,155 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from unittest.mock import patch, MagicMock +import pytest + +from cura.Machines.MaterialNode import MaterialNode + +instance_container_metadata_dict = {"fdmprinter": {"no_variant": [{"id": "quality_1", "material": "material_1"}]}, + "machine_1": {"variant_1": {"material_1": [{"id": "quality_2", "material": "material_1"}, {"id": "quality_3","material": "material_1"}]}}} + +metadata_dict = {} + + +def getMetadataEntrySideEffect(*args, **kwargs): + return metadata_dict.get(args[0]) + + +def createMockedInstanceContainer(container_id): + result = MagicMock() + result.getId = MagicMock(return_value=container_id) + result.getMetaDataEntry = MagicMock(side_effect=getMetadataEntrySideEffect) + return result + + +def getInstanceContainerSideEffect(*args, **kwargs): + variant = kwargs.get("variant") + definition = kwargs.get("definition") + type = kwargs.get("type") + material = kwargs.get("material") + if material is not None and variant is not None: + definition_dict = instance_container_metadata_dict.get(definition) + variant_dict = definition_dict.get(variant) + material_dict = variant_dict.get("material_1") + return material_dict + if type == "quality": + if variant is None: + return instance_container_metadata_dict.get(definition).get("no_variant") + else: + return instance_container_metadata_dict.get(definition).get(variant).get("material_1") + if definition is None: + return [{"id": "material_1", "material": "material_1"}] + return instance_container_metadata_dict.get(definition).get("no_variant") + + +@pytest.fixture +def container_registry(): + result = MagicMock() + result.findInstanceContainersMetadata = MagicMock(side_effect=getInstanceContainerSideEffect) + result.findContainersMetadata = MagicMock(return_value = [{"base_file": "material_1", "material": "test_material_type", "GUID": "omg zomg"}]) + return result + + +def test_materialNodeInit_noMachineQuality(container_registry): + variant_node = MagicMock() + variant_node.variant_name = "variant_1" + variant_node.machine.has_machine_quality = False + with patch("cura.Machines.MaterialNode.QualityNode"): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + node = MaterialNode("material_1", variant_node) + + assert len(node.qualities) == 1 + assert "quality_1" in node.qualities + + +def test_materialNodeInit_MachineQuality(container_registry): + variant_node = MagicMock() + variant_node.variant_name = "variant_1" + variant_node.machine.has_machine_quality = True + variant_node.machine.quality_definition = "machine_1" + with patch("cura.Machines.MaterialNode.QualityNode"): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + node = MaterialNode("material_1", variant_node) + + assert len(node.qualities) == 2 + assert "quality_2" in node.qualities + assert "quality_3" in node.qualities + + +def test_onRemoved_wrongContainer(container_registry): + variant_node = MagicMock() + variant_node.variant_name = "variant_1" + variant_node.machine.has_machine_quality = True + variant_node.machine.quality_definition = "machine_1" + variant_node.materials = {"material_1": MagicMock()} + with patch("cura.Machines.MaterialNode.QualityNode"): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance",MagicMock(return_value=container_registry)): + node = MaterialNode("material_1", variant_node) + + container = createMockedInstanceContainer("material_2") + node._onRemoved(container) + + assert "material_1" in variant_node.materials + + +def test_onRemoved_rightContainer(container_registry): + variant_node = MagicMock() + variant_node.variant_name = "variant_1" + variant_node.machine.has_machine_quality = True + variant_node.machine.quality_definition = "machine_1" + with patch("cura.Machines.MaterialNode.QualityNode"): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + node = MaterialNode("material_1", variant_node) + + container = createMockedInstanceContainer("material_1") + variant_node.materials = {"material_1": MagicMock()} + node._onRemoved(container) + + assert "material_1" not in variant_node.materials + + +def test_onMetadataChanged(container_registry): + variant_node = MagicMock() + variant_node.variant_name = "variant_1" + variant_node.machine.has_machine_quality = True + variant_node.machine.quality_definition = "machine_1" + with patch("cura.Machines.MaterialNode.QualityNode"): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + node = MaterialNode("material_1", variant_node) + + # We only do this now since we do want it to be constructed but not actually re-evaluated. + node._loadAll = MagicMock() + + container = createMockedInstanceContainer("material_1") + container.getMetaData = MagicMock(return_value = {"base_file": "new_base_file", "material": "new_material_type", "GUID": "new_guid"}) + + node._onMetadataChanged(container) + + assert node.material_type == "new_material_type" + assert node.guid == "new_guid" + assert node.base_file == "new_base_file" + + +def test_onMetadataChanged_wrongContainer(container_registry): + variant_node = MagicMock() + variant_node.variant_name = "variant_1" + variant_node.machine.has_machine_quality = True + variant_node.machine.quality_definition = "machine_1" + with patch("cura.Machines.MaterialNode.QualityNode"): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", + MagicMock(return_value=container_registry)): + node = MaterialNode("material_1", variant_node) + + # We only do this now since we do want it to be constructed but not actually re-evaluated. + node._loadAll = MagicMock() + + container = createMockedInstanceContainer("material_2") + container.getMetaData = MagicMock( + return_value={"base_file": "new_base_file", "material": "new_material_type", "GUID": "new_guid"}) + + node._onMetadataChanged(container) + + assert node.material_type == "test_material_type" + assert node.guid == "omg zomg" + assert node.base_file == "material_1" diff --git a/tests/Machines/TestQualityNode.py b/tests/Machines/TestQualityNode.py new file mode 100644 index 0000000000..ffe897d203 --- /dev/null +++ b/tests/Machines/TestQualityNode.py @@ -0,0 +1,95 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from unittest.mock import patch, MagicMock +import pytest + +from cura.Machines.QualityNode import QualityNode + +## Metadata for hypothetical containers that get put in the registry. +metadatas = [ + { + "id": "matching_intent", # Matches our query. + "type": "intent", + "definition": "correct_definition", + "variant": "correct_variant", + "material": "correct_material", + "quality_type": "correct_quality_type" + }, + { + "id": "matching_intent_2", # Matches our query as well. + "type": "intent", + "definition": "correct_definition", + "variant": "correct_variant", + "material": "correct_material", + "quality_type": "correct_quality_type" + }, + { + "id": "bad_type", + "type": "quality", # Doesn't match because it's not an intent. + "definition": "correct_definition", + "variant": "correct_variant", + "material": "correct_material", + "quality_type": "correct_quality_type" + }, + { + "id": "bad_definition", + "type": "intent", + "definition": "wrong_definition", # Doesn't match on the definition. + "variant": "correct_variant", + "material": "correct_material", + "quality_type": "correct_quality_type" + }, + { + "id": "bad_variant", + "type": "intent", + "definition": "correct_definition", + "variant": "wrong_variant", # Doesn't match on the variant. + "material": "correct_material", + "quality_type": "correct_quality_type" + }, + { + "id": "bad_material", + "type": "intent", + "definition": "correct_definition", + "variant": "correct_variant", + "material": "wrong_material", # Doesn't match on the material. + "quality_type": "correct_quality_type" + }, + { + "id": "bad_quality", + "type": "intent", + "definition": "correct_definition", + "variant": "correct_variant", + "material": "correct_material", + "quality_type": "wrong_quality_type" # Doesn't match on the quality type. + }, + { + "id": "quality_1", + "quality_type": "correct_quality_type", + "material": "correct_material" + } +] + +@pytest.fixture +def container_registry(): + result = MagicMock() + def findContainersMetadata(**kwargs): + return [metadata for metadata in metadatas if kwargs.items() <= metadata.items()] + result.findContainersMetadata = findContainersMetadata + result.findInstanceContainersMetadata = findContainersMetadata + return result + +def test_qualityNode_machine_1(container_registry): + material_node = MagicMock() + material_node.variant.machine.quality_definition = "correct_definition" + material_node.variant.variant_name = "correct_variant" + + with patch("cura.Machines.QualityNode.IntentNode"): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + node = QualityNode("quality_1", material_node) + + assert len(node.intents) == 3 + assert "matching_intent" in node.intents + assert "matching_intent_2" in node.intents + assert "empty_intent" in node.intents \ No newline at end of file diff --git a/tests/Machines/TestVariantNode.py b/tests/Machines/TestVariantNode.py new file mode 100644 index 0000000000..bc860058a1 --- /dev/null +++ b/tests/Machines/TestVariantNode.py @@ -0,0 +1,183 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import collections # For OrderedDict to ensure that the first iteration of preferred material is dependable. +from unittest.mock import patch, MagicMock +import pytest + +from cura.Machines.VariantNode import VariantNode +import copy + +instance_container_metadata_dict = {"fdmprinter": {"no_variant": [{"base_file": "material_1", "id": "material_1"}, {"base_file": "material_2", "id": "material_2"}]}, + "machine_1": {"no_variant": [{"base_file": "material_1", "id": "material_1"}, {"base_file": "material_2", "id": "material_2"}], + "Variant One": [{"base_file": "material_1", "id": "material_1"}, {"base_file": "material_2", "id": "material_2"}]}} + + +material_node_added_test_data = [({"type": "Not a material"}, ["material_1", "material_2"]), # Wrong type + ({"type": "material", "base_file": "material_3"}, ["material_1", "material_2"]), # material_3 is on the "NOPE" list. + ({"type": "material", "base_file": "material_4", "definition": "machine_3"}, ["material_1", "material_2"]), # Wrong machine + ({"type": "material", "base_file": "material_4", "definition": "machine_1"}, ["material_1", "material_2", "material_4"]), # No variant + ({"type": "material", "base_file": "material_4", "definition": "machine_1", "variant_name": "Variant Three"}, ["material_1", "material_2"]), # Wrong variant + ({"type": "material", "base_file": "material_4", "definition": "machine_1", "variant_name": "Variant One"}, ["material_1", "material_2", "material_4"]) + ] + +material_node_update_test_data = [({"type": "material", "base_file": "material_1", "definition": "machine_1", "variant_name": "Variant One"}, ["material_1"], ["material_2"]), + ({"type": "material", "base_file": "material_1", "definition": "fdmprinter", "variant_name": "Variant One"}, [], ["material_2", "material_1"]), # Too generic + ({"type": "material", "base_file": "material_1", "definition": "machine_2", "variant_name": "Variant One"}, [], ["material_2", "material_1"]) # Wrong definition + ] + +metadata_dict = {} + + +def getMetadataEntrySideEffect(*args, **kwargs): + return metadata_dict.get(args[0]) + + +def getInstanceContainerSideEffect(*args, **kwargs): + variant = kwargs.get("variant") + definition = kwargs.get("definition") + + if variant is not None: + return instance_container_metadata_dict.get(definition).get(variant) + return instance_container_metadata_dict.get(definition).get("no_variant") + + +@pytest.fixture +def machine_node(): + mocked_machine_node = MagicMock() + mocked_machine_node.container_id = "machine_1" + mocked_machine_node.preferred_material = "preferred_material" + return mocked_machine_node + +## Constructs a variant node without any subnodes. +# +# This is useful for performing tests on VariantNode without being dependent +# on how _loadAll works. +@pytest.fixture +def empty_variant_node(machine_node): + container_registry = MagicMock( + findContainersMetadata = MagicMock(return_value = [{"name": "test variant name"}]) + ) + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + with patch("cura.Machines.VariantNode.VariantNode._loadAll", MagicMock()): + result = VariantNode("test_variant", machine = machine_node) + return result + +@pytest.fixture +def container_registry(): + result = MagicMock() + result.findInstanceContainersMetadata = MagicMock(side_effect = getInstanceContainerSideEffect) + result.findContainersMetadata = MagicMock(return_value = [{"name": "Variant One"}]) + return result + + +def createMockedInstanceContainer(): + result = MagicMock() + result.getMetaDataEntry = MagicMock(side_effect=getMetadataEntrySideEffect) + return result + + +def createVariantNode(container_id, machine_node, container_registry): + with patch("cura.Machines.VariantNode.MaterialNode"): # We're not testing the material node here, so patch it out. + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + return VariantNode(container_id, machine_node) + + +def test_variantNodeInit(container_registry, machine_node): + node = createVariantNode("variant_1", machine_node, container_registry) + + assert "material_1" in node.materials + assert "material_2" in node.materials + assert len(node.materials) == 2 + + +def test_variantNodeInit_excludedMaterial(container_registry, machine_node): + machine_node.exclude_materials = ["material_1"] + node = createVariantNode("variant_1", machine_node, container_registry) + + assert "material_1" not in node.materials + assert "material_2" in node.materials + assert len(node.materials) == 1 + + +@pytest.mark.parametrize("metadata,material_result_list", material_node_added_test_data) +def test_materialAdded(container_registry, machine_node, metadata, material_result_list): + variant_node = createVariantNode("machine_1", machine_node, container_registry) + machine_node.exclude_materials = ["material_3"] + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + with patch("cura.Machines.VariantNode.MaterialNode"): # We're not testing the material node here, so patch it out. + with patch.dict(metadata_dict, metadata): + mocked_container = createMockedInstanceContainer() + variant_node._materialAdded(mocked_container) + + assert len(material_result_list) == len(variant_node.materials) + for name in material_result_list: + assert name in variant_node.materials + + +@pytest.mark.parametrize("metadata,changed_material_list,unchanged_material_list", material_node_update_test_data) +def test_materialAdded_update(container_registry, machine_node, metadata, changed_material_list, unchanged_material_list): + variant_node = createVariantNode("machine_1", machine_node, container_registry) + original_material_nodes = copy.copy(variant_node.materials) + + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + with patch("cura.Machines.VariantNode.MaterialNode"): # We're not testing the material node here, so patch it out. + with patch.dict(metadata_dict, metadata): + mocked_container = createMockedInstanceContainer() + variant_node._materialAdded(mocked_container) + + for key in unchanged_material_list: + assert original_material_nodes[key] == variant_node.materials[key] + + for key in changed_material_list: + assert original_material_nodes[key] != variant_node.materials[key] + +## Tests the preferred material when the exact base file is available in the +# materials list for this node. +def test_preferredMaterialExactMatch(empty_variant_node): + empty_variant_node.materials = { + "some_different_material": MagicMock(getMetaDataEntry = lambda x: 3), + "preferred_material_base_file": MagicMock(getMetaDataEntry = lambda x: 3) # Exact match. + } + + assert empty_variant_node.preferredMaterial(approximate_diameter = 3) == empty_variant_node.materials["preferred_material_base_file"], "It should match exactly on this one since it's the preferred material." + +## Tests the preferred material when a submaterial is available in the +# materials list for this node. +def test_preferredMaterialSubmaterial(empty_variant_node): + empty_variant_node.materials = { + "some_different_material": MagicMock(getMetaDataEntry = lambda x: 3), + "preferred_material_base_file_aa04": MagicMock(getMetaDataEntry = lambda x: 3) # This is a submaterial of the preferred material. + } + + assert empty_variant_node.preferredMaterial(approximate_diameter = 3) == empty_variant_node.materials["preferred_material_base_file_aa04"], "It should match on the submaterial just as well." + +## Tests the preferred material matching on the approximate diameter of the +# filament. +def test_preferredMaterialDiameter(empty_variant_node): + empty_variant_node.materials = { + "some_different_material": MagicMock(getMetaDataEntry = lambda x: 3), + "preferred_material_wrong_diameter": MagicMock(getMetaDataEntry = lambda x: 2), # Approximate diameter is 2 instead of 3. + "preferred_material_correct_diameter": MagicMock(getMetaDataEntry = lambda x: 3) # Correct approximate diameter. + } + + assert empty_variant_node.preferredMaterial(approximate_diameter = 3) == empty_variant_node.materials["preferred_material_correct_diameter"], "It should match only on the material with correct diameter." + +## Tests the preferred material matching on a different material if the +# diameter is wrong. +def test_preferredMaterialDiameterNoMatch(empty_variant_node): + empty_variant_node.materials = collections.OrderedDict() + empty_variant_node.materials["some_different_material"] = MagicMock(getMetaDataEntry = lambda x: 3) # This one first so that it gets iterated over first. + empty_variant_node.materials["preferred_material_wrong_diameter"] = MagicMock(getMetaDataEntry = lambda x: 2) + + assert empty_variant_node.preferredMaterial(approximate_diameter = 3) == empty_variant_node.materials["some_different_material"], "It should match on another material with the correct diameter if the preferred one is unavailable." + +## Tests that the material diameter is considered more important to match than +# the preferred diameter. +def test_preferredMaterialDiameterPreference(empty_variant_node): + empty_variant_node.materials = collections.OrderedDict() + empty_variant_node.materials["some_different_material"] = MagicMock(getMetaDataEntry = lambda x: 2) # This one first so that it gets iterated over first. + empty_variant_node.materials["preferred_material_wrong_diameter"] = MagicMock(getMetaDataEntry = lambda x: 2) # Matches on ID but not diameter. + empty_variant_node.materials["not_preferred_but_correct_diameter"] = MagicMock(getMetaDataEntry = lambda x: 3) # Matches diameter but not ID. + + assert empty_variant_node.preferredMaterial(approximate_diameter = 3) == empty_variant_node.materials["not_preferred_but_correct_diameter"], "It should match on the correct diameter even if it's not the preferred one." \ No newline at end of file diff --git a/tests/PrinterOutput/Models/TestPrinterOutputModel.py b/tests/PrinterOutput/Models/TestPrinterOutputModel.py index 3fdb61adbd..9848e0a5fa 100644 --- a/tests/PrinterOutput/Models/TestPrinterOutputModel.py +++ b/tests/PrinterOutput/Models/TestPrinterOutputModel.py @@ -5,11 +5,14 @@ from unittest.mock import MagicMock import pytest from cura.PrinterOutput.Models.PrintJobOutputModel import PrintJobOutputModel +from cura.PrinterOutput.Models.PrinterConfigurationModel import PrinterConfigurationModel from cura.PrinterOutput.Models.PrinterOutputModel import PrinterOutputModel +from cura.PrinterOutput.Peripheral import Peripheral test_validate_data_get_set = [ {"attribute": "name", "value": "YAY"}, {"attribute": "targetBedTemperature", "value": 192}, + {"attribute": "cameraUrl", "value": "YAY!"} ] test_validate_data_get_update = [ @@ -22,6 +25,7 @@ test_validate_data_get_update = [ {"attribute": "targetBedTemperature", "value": 9001}, {"attribute": "activePrintJob", "value": PrintJobOutputModel(MagicMock())}, {"attribute": "state", "value": "BEEPBOOP"}, + ] @@ -79,3 +83,67 @@ def test_getAndUpdate(data): getattr(model, "update" + attribute)(data["value"]) # The signal should not fire again assert signal.emit.call_count == 1 + + +def test_peripherals(): + model = PrinterOutputModel(MagicMock()) + model.peripheralsChanged = MagicMock() + + peripheral = MagicMock(spec=Peripheral) + peripheral.name = "test" + peripheral2 = MagicMock(spec=Peripheral) + peripheral2.name = "test2" + + model.addPeripheral(peripheral) + assert model.peripheralsChanged.emit.call_count == 1 + model.addPeripheral(peripheral2) + assert model.peripheralsChanged.emit.call_count == 2 + + assert model.peripherals == "test, test2" + + model.removePeripheral(peripheral) + assert model.peripheralsChanged.emit.call_count == 3 + assert model.peripherals == "test2" + + +def test_availableConfigurations_addConfiguration(): + model = PrinterOutputModel(MagicMock()) + + configuration = MagicMock(spec = PrinterConfigurationModel) + + model.addAvailableConfiguration(configuration) + assert model.availableConfigurations == [configuration] + + +def test_availableConfigurations_addConfigTwice(): + model = PrinterOutputModel(MagicMock()) + + configuration = MagicMock(spec=PrinterConfigurationModel) + + model.setAvailableConfigurations([configuration]) + assert model.availableConfigurations == [configuration] + + # Adding it again should not have any effect + model.addAvailableConfiguration(configuration) + assert model.availableConfigurations == [configuration] + + +def test_availableConfigurations_removeConfig(): + model = PrinterOutputModel(MagicMock()) + + configuration = MagicMock(spec=PrinterConfigurationModel) + + model.addAvailableConfiguration(configuration) + model.removeAvailableConfiguration(configuration) + assert model.availableConfigurations == [] + + +def test_removeAlreadyRemovedConfiguration(): + model = PrinterOutputModel(MagicMock()) + + configuration = MagicMock(spec=PrinterConfigurationModel) + model.availableConfigurationsChanged = MagicMock() + model.removeAvailableConfiguration(configuration) + assert model.availableConfigurationsChanged.emit.call_count == 0 + assert model.availableConfigurations == [] + diff --git a/tests/PrinterOutput/TestPrinterOutputDevice.py b/tests/PrinterOutput/TestPrinterOutputDevice.py index 4c12a34859..7a9e4e2cc5 100644 --- a/tests/PrinterOutput/TestPrinterOutputDevice.py +++ b/tests/PrinterOutput/TestPrinterOutputDevice.py @@ -1,6 +1,12 @@ from unittest.mock import MagicMock import pytest +from unittest.mock import patch + +from cura.PrinterOutput.Models.ExtruderConfigurationModel import ExtruderConfigurationModel +from cura.PrinterOutput.Models.MaterialOutputModel import MaterialOutputModel +from cura.PrinterOutput.Models.PrinterConfigurationModel import PrinterConfigurationModel +from cura.PrinterOutput.Models.PrinterOutputModel import PrinterOutputModel from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice test_validate_data_get_set = [ @@ -8,10 +14,15 @@ test_validate_data_get_set = [ {"attribute": "connectionState", "value": 1}, ] +@pytest.fixture() +def printer_output_device(): + with patch("UM.Application.Application.getInstance"): + return PrinterOutputDevice("whatever") + @pytest.mark.parametrize("data", test_validate_data_get_set) -def test_getAndSet(data): - model = PrinterOutputDevice("whatever") +def test_getAndSet(data, printer_output_device): + model = printer_output_device # Convert the first letter into a capital attribute = list(data["attribute"]) @@ -35,3 +46,43 @@ def test_getAndSet(data): getattr(model, "set" + attribute)(data["value"]) # The signal should not fire again assert signal.emit.call_count == 1 + + +def test_uniqueConfigurations(printer_output_device): + printer = PrinterOutputModel(MagicMock()) + # Add a printer and fire the signal that ensures they get hooked up correctly. + printer_output_device._printers = [printer] + printer_output_device._onPrintersChanged() + + assert printer_output_device.uniqueConfigurations == [] + configuration = PrinterConfigurationModel() + printer.addAvailableConfiguration(configuration) + + assert printer_output_device.uniqueConfigurations == [configuration] + + # Once the type of printer is set, it's active configuration counts as being set. + # In that case, that should also be added to the list of available configurations + printer.updateType("blarg!") + loaded_material = MaterialOutputModel(guid = "", type = "PLA", color = "Blue", brand = "Generic", name = "Blue PLA") + loaded_left_extruder = ExtruderConfigurationModel(0) + loaded_left_extruder.setMaterial(loaded_material) + loaded_right_extruder = ExtruderConfigurationModel(1) + loaded_right_extruder.setMaterial(loaded_material) + printer.printerConfiguration.setExtruderConfigurations([loaded_left_extruder, loaded_right_extruder]) + assert printer_output_device.uniqueConfigurations == [configuration, printer.printerConfiguration] + + +def test_uniqueConfigurations_empty_is_filtered_out(printer_output_device): + printer = PrinterOutputModel(MagicMock()) + # Add a printer and fire the signal that ensures they get hooked up correctly. + printer_output_device._printers = [printer] + printer_output_device._onPrintersChanged() + + printer.updateType("blarg!") + empty_material = MaterialOutputModel(guid = "", type = "empty", color = "empty", brand = "Generic", name = "Empty") + empty_left_extruder = ExtruderConfigurationModel(0) + empty_left_extruder.setMaterial(empty_material) + empty_right_extruder = ExtruderConfigurationModel(1) + empty_right_extruder.setMaterial(empty_material) + printer.printerConfiguration.setExtruderConfigurations([empty_left_extruder, empty_right_extruder]) + assert printer_output_device.uniqueConfigurations == [] diff --git a/tests/Settings/MockContainer.py b/tests/Settings/MockContainer.py new file mode 100644 index 0000000000..533938c631 --- /dev/null +++ b/tests/Settings/MockContainer.py @@ -0,0 +1,130 @@ +from typing import Optional + +from UM.Settings.Interfaces import ContainerInterface +import UM.PluginObject +from UM.Signal import Signal + + +## Fake container class to add to the container registry. +# +# This allows us to test the container registry without testing the container +# class. If something is wrong in the container class it won't influence this +# test. + +class MockContainer(ContainerInterface, UM.PluginObject.PluginObject): + ## Initialise a new definition container. + # + # The container will have the specified ID and all metadata in the + # provided dictionary. + def __init__(self, metadata = None): + super().__init__() + if metadata is None: + self._metadata = {} + else: + self._metadata = metadata + self._plugin_id = "MockContainerPlugin" + + ## Gets the ID that was provided at initialisation. + # + # \return The ID of the container. + def getId(self): + return self._metadata["id"] + + ## Gets all metadata of this container. + # + # This returns the metadata dictionary that was provided in the + # constructor of this mock container. + # + # \return The metadata for this container. + def getMetaData(self): + return self._metadata + + ## Gets a metadata entry from the metadata dictionary. + # + # \param key The key of the metadata entry. + # \return The value of the metadata entry, or None if there is no such + # entry. + def getMetaDataEntry(self, entry, default = None): + if entry in self._metadata: + return self._metadata[entry] + return default + + ## Gets a human-readable name for this container. + # \return The name from the metadata, or "MockContainer" if there was no + # name provided. + def getName(self): + return self._metadata.get("name", "MockContainer") + + ## Get whether a container stack is enabled or not. + # \return Always returns True. + @property + def isEnabled(self): + return True + + ## Get whether the container item is stored on a read only location in the filesystem. + # + # \return Always returns False + def isReadOnly(self): + return False + + ## Mock get path + def getPath(self): + return "/path/to/the/light/side" + + ## Mock set path + def setPath(self, path): + pass + + def getAllKeys(self): + pass + + def setProperty(self, key, property_name, property_value, container = None, set_from_cache = False): + pass + + def getProperty(self, key, property_name, context=None): + if key in self.items: + return self.items[key] + + return None + + ## Get the value of a container item. + # + # Since this mock container cannot contain any items, it always returns + # None. + # + # \return Always returns None. + def getValue(self, key): + pass + + ## Get whether the container item has a specific property. + # + # This method is not implemented in the mock container. + def hasProperty(self, key, property_name): + return key in self.items + + ## Serializes the container to a string representation. + # + # This method is not implemented in the mock container. + def serialize(self, ignored_metadata_keys = None): + raise NotImplementedError() + + ## Deserializes the container from a string representation. + # + # This method is not implemented in the mock container. + def deserialize(self, serialized, file_name: Optional[str] = None): + raise NotImplementedError() + + @classmethod + def getConfigurationTypeFromSerialized(cls, serialized: str): + raise NotImplementedError() + + @classmethod + def getVersionFromSerialized(cls, serialized): + raise NotImplementedError() + + def isDirty(self): + return True + + metaDataChanged = Signal() + propertyChanged = Signal() + containersChanged = Signal() diff --git a/tests/Settings/TestContainerManager.py b/tests/Settings/TestContainerManager.py index f4aa140b6b..ff23b727e6 100644 --- a/tests/Settings/TestContainerManager.py +++ b/tests/Settings/TestContainerManager.py @@ -2,7 +2,7 @@ from unittest import TestCase from unittest.mock import MagicMock from PyQt5.QtCore import QUrl - +from unittest.mock import patch from UM.MimeTypeDatabase import MimeTypeDatabase from cura.Settings.ContainerManager import ContainerManager import tempfile @@ -42,20 +42,23 @@ class TestContainerManager(TestCase): MimeTypeDatabase.removeMimeType(self._mocked_mime) def test_getContainerMetaDataEntry(self): - assert self._container_manager.getContainerMetaDataEntry("test", "test_data") == "omg" - assert self._container_manager.getContainerMetaDataEntry("test", "entry_that_is_not_defined") == "" + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=self._application)): + assert self._container_manager.getContainerMetaDataEntry("test", "test_data") == "omg" + assert self._container_manager.getContainerMetaDataEntry("test", "entry_that_is_not_defined") == "" def test_clearUserContainer(self): - self._container_manager.clearUserContainers() + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=self._application)): + self._container_manager.clearUserContainers() assert self._machine_manager.activeMachine.userChanges.clear.call_count == 1 def test_getContainerNameFilters(self): - # If nothing is added, we still expect to get the all files filter - assert self._container_manager.getContainerNameFilters("") == ['All Files (*)'] + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=self._application)): + # If nothing is added, we still expect to get the all files filter + assert self._container_manager.getContainerNameFilters("") == ['All Files (*)'] - # Pretend that a new type was added. - self._container_registry.getContainerTypes = MagicMock(return_value=[("None", None)]) - assert self._container_manager.getContainerNameFilters("") == ['UnitTest! (*.omg)', 'All Files (*)'] + # Pretend that a new type was added. + self._container_registry.getContainerTypes = MagicMock(return_value=[("None", None)]) + assert self._container_manager.getContainerNameFilters("") == ['UnitTest! (*.omg)', 'All Files (*)'] def test_exportContainerUnknownFileType(self): # The filetype is not known, so this should cause an error! @@ -69,8 +72,9 @@ class TestContainerManager(TestCase): assert self._container_manager.exportContainer("", "whatever", "whatever")["status"] == "error" def test_exportContainer(self): - with tempfile.TemporaryDirectory() as tmpdirname: - result = self._container_manager.exportContainer("test", "whatever", os.path.join(tmpdirname, "whatever.omg")) - assert(os.path.exists(result["path"])) - with open(result["path"], "r", encoding="utf-8") as f: - assert f.read() == self._mocked_container_data + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=self._application)): + with tempfile.TemporaryDirectory() as tmpdirname: + result = self._container_manager.exportContainer("test", "whatever", os.path.join(tmpdirname, "whatever.omg")) + assert(os.path.exists(result["path"])) + with open(result["path"], "r", encoding="utf-8") as f: + assert f.read() == self._mocked_container_data \ No newline at end of file diff --git a/tests/Settings/TestCuraContainerRegistry.py b/tests/Settings/TestCuraContainerRegistry.py index 1308e3d4df..6918329397 100644 --- a/tests/Settings/TestCuraContainerRegistry.py +++ b/tests/Settings/TestCuraContainerRegistry.py @@ -6,12 +6,13 @@ import pytest #To parameterize tests. import unittest.mock #To mock and monkeypatch stuff. from UM.Settings.DefinitionContainer import DefinitionContainer +from cura.ReaderWriters.ProfileReader import NoProfileException from cura.Settings.ExtruderStack import ExtruderStack #Testing for returning the correct types of stacks. from cura.Settings.GlobalStack import GlobalStack #Testing for returning the correct types of stacks. import UM.Settings.InstanceContainer #Creating instance containers to register. import UM.Settings.ContainerRegistry #Making empty container stacks. import UM.Settings.ContainerStack #Setting the container registry here properly. - +import cura.CuraApplication def teardown(): #If the temporary file for the legacy file rename test still exists, remove it. @@ -35,16 +36,22 @@ def test_createUniqueName(container_registry): # It should add a #2 to test2 assert container_registry.createUniqueName("user", "test", "test2", "nope") == "test2 #2" + # The provided suggestion is already correct, so nothing to do + assert container_registry.createUniqueName("user", "test", "test2 #2", "nope") == "test2 #2" + + # In case we don't provide a new name, use the fallback + assert container_registry.createUniqueName("user", "test", "", "nope") == "nope" + ## Tests whether addContainer properly converts to ExtruderStack. def test_addContainerExtruderStack(container_registry, definition_container, definition_changes_container): container_registry.addContainer(definition_container) container_registry.addContainer(definition_changes_container) - container_stack = UM.Settings.ContainerStack.ContainerStack(stack_id = "Test Extruder Stack") #A container we're going to convert. + container_stack = ExtruderStack("Test Extruder Stack") #A container we're going to convert. container_stack.setMetaDataEntry("type", "extruder_train") #This is now an extruder train. - container_stack.insertContainer(0, definition_container) #Add a definition to it so it doesn't complain. - container_stack.insertContainer(1, definition_changes_container) + container_stack.setDefinition(definition_container) #Add a definition to it so it doesn't complain. + container_stack.setDefinitionChanges(definition_changes_container) mock_super_add_container = unittest.mock.MagicMock() #Takes the role of the Uranium-ContainerRegistry where the resulting containers get registered. with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): @@ -60,10 +67,10 @@ def test_addContainerGlobalStack(container_registry, definition_container, defin container_registry.addContainer(definition_container) container_registry.addContainer(definition_changes_container) - container_stack = UM.Settings.ContainerStack.ContainerStack(stack_id = "Test Global Stack") #A container we're going to convert. + container_stack = GlobalStack("Test Global Stack") #A container we're going to convert. container_stack.setMetaDataEntry("type", "machine") #This is now a global stack. - container_stack.insertContainer(0, definition_container) #Must have a definition. - container_stack.insertContainer(1, definition_changes_container) #Must have a definition changes. + container_stack.setDefinition(definition_container) #Must have a definition. + container_stack.setDefinitionChanges(definition_changes_container) #Must have a definition changes. mock_super_add_container = unittest.mock.MagicMock() #Takes the role of the Uranium-ContainerRegistry where the resulting containers get registered. with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container): @@ -159,6 +166,7 @@ test_loadMetaDataValidation_data = [ } ] + @pytest.mark.parametrize("parameters", test_loadMetaDataValidation_data) def test_loadMetadataValidation(container_registry, definition_container, parameters): from cura.CuraApplication import CuraApplication @@ -178,4 +186,143 @@ def test_loadMetadataValidation(container_registry, definition_container, parame assert parameters["id"] in container_registry.metadata assert container_registry.metadata[parameters["id"]] == parameters["metadata"] else: - assert parameters["id"] not in container_registry.metadata \ No newline at end of file + assert parameters["id"] not in container_registry.metadata + + +class TestExportQualityProfile: + # This class is just there to provide some grouping for the tests. + def test_exportQualityProfileInvalidFileType(self, container_registry): + # With an invalid file_type, we should get a false for success. + assert not container_registry.exportQualityProfile([], "zomg", "invalid") + + def test_exportQualityProfileFailedWriter(self, container_registry): + # Create a writer that always fails. + mocked_writer = unittest.mock.MagicMock(name = "mocked_writer") + mocked_writer.write = unittest.mock.MagicMock(return_value = False) + container_registry._findProfileWriter = unittest.mock.MagicMock("findProfileWriter", return_value = mocked_writer) + + # Ensure that it actually fails if the writer did. + with unittest.mock.patch("UM.Application.Application.getInstance"): + assert not container_registry.exportQualityProfile([], "zomg", "test files (*.tst)") + + def test_exportQualityProfileExceptionWriter(self, container_registry): + # Create a writer that always fails. + mocked_writer = unittest.mock.MagicMock(name = "mocked_writer") + mocked_writer.write = unittest.mock.MagicMock(return_value = True, side_effect = Exception("Failed :(")) + container_registry._findProfileWriter = unittest.mock.MagicMock("findProfileWriter", return_value = mocked_writer) + + # Ensure that it actually fails if the writer did. + with unittest.mock.patch("UM.Application.Application.getInstance"): + assert not container_registry.exportQualityProfile([], "zomg", "test files (*.tst)") + + def test_exportQualityProfileSuccessWriter(self, container_registry): + # Create a writer that always fails. + mocked_writer = unittest.mock.MagicMock(name="mocked_writer") + mocked_writer.write = unittest.mock.MagicMock(return_value=True) + container_registry._findProfileWriter = unittest.mock.MagicMock("findProfileWriter", return_value=mocked_writer) + + # Ensure that it actually fails if the writer did. + with unittest.mock.patch("UM.Application.Application.getInstance"): + assert container_registry.exportQualityProfile([], "zomg", "test files (*.tst)") + + +def test__findProfileWriterNoPlugins(container_registry): + # Mock it so that no IO plugins are found. + container_registry._getIOPlugins = unittest.mock.MagicMock(return_value = []) + + with unittest.mock.patch("UM.PluginRegistry.PluginRegistry.getInstance"): + # Since there are no writers, don't return any + assert container_registry._findProfileWriter(".zomg", "dunno") is None + + +def test__findProfileWriter(container_registry): + # Mock it so that no IO plugins are found. + container_registry._getIOPlugins = unittest.mock.MagicMock(return_value = [("writer_id", {"profile_writer": [{"extension": ".zomg", "description": "dunno"}]})]) + + with unittest.mock.patch("UM.PluginRegistry.PluginRegistry.getInstance"): + # In this case it's getting a mocked object (from the mocked_plugin_registry) + assert container_registry._findProfileWriter(".zomg", "dunno") is not None + + +def test_importProfileEmptyFileName(container_registry): + result = container_registry.importProfile("") + assert result["status"] == "error" + + +mocked_application = unittest.mock.MagicMock(name = "application") +mocked_plugin_registry = unittest.mock.MagicMock(name="mocked_plugin_registry") + +@unittest.mock.patch("UM.Application.Application.getInstance", unittest.mock.MagicMock(return_value = mocked_application)) +@unittest.mock.patch("UM.PluginRegistry.PluginRegistry.getInstance", unittest.mock.MagicMock(return_value = mocked_plugin_registry)) +class TestImportProfile: + mocked_global_stack = unittest.mock.MagicMock(name="global stack") + mocked_global_stack.extruders = {0: unittest.mock.MagicMock(name="extruder stack")} + mocked_global_stack.getId = unittest.mock.MagicMock(return_value="blarg") + mocked_profile_reader = unittest.mock.MagicMock() + + mocked_plugin_registry.getPluginObject = unittest.mock.MagicMock(return_value=mocked_profile_reader) + + def test_importProfileWithoutGlobalStack(self, container_registry): + mocked_application.getGlobalContainerStack = unittest.mock.MagicMock(return_value = None) + result = container_registry.importProfile("non_empty") + assert result["status"] == "error" + + def test_importProfileNoProfileException(self, container_registry): + container_registry._getIOPlugins = unittest.mock.MagicMock(return_value=[("reader_id", {"profile_reader": [{"extension": "zomg", "description": "dunno"}]})]) + mocked_application.getGlobalContainerStack = unittest.mock.MagicMock(return_value=self.mocked_global_stack) + self.mocked_profile_reader.read = unittest.mock.MagicMock(side_effect = NoProfileException) + result = container_registry.importProfile("test.zomg") + # It's not an error, but we also didn't find any profile to read. + assert result["status"] == "ok" + + def test_importProfileGenericException(self, container_registry): + container_registry._getIOPlugins = unittest.mock.MagicMock(return_value=[("reader_id", {"profile_reader": [{"extension": "zomg", "description": "dunno"}]})]) + mocked_application.getGlobalContainerStack = unittest.mock.MagicMock(return_value=self.mocked_global_stack) + self.mocked_profile_reader.read = unittest.mock.MagicMock(side_effect = Exception) + result = container_registry.importProfile("test.zomg") + assert result["status"] == "error" + + def test_importProfileNoDefinitionFound(self, container_registry): + container_registry._getIOPlugins = unittest.mock.MagicMock(return_value=[("reader_id", {"profile_reader": [{"extension": "zomg", "description": "dunno"}]})]) + mocked_application.getGlobalContainerStack = unittest.mock.MagicMock(return_value=self.mocked_global_stack) + container_registry.findDefinitionContainers = unittest.mock.MagicMock(return_value = []) + mocked_profile = unittest.mock.MagicMock(name = "Mocked_global_profile") + self.mocked_profile_reader.read = unittest.mock.MagicMock(return_value = [mocked_profile]) + + result = container_registry.importProfile("test.zomg") + assert result["status"] == "error" + + @pytest.mark.skip + def test_importProfileSuccess(self, container_registry): + container_registry._getIOPlugins = unittest.mock.MagicMock(return_value=[("reader_id", {"profile_reader": [{"extension": "zomg", "description": "dunno"}]})]) + + mocked_application.getGlobalContainerStack = unittest.mock.MagicMock(return_value=self.mocked_global_stack) + + mocked_definition = unittest.mock.MagicMock(name = "definition") + + container_registry.findContainers = unittest.mock.MagicMock(return_value=[mocked_definition]) + container_registry.findDefinitionContainers = unittest.mock.MagicMock(return_value = [mocked_definition]) + mocked_profile = unittest.mock.MagicMock(name = "Mocked_global_profile") + + self.mocked_profile_reader.read = unittest.mock.MagicMock(return_value = [mocked_profile]) + with unittest.mock.patch.object(container_registry, "createUniqueName", return_value="derp"): + with unittest.mock.patch.object(container_registry, "_configureProfile", return_value=None): + result = container_registry.importProfile("test.zomg") + + assert result["status"] == "ok" + + +@pytest.mark.parametrize("metadata,result", [(None, False), + ({}, False), + ({"setting_version": cura.CuraApplication.CuraApplication.SettingVersion}, True), + ({"setting_version": 0}, False)]) +def test_isMetaDataValid(container_registry, metadata, result): + assert container_registry._isMetadataValid(metadata) == result + + +def test_getIOPlugins(container_registry): + plugin_registry = unittest.mock.MagicMock() + plugin_registry.getActivePlugins = unittest.mock.MagicMock(return_value = ["lizard"]) + plugin_registry.getMetaData = unittest.mock.MagicMock(return_value = {"zomg": {"test": "test"}}) + with unittest.mock.patch("UM.PluginRegistry.PluginRegistry.getInstance", unittest.mock.MagicMock(return_value = plugin_registry)): + assert container_registry._getIOPlugins("zomg") == [("lizard", {"zomg": {"test": "test"}})] \ No newline at end of file diff --git a/tests/Settings/TestCuraStackBuilder.py b/tests/Settings/TestCuraStackBuilder.py index 9225c617cc..aebde3406f 100644 --- a/tests/Settings/TestCuraStackBuilder.py +++ b/tests/Settings/TestCuraStackBuilder.py @@ -3,6 +3,7 @@ from unittest.mock import patch, MagicMock import pytest from UM.Settings.InstanceContainer import InstanceContainer +from cura.Machines.QualityGroup import QualityGroup from cura.Settings.CuraStackBuilder import CuraStackBuilder @pytest.fixture @@ -27,6 +28,14 @@ def quality_container(): return container +@pytest.fixture +def intent_container(): + container = InstanceContainer(container_id="intent container") + container.setMetaDataEntry("type", "intent") + + return container + + @pytest.fixture def quality_changes_container(): container = InstanceContainer(container_id="quality changes container") @@ -43,21 +52,54 @@ def test_createMachineWithUnknownDefinition(application, container_registry): assert mocked_config_error.addFaultyContainers.called_with("NOPE") -'''def test_createMachine(application, container_registry, definition_container, global_variant, material_instance_container, quality_container, quality_changes_container): +def test_createMachine(application, container_registry, definition_container, global_variant, material_instance_container, + quality_container, intent_container, quality_changes_container): variant_manager = MagicMock(name = "Variant Manager") - global_variant_node = MagicMock( name = "global variant node") - global_variant_node.getContainer = MagicMock(return_value = global_variant) + quality_manager = MagicMock(name = "Quality Manager") + global_variant_node = MagicMock(name = "global variant node") + global_variant_node.container = global_variant variant_manager.getDefaultVariantNode = MagicMock(return_value = global_variant_node) + quality_group = QualityGroup(name = "zomg", quality_type = "normal") + quality_group.node_for_global = MagicMock(name = "Node for global") + quality_group.node_for_global.container = quality_container + quality_manager.getQualityGroups = MagicMock(return_value = {"normal": quality_group}) application.getContainerRegistry = MagicMock(return_value=container_registry) - application.getVariantManager = MagicMock(return_value = variant_manager) application.empty_material_container = material_instance_container application.empty_quality_container = quality_container + application.empty_intent_container = intent_container application.empty_quality_changes_container = quality_changes_container + application.empty_variant_container = global_variant + + metadata = definition_container.getMetaData() + metadata["machine_extruder_trains"] = {} + metadata["preferred_quality_type"] = "normal" - definition_container.getMetaDataEntry = MagicMock(return_value = {}, name = "blarg") - print("DEF CONT", definition_container) container_registry.addContainer(definition_container) - with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): - assert CuraStackBuilder.createMachine("Whatever", "Test Definition") is None''' + quality_node = MagicMock() + machine_node = MagicMock() + machine_node.preferredGlobalQuality = MagicMock(return_value = quality_node) + quality_node.container = quality_container + + # Patch out the creation of MachineNodes since that isn't under test (and would require quite a bit of extra setup) + with patch("cura.Machines.ContainerTree.MachineNode", MagicMock(return_value = machine_node)): + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): + machine = CuraStackBuilder.createMachine("Whatever", "Test Definition") + + assert machine.quality == quality_container + assert machine.definition == definition_container + assert machine.variant == global_variant + + +def test_createExtruderStack(application, definition_container, global_variant, material_instance_container, + quality_container, intent_container, quality_changes_container): + application.empty_material_container = material_instance_container + application.empty_quality_container = quality_container + application.empty_intent_container = intent_container + application.empty_quality_changes_container = quality_changes_container + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value = application)): + extruder_stack = CuraStackBuilder.createExtruderStack("Whatever", definition_container, "meh", 0, global_variant, material_instance_container, quality_container) + assert extruder_stack.variant == global_variant + assert extruder_stack.material == material_instance_container + assert extruder_stack.quality == quality_container \ No newline at end of file diff --git a/tests/Settings/TestDefinitionContainer.py b/tests/Settings/TestDefinitionContainer.py index 73d4e89d20..6e502280cd 100644 --- a/tests/Settings/TestDefinitionContainer.py +++ b/tests/Settings/TestDefinitionContainer.py @@ -1,23 +1,22 @@ # Copyright (c) 2019 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +import json # To check files for unnecessarily overridden properties. +import os +import os.path import pytest #This module contains automated tests. +from typing import Any, Dict +import uuid import UM.Settings.ContainerRegistry #To create empty instance containers. import UM.Settings.ContainerStack #To set the container registry the container stacks use. from UM.Settings.DefinitionContainer import DefinitionContainer #To check against the class of DefinitionContainer. - - -import os -import os.path -import uuid - from UM.Resources import Resources Resources.addSearchPath(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "resources"))) -machine_filepaths = os.listdir(os.path.join(os.path.dirname(__file__), "..", "..", "resources", "definitions")) +machine_filepaths = sorted(os.listdir(os.path.join(os.path.dirname(__file__), "..", "..", "resources", "definitions"))) all_meshes = os.listdir(os.path.join(os.path.dirname(__file__), "..", "..", "resources", "meshes")) all_images = os.listdir(os.path.join(os.path.dirname(__file__), "..", "..", "resources", "images")) @@ -51,4 +50,90 @@ def assertIsDefinitionValid(definition_container, path, file_name): assert metadata[0]["platform"] in all_meshes if "platform_texture" in metadata[0]: - assert metadata[0]["platform_texture"] in all_images \ No newline at end of file + assert metadata[0]["platform_texture"] in all_images + +## Tests whether setting values are not being hidden by parent containers. +# +# When a definition container defines a "default_value" but inherits from a +# definition that defines a "value", the "default_value" is ineffective. This +# test fails on those things. +@pytest.mark.parametrize("file_name", machine_filepaths) +def test_validateOverridingDefaultValue(file_name: str): + definition_path = os.path.join(os.path.dirname(__file__), "..", "..", "resources", "definitions", file_name) + with open(definition_path, encoding = "utf-8") as f: + doc = json.load(f) + + if "inherits" not in doc: + return # We only want to check for documents where the inheritance overrides the children. If there's no inheritance, this can't happen so it's fine. + if "overrides" not in doc: + return # No settings are being overridden. No need to check anything. + parent_settings = getInheritedSettings(doc["inherits"]) + for key, val in doc["overrides"].items(): + if "value" in parent_settings[key]: + assert "default_value" not in val, "Unnecessary default_value for {key} in {file_name}".format(key = key, file_name = file_name) # If there is a value in the parent settings, then the default_value is not effective. + +## Get all settings and their properties from a definition we're inheriting +# from. +# \param definition_id The definition we're inheriting from. +# \return A dictionary of settings by key. Each setting is a dictionary of +# properties. +def getInheritedSettings(definition_id: str) -> Dict[str, Any]: + definition_path = os.path.join(os.path.dirname(__file__), "..", "..", "resources", "definitions", definition_id + ".def.json") + with open(definition_path, encoding = "utf-8") as f: + doc = json.load(f) + result = {} + + if "inherits" in doc: # Recursive inheritance. + result.update(getInheritedSettings(doc["inherits"])) + if "settings" in doc: + result.update(flattenSettings(doc["settings"])) + if "overrides" in doc: + result = merge_dicts(result, doc["overrides"]) + + return result + +## Put all settings in the main dictionary rather than in children dicts. +# \param settings Nested settings. The keys are the setting IDs. The values +# are dictionaries of properties per setting, including the "children" +# property. +# \return A dictionary of settings by key. Each setting is a dictionary of +# properties. +def flattenSettings(settings: Dict[str, Any]) -> Dict[str, Any]: + result = {} + for entry, contents in settings.items(): + if "children" in contents: + result.update(flattenSettings(contents["children"])) + del contents["children"] + result[entry] = contents + return result + +## Make one dictionary override the other. Nested dictionaries override each +# other in the same way. +# \param base A dictionary of settings that will get overridden by the other. +# \param overrides A dictionary of settings that will override the other. +# \return Combined setting data. +def merge_dicts(base: Dict[str, Any], overrides: Dict[str, Any]) -> Dict[str, Any]: + result = {} + result.update(base) + for key, val in overrides.items(): + if key not in result: + result[key] = val + continue + + if isinstance(result[key], dict) and isinstance(val, dict): + result[key] = merge_dicts(result[key], val) + else: + result[key] = val + return result + +## Verifies that definition contains don't have an ID field. +# +# ID fields are legacy. They should not be used any more. This is legacy that +# people don't seem to be able to get used to. +@pytest.mark.parametrize("file_name", machine_filepaths) +def test_noId(file_name): + definition_path = os.path.join(os.path.dirname(__file__), "..", "..", "resources", "definitions", file_name) + with open(definition_path, encoding = "utf-8") as f: + doc = json.load(f) + + assert "id" not in doc, "Definitions should not have an ID field." \ No newline at end of file diff --git a/tests/Settings/TestExtruderStack.py b/tests/Settings/TestExtruderStack.py index df2e1075d1..73d5f583b3 100644 --- a/tests/Settings/TestExtruderStack.py +++ b/tests/Settings/TestExtruderStack.py @@ -9,6 +9,7 @@ import UM.Settings.ContainerRegistry #To create empty instance containers. import UM.Settings.ContainerStack #To set the container registry the container stacks use. from UM.Settings.DefinitionContainer import DefinitionContainer #To check against the class of DefinitionContainer. from UM.Settings.InstanceContainer import InstanceContainer #To check against the class of InstanceContainer. +from cura.Settings import Exceptions from cura.Settings.Exceptions import InvalidContainerError, InvalidOperationError #To check whether the correct exceptions are raised. from cura.Settings.ExtruderManager import ExtruderManager from cura.Settings.cura_empty_instance_containers import empty_container @@ -297,4 +298,31 @@ def test_setPropertyUser(key, property, value, extruder_stack): extruder_stack.setProperty(key, property, value) #The actual test. - extruder_stack.userChanges.setProperty.assert_called_once_with(key, property, value, None, False) #Make sure that the user container gets a setProperty call. \ No newline at end of file + extruder_stack.userChanges.setProperty.assert_called_once_with(key, property, value, None, False) #Make sure that the user container gets a setProperty call. + + +def test_setEnabled(extruder_stack): + extruder_stack.setEnabled(True) + assert extruder_stack.isEnabled + extruder_stack.setEnabled(False) + assert not extruder_stack.isEnabled + + +def test_getPropertyWithoutGlobal(extruder_stack): + assert extruder_stack.getNextStack() is None + + with pytest.raises(Exceptions.NoGlobalStackError): + extruder_stack.getProperty("whatever", "value") + + +def test_getMachineDefinitionWithoutGlobal(extruder_stack): + assert extruder_stack.getNextStack() is None + + with pytest.raises(Exceptions.NoGlobalStackError): + extruder_stack._getMachineDefinition() + +def test_getMachineDefinition(extruder_stack): + mocked_next_stack = unittest.mock.MagicMock() + mocked_next_stack._getMachineDefinition = unittest.mock.MagicMock(return_value = "ZOMG") + extruder_stack.getNextStack = unittest.mock.MagicMock(return_value = mocked_next_stack) + assert extruder_stack._getMachineDefinition() == "ZOMG" \ No newline at end of file diff --git a/tests/Settings/TestSettingInheritanceManager.py b/tests/Settings/TestSettingInheritanceManager.py new file mode 100644 index 0000000000..3589d8b91f --- /dev/null +++ b/tests/Settings/TestSettingInheritanceManager.py @@ -0,0 +1,137 @@ +from unittest.mock import patch, MagicMock + +import pytest + +from UM.Settings.SettingFunction import SettingFunction +from UM.Settings.SettingInstance import InstanceState +from cura.Settings.SettingInheritanceManager import SettingInheritanceManager + +setting_function = SettingFunction("") +setting_function.getUsedSettingKeys = MagicMock(return_value = ["omg", "zomg"]) + +setting_property_dict = {"setting_1": {}, + "setting_2": {"state": InstanceState.User, "enabled": False}, + "setting_3": {"state": InstanceState.User, "enabled": True}, + "setting_4": {"state": InstanceState.User, "enabled": True, "value": 12}, + "setting_5": {"state": InstanceState.User, "enabled": True, "value": setting_function}} + + +def getPropertySideEffect(*args, **kwargs): + properties = setting_property_dict.get(args[0]) + if properties: + return properties.get(args[1]) + + +@pytest.fixture +def setting_inheritance_manager(): + with patch("UM.Application.Application.getInstance"): + with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance"): + return SettingInheritanceManager() + +@pytest.fixture +def mocked_stack(): + mocked_stack = MagicMock() + mocked_stack.getProperty = MagicMock(side_effect=getPropertySideEffect) + mocked_stack.getNextStack = MagicMock(return_value = None) + mocked_stack.getAllKeys = MagicMock(return_value = ["omg", "zomg", "blarg"]) + return mocked_stack + +def test_getChildrenKeysWithOverrideNoGlobalStack(setting_inheritance_manager): + setting_inheritance_manager._global_container_stack = None + assert setting_inheritance_manager.getChildrenKeysWithOverride("derp") == [] + + +def test_getChildrenKeysWithOverrideEmptyDefinitions(setting_inheritance_manager): + mocked_global_container = MagicMock() + mocked_global_container.definition.findDefinitions = MagicMock(return_value = []) + setting_inheritance_manager._global_container_stack = mocked_global_container + assert setting_inheritance_manager.getChildrenKeysWithOverride("derp") == [] + + +def test_getChildrenKeysWithOverride(setting_inheritance_manager): + mocked_global_container = MagicMock() + mocked_definition = MagicMock() + mocked_definition.getAllKeys = MagicMock(return_value = ["omg", "zomg", "blarg"]) + mocked_global_container.definition.findDefinitions = MagicMock(return_value=[mocked_definition]) + setting_inheritance_manager._global_container_stack = mocked_global_container + + setting_inheritance_manager._settings_with_inheritance_warning = ["omg", "zomg"] + + assert setting_inheritance_manager.getChildrenKeysWithOverride("derp") == ["omg", "zomg"] + + +def test_manualRemoveOverrideWrongSetting(setting_inheritance_manager): + setting_inheritance_manager._settings_with_inheritance_warning = ["omg", "zomg"] + assert setting_inheritance_manager.settingsWithInheritanceWarning == ["omg", "zomg"] + + # Shouldn't do anything + setting_inheritance_manager.manualRemoveOverride("BLARG") + assert setting_inheritance_manager.settingsWithInheritanceWarning == ["omg", "zomg"] + + +def test_manualRemoveOverrideExistingSetting(setting_inheritance_manager): + setting_inheritance_manager._settings_with_inheritance_warning = ["omg", "zomg"] + assert setting_inheritance_manager.settingsWithInheritanceWarning == ["omg", "zomg"] + + # Shouldn't do anything + setting_inheritance_manager.manualRemoveOverride("omg") + assert setting_inheritance_manager.settingsWithInheritanceWarning == ["zomg"] + + +def test_getOverridesForExtruderNoGlobalStack(setting_inheritance_manager): + setting_inheritance_manager._global_container_stack = None + assert setting_inheritance_manager.getOverridesForExtruder("derp", 0) == [] + + +def test_settingIsOverwritingInheritanceNoUserState(setting_inheritance_manager, mocked_stack): + # Setting 1 doesn't have a user state, so it cant have an override + assert not setting_inheritance_manager._settingIsOverwritingInheritance("setting_1", mocked_stack) + + +def test_settingIsOverwritingInheritanceNotEnabled(setting_inheritance_manager, mocked_stack): + # Setting 2 doesn't have a enabled, so it cant have an override + assert not setting_inheritance_manager._settingIsOverwritingInheritance("setting_2", mocked_stack) + + +def test_settingIsOverwritingInheritanceNoContainers(setting_inheritance_manager, mocked_stack): + mocked_stack.getContainers = MagicMock(return_value = []) + # All the properties are correct, but there are no containers :( + assert not setting_inheritance_manager._settingIsOverwritingInheritance("setting_3", mocked_stack) + + +def test_settingIsOverwritingInheritanceNoneValue(setting_inheritance_manager, mocked_stack): + mocked_container = MagicMock() + mocked_container.getProperty = MagicMock(side_effect=getPropertySideEffect) + mocked_stack.getContainers = MagicMock(return_value = [mocked_container]) + + # Setting 3 doesn't have a value, so even though the container is there, it's value is None + assert not setting_inheritance_manager._settingIsOverwritingInheritance("setting_3", mocked_stack) + + +def test_settingIsOverwritingInheritanceNoSettingFunction(setting_inheritance_manager, mocked_stack): + mocked_container = MagicMock() + mocked_container.getProperty = MagicMock(side_effect=getPropertySideEffect) + mocked_stack.getContainers = MagicMock(return_value=[mocked_container]) + + # Setting 4 does have a value, but it's not a settingFunction + assert not setting_inheritance_manager._settingIsOverwritingInheritance("setting_4", mocked_stack) + + +def test_settingIsOverwritingInheritanceSingleSettingFunction(setting_inheritance_manager, mocked_stack): + mocked_container = MagicMock() + mocked_container.getProperty = MagicMock(side_effect=getPropertySideEffect) + mocked_stack.getContainers = MagicMock(return_value=[mocked_container]) + setting_inheritance_manager._active_container_stack = mocked_stack + # Setting 5 does have a value, but we only have one container filled + assert not setting_inheritance_manager._settingIsOverwritingInheritance("setting_5", mocked_stack) + + +def test_settingIsOverwritingInheritance(setting_inheritance_manager, mocked_stack): + mocked_container = MagicMock() + mocked_second_container = MagicMock() + mocked_second_container.getProperty = MagicMock(return_value = 12) + mocked_container.getProperty = MagicMock(side_effect=getPropertySideEffect) + mocked_stack.getContainers = MagicMock(return_value=[mocked_second_container, mocked_container]) + setting_inheritance_manager._active_container_stack = mocked_stack + + assert setting_inheritance_manager._settingIsOverwritingInheritance("setting_5", mocked_stack) \ No newline at end of file diff --git a/tests/Settings/TestSettingOverrideDecorator.py b/tests/Settings/TestSettingOverrideDecorator.py new file mode 100644 index 0000000000..50c23c409f --- /dev/null +++ b/tests/Settings/TestSettingOverrideDecorator.py @@ -0,0 +1,52 @@ +from unittest.mock import patch, MagicMock + +import pytest + +from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator + + +extruder_manager = MagicMock(name= "ExtruderManager") +application = MagicMock(name="application") +container_registry = MagicMock(name="container_registry") + +@pytest.fixture() +def setting_override_decorator(): + # Ensure that all the call counts and the like are reset. + container_registry.reset_mock() + application.reset_mock() + extruder_manager.reset_mock() + + # Actually create the decorator. + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)): + with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance", MagicMock(return_value=extruder_manager)): + return SettingOverrideDecorator() + + +def test_onSettingValueChanged(setting_override_decorator): + # On creation the needs slicing should be called once (as it being added should trigger a reslice) + assert application.getBackend().needsSlicing.call_count == 1 + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)): + setting_override_decorator._onSettingChanged("blarg", "value") + + # Once we set a setting value, it should trigger again. + assert application.getBackend().needsSlicing.call_count == 2 + + +def test_onSettingEnableChanged(setting_override_decorator): + # On creation the needs slicing should be called once (as it being added should trigger a reslice) + assert application.getBackend().needsSlicing.call_count == 1 + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)): + setting_override_decorator._onSettingChanged("blarg", "enabled") + + # Once we set a property that is not a value, no re-slice should happen. + assert application.getBackend().needsSlicing.call_count == 1 + + +def test_setActiveExtruder(setting_override_decorator): + setting_override_decorator.activeExtruderChanged.emit = MagicMock() + with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance", MagicMock(return_value=extruder_manager)): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + setting_override_decorator.setActiveExtruder("ZOMG") + setting_override_decorator.activeExtruderChanged.emit.assert_called_once_with() + assert setting_override_decorator.getActiveExtruder() == "ZOMG" diff --git a/tests/Settings/__init__.py b/tests/Settings/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/TestBuildVolume.py b/tests/TestBuildVolume.py new file mode 100644 index 0000000000..6ccb3d0fb7 --- /dev/null +++ b/tests/TestBuildVolume.py @@ -0,0 +1,390 @@ +from unittest.mock import MagicMock, patch +from UM.Math.AxisAlignedBox import AxisAlignedBox +import pytest + +from UM.Math.Polygon import Polygon +from UM.Math.Vector import Vector +from cura.BuildVolume import BuildVolume, PRIME_CLEARANCE +import numpy + + + + +@pytest.fixture +def build_volume() -> BuildVolume: + mocked_application = MagicMock() + mocked_platform = MagicMock(name="platform") + with patch("cura.BuildVolume.Platform", mocked_platform): + return BuildVolume(mocked_application) + + +def test_buildVolumeSetSizes(build_volume): + build_volume.setWidth(10) + assert build_volume.getDiagonalSize() == 10 + + build_volume.setWidth(0) + build_volume.setHeight(100) + assert build_volume.getDiagonalSize() == 100 + + build_volume.setHeight(0) + build_volume.setDepth(200) + assert build_volume.getDiagonalSize() == 200 + + +def test_buildMesh(build_volume): + mesh = build_volume._buildMesh(0, 100, 0, 100, 0, 100, 1) + result_vertices = numpy.array([[0., 0., 0.], [100., 0., 0.], [0., 0., 0.], [0., 100., 0.], [0., 100., 0.], [100., 100., 0.], [100., 0., 0.], [100., 100., 0.], [0., 0., 100.], [100., 0., 100.], [0., 0., 100.], [0., 100., 100.], [0., 100., 100.], [100., 100., 100.], [100., 0., 100.], [100., 100., 100.], [0., 0., 0.], [0., 0., 100.], [100., 0., 0.], [100., 0., 100.], [0., 100., 0.], [0., 100., 100.], [100., 100., 0.], [100., 100., 100.]], dtype=numpy.float32) + assert numpy.array_equal(result_vertices, mesh.getVertices()) + + +def test_buildGridMesh(build_volume): + mesh = build_volume._buildGridMesh(0, 100, 0, 100, 0, 100, 1) + result_vertices = numpy.array([[0., -1., 0.], [100., -1., 100.], [100., -1., 0.], [0., -1., 0.], [0., -1., 100.], [100., -1., 100.]]) + assert numpy.array_equal(result_vertices, mesh.getVertices()) + + +def test_clamp(build_volume): + assert build_volume._clamp(0, 0, 200) == 0 + assert build_volume._clamp(0, -200, 200) == 0 + assert build_volume._clamp(300, -200, 200) == 200 + + +class TestCalculateBedAdhesionSize: + setting_property_dict = {"adhesion_type": {"value": "brim"}, + "skirt_brim_line_width": {"value": 0}, + "initial_layer_line_width_factor": {"value": 0}, + "brim_line_count": {"value": 0}, + "machine_width": {"value": 200}, + "machine_depth": {"value": 200}, + "skirt_line_count": {"value": 0}, + "skirt_gap": {"value": 0}, + "raft_margin": {"value": 0} + } + + def getPropertySideEffect(*args, **kwargs): + properties = TestCalculateBedAdhesionSize.setting_property_dict.get(args[1]) + if properties: + return properties.get(args[2]) + + def createAndSetGlobalStack(self, build_volume): + mocked_stack = MagicMock() + mocked_stack.getProperty = MagicMock(side_effect=self.getPropertySideEffect) + + build_volume._global_container_stack = mocked_stack + + def test_noGlobalStack(self, build_volume: BuildVolume): + assert build_volume._calculateBedAdhesionSize([]) is None + + @pytest.mark.parametrize("setting_dict, result", [ + ({}, 0), + ({"adhesion_type": {"value": "skirt"}}, 0), + ({"adhesion_type": {"value": "raft"}}, 0), + ({"adhesion_type": {"value": "none"}}, 0), + ({"adhesion_type": {"value": "skirt"}, "skirt_line_count": {"value": 2}, "initial_layer_line_width_factor": {"value": 1}, "skirt_brim_line_width": {"value": 2}}, 0.02), + # Even though it's marked as skirt, it should behave as a brim as the prime tower has a brim (skirt line count is still at 0!) + ({"adhesion_type": {"value": "skirt"}, "prime_tower_brim_enable": {"value": True}, "skirt_brim_line_width": {"value": 2}, "initial_layer_line_width_factor": {"value": 3}}, -0.06), + ({"brim_line_count": {"value": 1}, "skirt_brim_line_width": {"value": 2}, "initial_layer_line_width_factor": {"value": 3}}, 0), + ({"brim_line_count": {"value": 2}, "skirt_brim_line_width": {"value": 2}, "initial_layer_line_width_factor": {"value": 3}}, 0.06), + ({"brim_line_count": {"value": 9000000}, "skirt_brim_line_width": {"value": 90000}, "initial_layer_line_width_factor": {"value": 9000}}, 100), # Clamped at half the max size of buildplate + ]) + def test_singleExtruder(self, build_volume: BuildVolume, setting_dict, result): + self.createAndSetGlobalStack(build_volume) + patched_dictionary = self.setting_property_dict.copy() + patched_dictionary.update(setting_dict) + with patch.dict(self.setting_property_dict, patched_dictionary): + assert build_volume._calculateBedAdhesionSize([]) == result + + def test_unknownBedAdhesion(self, build_volume: BuildVolume): + self.createAndSetGlobalStack(build_volume) + patched_dictionary = self.setting_property_dict.copy() + patched_dictionary.update({"adhesion_type": {"value": "OMGZOMGBBQ"}}) + with patch.dict(self.setting_property_dict, patched_dictionary): + with pytest.raises(Exception): + build_volume._calculateBedAdhesionSize([]) + +class TestComputeDisallowedAreasStatic: + setting_property_dict = {"machine_disallowed_areas": {"value": [[[-200, 112.5], [ -82, 112.5], [ -84, 102.5], [-115, 102.5]]]}, + "machine_width": {"value": 200}, + "machine_depth": {"value": 200}, + } + + def getPropertySideEffect(*args, **kwargs): + properties = TestComputeDisallowedAreasStatic.setting_property_dict.get(args[1]) + if properties: + return properties.get(args[2]) + + def test_computeDisallowedAreasStaticNoExtruder(self, build_volume: BuildVolume): + mocked_stack = MagicMock() + mocked_stack.getProperty = MagicMock(side_effect=self.getPropertySideEffect) + + build_volume._global_container_stack = mocked_stack + assert build_volume._computeDisallowedAreasStatic(0, []) == {} + + def test_computeDisalowedAreasStaticSingleExtruder(self, build_volume: BuildVolume): + mocked_stack = MagicMock() + mocked_stack.getProperty = MagicMock(side_effect=self.getPropertySideEffect) + + mocked_extruder = MagicMock() + mocked_extruder.getProperty = MagicMock(side_effect=self.getPropertySideEffect) + mocked_extruder.getId = MagicMock(return_value = "zomg") + + build_volume._global_container_stack = mocked_stack + with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance"): + result = build_volume._computeDisallowedAreasStatic(0, [mocked_extruder]) + assert result == {"zomg": [Polygon([[-84.0, 102.5], [-115.0, 102.5], [-200.0, 112.5], [-82.0, 112.5]])]} + + def test_computeDisalowedAreasMutliExtruder(self, build_volume): + mocked_stack = MagicMock() + mocked_stack.getProperty = MagicMock(side_effect=self.getPropertySideEffect) + + mocked_extruder = MagicMock() + mocked_extruder.getProperty = MagicMock(side_effect=self.getPropertySideEffect) + mocked_extruder.getId = MagicMock(return_value="zomg") + extruder_manager = MagicMock() + extruder_manager.getActiveExtruderStacks = MagicMock(return_value = [mocked_stack]) + build_volume._global_container_stack = mocked_stack + with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance", MagicMock(return_value = extruder_manager)): + result = build_volume._computeDisallowedAreasStatic(0, [mocked_extruder]) + assert result == {"zomg": [Polygon([[-84.0, 102.5], [-115.0, 102.5], [-200.0, 112.5], [-82.0, 112.5]])]} + +class TestUpdateRaftThickness: + setting_property_dict = {"raft_base_thickness": {"value": 1}, + "raft_interface_thickness": {"value": 1}, + "raft_surface_layers": {"value": 1}, + "raft_surface_thickness": {"value": 1}, + "raft_airgap": {"value": 1}, + "layer_0_z_overlap": {"value": 1}, + "adhesion_type": {"value": "raft"}} + + def getPropertySideEffect(*args, **kwargs): + properties = TestUpdateRaftThickness.setting_property_dict.get(args[1]) + if properties: + return properties.get(args[2]) + + def createMockedStack(self): + mocked_global_stack = MagicMock(name="mocked_global_stack") + mocked_global_stack.getProperty = MagicMock(side_effect=self.getPropertySideEffect) + extruder_stack = MagicMock() + + mocked_global_stack.extruders = {"0": extruder_stack} + + return mocked_global_stack + + def test_simple(self, build_volume: BuildVolume): + build_volume.raftThicknessChanged = MagicMock() + mocked_global_stack = self.createMockedStack() + build_volume._global_container_stack = mocked_global_stack + + assert build_volume.getRaftThickness() == 0 + build_volume._updateRaftThickness() + assert build_volume.getRaftThickness() == 3 + assert build_volume.raftThicknessChanged.emit.call_count == 1 + + def test_adhesionIsNotRaft(self, build_volume: BuildVolume): + patched_dictionary = self.setting_property_dict.copy() + patched_dictionary["adhesion_type"] = {"value": "not_raft"} + + mocked_global_stack = self.createMockedStack() + build_volume._global_container_stack = mocked_global_stack + + assert build_volume.getRaftThickness() == 0 + with patch.dict(self.setting_property_dict, patched_dictionary): + build_volume._updateRaftThickness() + assert build_volume.getRaftThickness() == 0 + + def test_noGlobalStack(self, build_volume: BuildVolume): + build_volume.raftThicknessChanged = MagicMock() + assert build_volume.getRaftThickness() == 0 + build_volume._updateRaftThickness() + assert build_volume.getRaftThickness() == 0 + assert build_volume.raftThicknessChanged.emit.call_count == 0 + + +class TestComputeDisallowedAreasPrimeBlob: + setting_property_dict = {"machine_width": {"value": 50}, + "machine_depth": {"value": 100}, + "prime_blob_enable": {"value": True}, + "extruder_prime_pos_x": {"value": 25}, + "extruder_prime_pos_y": {"value": 50}, + "machine_center_is_zero": {"value": True}, + } + + def getPropertySideEffect(*args, **kwargs): + properties = TestComputeDisallowedAreasPrimeBlob.setting_property_dict.get(args[1]) + if properties: + return properties.get(args[2]) + + def test_noGlobalContainer(self, build_volume: BuildVolume): + # No global container and no extruders, so we expect no blob areas + assert build_volume._computeDisallowedAreasPrimeBlob(12, []) == {} + + def test_noExtruders(self, build_volume: BuildVolume): + mocked_stack = MagicMock() + mocked_stack.getProperty = MagicMock(side_effect=self.getPropertySideEffect) + + build_volume._global_container_stack = mocked_stack + # No extruders, so still expect that we get no area + assert build_volume._computeDisallowedAreasPrimeBlob(12, []) == {} + + def test_singleExtruder(self, build_volume: BuildVolume): + mocked_global_stack = MagicMock(name = "mocked_global_stack") + mocked_global_stack.getProperty = MagicMock(side_effect=self.getPropertySideEffect) + + mocked_extruder_stack = MagicMock(name = "mocked_extruder_stack") + mocked_extruder_stack.getId = MagicMock(return_value = "0") + mocked_extruder_stack.getProperty = MagicMock(side_effect=self.getPropertySideEffect) + + build_volume._global_container_stack = mocked_global_stack + + # Create a polygon that should be the result + resulting_polygon = Polygon.approximatedCircle(PRIME_CLEARANCE) + # Since we want a blob of size 12; + resulting_polygon = resulting_polygon.getMinkowskiHull(Polygon.approximatedCircle(12)) + # In the The translation result is 25, -50 (due to the settings used) + resulting_polygon = resulting_polygon.translate(25, -50) + assert build_volume._computeDisallowedAreasPrimeBlob(12, [mocked_extruder_stack]) == {"0": [resulting_polygon]} + + +class TestCalculateExtraZClearance: + setting_property_dict = {"retraction_hop": {"value": 12}, + "retraction_hop_enabled": {"value": True}} + + def getPropertySideEffect(*args, **kwargs): + properties = TestCalculateExtraZClearance.setting_property_dict.get(args[1]) + if properties: + return properties.get(args[2]) + + def test_noContainerStack(self, build_volume: BuildVolume): + assert build_volume._calculateExtraZClearance([]) is 0 + + def test_withRetractionHop(self, build_volume: BuildVolume): + mocked_global_stack = MagicMock(name="mocked_global_stack") + + mocked_extruder = MagicMock() + mocked_extruder.getProperty = MagicMock(side_effect=self.getPropertySideEffect) + + build_volume._global_container_stack = mocked_global_stack + + # It should be 12 because we have the hop enabled and the hop distance is set to 12 + assert build_volume._calculateExtraZClearance([mocked_extruder]) == 12 + + def test_withoutRetractionHop(self, build_volume: BuildVolume): + mocked_global_stack = MagicMock(name="mocked_global_stack") + + mocked_extruder = MagicMock() + mocked_extruder.getProperty = MagicMock(side_effect=self.getPropertySideEffect) + + build_volume._global_container_stack = mocked_global_stack + + patched_dictionary = self.setting_property_dict.copy() + patched_dictionary["retraction_hop_enabled"] = {"value": False} + with patch.dict(self.setting_property_dict, patched_dictionary): + # It should be 12 because we have the hop enabled and the hop distance is set to 12 + assert build_volume._calculateExtraZClearance([mocked_extruder]) == 0 + + +class TestRebuild: + def test_zeroWidthHeightDepth(self, build_volume: BuildVolume): + build_volume.rebuild() + assert build_volume.getMeshData() is None + + def test_engineIsNotRead(self, build_volume: BuildVolume): + build_volume.setWidth(10) + build_volume.setHeight(10) + build_volume.setDepth(10) + build_volume.rebuild() + assert build_volume.getMeshData() is None + + def test_noGlobalStack(self, build_volume: BuildVolume): + build_volume.setWidth(10) + build_volume.setHeight(10) + build_volume.setDepth(10) + # Fake the the "engine is created callback" + build_volume._onEngineCreated() + build_volume.rebuild() + assert build_volume.getMeshData() is None + + def test_updateBoundingBox(self, build_volume: BuildVolume): + build_volume.setWidth(10) + build_volume.setHeight(10) + build_volume.setDepth(10) + + mocked_global_stack = MagicMock() + build_volume._global_container_stack = mocked_global_stack + build_volume.getEdgeDisallowedSize = MagicMock(return_value = 0) + build_volume.updateNodeBoundaryCheck = MagicMock() + + # Fake the the "engine is created callback" + build_volume._onEngineCreated() + build_volume.rebuild() + + bounding_box = build_volume.getBoundingBox() + assert bounding_box.minimum == Vector(-5.0, -1.0, -5.0) + assert bounding_box.maximum == Vector(5.0, 10.0, 5.0) + + +class TestUpdateMachineSizeProperties: + setting_property_dict = {"machine_width": {"value": 50}, + "machine_depth": {"value": 100}, + "machine_height": {"value": 200}, + "machine_shape": {"value": "DERP!"}} + + def getPropertySideEffect(*args, **kwargs): + properties = TestUpdateMachineSizeProperties.setting_property_dict.get(args[1]) + if properties: + return properties.get(args[2]) + + def test_noGlobalStack(self, build_volume: BuildVolume): + build_volume._updateMachineSizeProperties() + assert build_volume._width == 0 + assert build_volume._height == 0 + assert build_volume._depth == 0 + assert build_volume._shape == "" + + def test_happy(self, build_volume: BuildVolume): + mocked_global_stack = MagicMock(name="mocked_global_stack") + mocked_global_stack.getProperty = MagicMock(side_effect=self.getPropertySideEffect) + build_volume._global_container_stack = mocked_global_stack + build_volume._updateMachineSizeProperties() + assert build_volume._width == 50 + assert build_volume._height == 200 + assert build_volume._depth == 100 + assert build_volume._shape == "DERP!" + + +class TestGetEdgeDisallowedSize: + setting_property_dict = {} + bed_adhesion_size = 1 + + @pytest.fixture() + def build_volume(self, build_volume): + build_volume._calculateBedAdhesionSize = MagicMock(return_value = 1) + return build_volume + + def getPropertySideEffect(*args, **kwargs): + properties = TestGetEdgeDisallowedSize.setting_property_dict.get(args[1]) + if properties: + return properties.get(args[2]) + + def createMockedStack(self): + mocked_global_stack = MagicMock(name="mocked_global_stack") + mocked_global_stack.getProperty = MagicMock(side_effect=self.getPropertySideEffect) + return mocked_global_stack + + def test_noGlobalContainer(self, build_volume: BuildVolume): + assert build_volume.getEdgeDisallowedSize() == 0 + + def test_unknownAdhesion(self, build_volume: BuildVolume): + build_volume._global_container_stack = self.createMockedStack() + with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance"): + #with pytest.raises(Exception): + # Since we don't have any adhesion set, this should break. + + build_volume.getEdgeDisallowedSize() + + def test_oneAtATime(self, build_volume: BuildVolume): + build_volume._global_container_stack = self.createMockedStack() + with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance"): + with patch.dict(self.setting_property_dict, {"print_sequence": {"value": "one_at_a_time"}}): + assert build_volume.getEdgeDisallowedSize() == 0.1 + diff --git a/tests/TestConvexHullDecorator.py b/tests/TestConvexHullDecorator.py new file mode 100644 index 0000000000..4205ae3a37 --- /dev/null +++ b/tests/TestConvexHullDecorator.py @@ -0,0 +1,181 @@ +import copy +from unittest.mock import patch, MagicMock + +import pytest + +from UM.Math.Polygon import Polygon +from UM.Mesh.MeshBuilder import MeshBuilder +from UM.Scene.GroupDecorator import GroupDecorator +from UM.Scene.SceneNode import SceneNode +from UM.Scene.SceneNodeDecorator import SceneNodeDecorator +from cura.Scene.ConvexHullDecorator import ConvexHullDecorator + +mocked_application = MagicMock() +mocked_controller = MagicMock() +# We need to mock out this function, otherwise we get a recursion +mocked_controller.isToolOperationActive = MagicMock(return_value = False) +mocked_application.getController = MagicMock(return_value = mocked_controller) + + +class NonPrintingDecorator(SceneNodeDecorator): + def isNonPrintingMesh(self): + return True + + +class PrintingDecorator(SceneNodeDecorator): + def isNonPrintingMesh(self): + return False + + +@pytest.fixture +def convex_hull_decorator(): + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value = mocked_application)): + with patch("UM.Application.Application.getInstance", MagicMock(return_value = mocked_application)): + with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance"): + return ConvexHullDecorator() + + +def test_getSetNode(convex_hull_decorator): + node = SceneNode() + with patch("UM.Application.Application.getInstance", MagicMock(return_value=mocked_application)): + convex_hull_decorator.setNode(node) + assert convex_hull_decorator.getNode() == node + + +def test_getConvexHullBoundaryNoNode(convex_hull_decorator): + assert convex_hull_decorator.getConvexHullBoundary() is None + + +def test_getConvexHullHeadNoNode(convex_hull_decorator): + assert convex_hull_decorator.getConvexHullHead() is None + + +def test_getConvexHullHeadNotPrintingMesh(convex_hull_decorator): + node = SceneNode() + node.addDecorator(NonPrintingDecorator()) + with patch("UM.Application.Application.getInstance", MagicMock(return_value=mocked_application)): + convex_hull_decorator.setNode(node) + assert convex_hull_decorator.getConvexHullHead() is None + + +def test_getConvexHullNoNode(convex_hull_decorator): + assert convex_hull_decorator.getConvexHull() is None + + +def test_getConvexHeadFullNoNode(convex_hull_decorator): + assert convex_hull_decorator.getConvexHullHeadFull() is None + + +def test_getConvexHullNotPrintingMesh(convex_hull_decorator): + node = SceneNode() + node.addDecorator(NonPrintingDecorator()) + with patch("UM.Application.Application.getInstance", MagicMock(return_value=mocked_application)): + convex_hull_decorator.setNode(node) + assert convex_hull_decorator.getConvexHull() is None + + +def test_getConvexHullPrintingMesh(convex_hull_decorator): + node = SceneNode() + node.addDecorator(PrintingDecorator()) + with patch("UM.Application.Application.getInstance", MagicMock(return_value=mocked_application)): + convex_hull_decorator.setNode(node) + convex_hull_decorator._compute2DConvexHull = MagicMock(return_value = Polygon.approximatedCircle(10)) + assert convex_hull_decorator.getConvexHull() == Polygon.approximatedCircle(10) + +def test_getConvexHullBoundaryNotPrintingMesh(convex_hull_decorator): + node = SceneNode() + node.addDecorator(NonPrintingDecorator()) + with patch("UM.Application.Application.getInstance", MagicMock(return_value=mocked_application)): + convex_hull_decorator.setNode(node) + assert convex_hull_decorator.getConvexHullBoundary() is None + + +def test_getConvexHulLBoundaryPrintingMesh(convex_hull_decorator): + node = SceneNode() + node.addDecorator(PrintingDecorator()) + with patch("UM.Application.Application.getInstance", MagicMock(return_value=mocked_application)): + convex_hull_decorator.setNode(node) + # Should still be None, since print sequence is not one at a time + assert convex_hull_decorator.getConvexHullBoundary() is None + + +def test_getConvexHulLBoundaryPrintingMeshOneAtATime(convex_hull_decorator): + node = SceneNode() + node.addDecorator(PrintingDecorator()) + with patch("UM.Application.Application.getInstance", MagicMock(return_value=mocked_application)): + convex_hull_decorator.setNode(node) + convex_hull_decorator._global_stack = MagicMock() + convex_hull_decorator._global_stack.getProperty = MagicMock(return_value = "one_at_a_time") + # In this test we don't care for the result of the function, just that the convex hull computation is called. + convex_hull_decorator._compute2DConvexHull = MagicMock() + convex_hull_decorator.getConvexHullBoundary() + convex_hull_decorator._compute2DConvexHull.assert_called_once_with() + + +def value_changed(convex_hull_decorator, key): + convex_hull_decorator._onChanged = MagicMock() + convex_hull_decorator._onSettingValueChanged(key, "value") + convex_hull_decorator._onChanged.assert_called_once_with() + + # This should have no effect at all + convex_hull_decorator._onSettingValueChanged(key, "not value") + convex_hull_decorator._onChanged.assert_called_once_with() + + +@pytest.mark.parametrize("key", ConvexHullDecorator._affected_settings) +def test_onSettingValueChangedAffectedSettings(convex_hull_decorator, key): + value_changed(convex_hull_decorator, key) + + +@pytest.mark.parametrize("key", ConvexHullDecorator._influencing_settings) +def test_onSettingValueChangedInfluencingSettings(convex_hull_decorator, key): + convex_hull_decorator._init2DConvexHullCache = MagicMock() + value_changed(convex_hull_decorator, key) + convex_hull_decorator._init2DConvexHullCache.assert_called_once_with() + + +def test_compute2DConvexHullNoNode(convex_hull_decorator): + assert convex_hull_decorator._compute2DConvexHull() is None + + +def test_compute2DConvexHullNoMeshData(convex_hull_decorator): + node = SceneNode() + with patch("UM.Application.Application.getInstance", MagicMock(return_value=mocked_application)): + convex_hull_decorator.setNode(node) + + assert convex_hull_decorator._compute2DConvexHull() == Polygon([]) + + +def test_compute2DConvexHullMeshData(convex_hull_decorator): + node = SceneNode() + mb = MeshBuilder() + mb.addCube(10,10,10) + node.setMeshData(mb.build()) + + convex_hull_decorator._getSettingProperty = MagicMock(return_value = 0) + + with patch("UM.Application.Application.getInstance", MagicMock(return_value=mocked_application)): + convex_hull_decorator.setNode(node) + + assert convex_hull_decorator._compute2DConvexHull() == Polygon([[5.0,-5.0], [-5.0,-5.0], [-5.0,5.0], [5.0,5.0]]) + + +def test_compute2DConvexHullMeshDataGrouped(convex_hull_decorator): + parent_node = SceneNode() + parent_node.addDecorator(GroupDecorator()) + node = SceneNode() + parent_node.addChild(node) + + mb = MeshBuilder() + mb.addCube(10, 10, 10) + node.setMeshData(mb.build()) + + convex_hull_decorator._getSettingProperty = MagicMock(return_value=0) + + with patch("UM.Application.Application.getInstance", MagicMock(return_value=mocked_application)): + convex_hull_decorator.setNode(parent_node) + with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance"): + copied_decorator = copy.deepcopy(convex_hull_decorator) + copied_decorator._getSettingProperty = MagicMock(return_value=0) + node.addDecorator(copied_decorator) + assert convex_hull_decorator._compute2DConvexHull() == Polygon([[-5.0,5.0], [5.0,5.0], [5.0,-5.0], [-5.0,-5.0]]) \ No newline at end of file diff --git a/tests/TestCuraSceneController.py b/tests/TestCuraSceneController.py new file mode 100644 index 0000000000..ffffa8ac2a --- /dev/null +++ b/tests/TestCuraSceneController.py @@ -0,0 +1,79 @@ +from unittest.mock import MagicMock, patch + +import pytest + +from UM.Scene.SceneNode import SceneNode +from cura.Machines.Models.MultiBuildPlateModel import MultiBuildPlateModel +from cura.Scene.CuraSceneController import CuraSceneController +from cura.UI.ObjectsModel import ObjectsModel + + +@pytest.fixture +def objects_model() -> ObjectsModel: + return MagicMock(spec=ObjectsModel) + +@pytest.fixture +def multi_build_plate_model() -> MultiBuildPlateModel: + return MagicMock(spec=MultiBuildPlateModel) + +@pytest.fixture +def mocked_application(): + mocked_application = MagicMock() + mocked_controller = MagicMock() + mocked_scene = MagicMock() + mocked_application.getController = MagicMock(return_value=mocked_controller) + mocked_controller.getScene = MagicMock(return_value=mocked_scene) + return mocked_application + + +def test_setActiveBuildPlate(objects_model, multi_build_plate_model): + with patch("UM.Application.Application.getInstance"): + controller = CuraSceneController(objects_model, multi_build_plate_model) + controller.setActiveBuildPlate(12) + multi_build_plate_model.setActiveBuildPlate.assert_called_once_with(12) + objects_model.setActiveBuildPlate.assert_called_once_with(12) + + # Doing it again shouldn't cause another change to be passed along + controller.setActiveBuildPlate(12) + multi_build_plate_model.setActiveBuildPlate.assert_called_once_with(12) + objects_model.setActiveBuildPlate.assert_called_once_with(12) + + +def test_calcMaxBuildPlateEmptyScene(objects_model, multi_build_plate_model, mocked_application): + mocked_root = MagicMock() + mocked_root.callDecoration = MagicMock(return_value=0) + mocked_application.getController().getScene().getRoot = MagicMock(return_value=mocked_root) + with patch("UM.Application.Application.getInstance", MagicMock(return_value=mocked_application)): + controller = CuraSceneController(objects_model, multi_build_plate_model) + assert controller._calcMaxBuildPlate() == 0 + + +def test_calcMaxBuildPlateFilledScene(objects_model, multi_build_plate_model, mocked_application): + mocked_root = MagicMock() + mocked_root.callDecoration = MagicMock(return_value = 0) + mocked_child = MagicMock() + mocked_child.callDecoration = MagicMock(return_value = 2) + mocked_root.getAllChildren = MagicMock(return_value = [mocked_child]) + mocked_application.getController().getScene().getRoot = MagicMock(return_value=mocked_root) + with patch("UM.Application.Application.getInstance", MagicMock(return_value=mocked_application)): + controller = CuraSceneController(objects_model, multi_build_plate_model) + assert controller._calcMaxBuildPlate() == 2 + + +def test_updateMaxBuildPlate(objects_model, multi_build_plate_model): + with patch("UM.Application.Application.getInstance"): + controller = CuraSceneController(objects_model, multi_build_plate_model) + controller._calcMaxBuildPlate = MagicMock(return_value = 12) + controller.updateMaxBuildPlate(SceneNode()) + + # Check if that went well. + multi_build_plate_model.setMaxBuildPlate.assert_called_once_with(12) + + # Move to a different active build plate + controller.setActiveBuildPlate(5) + + # And check what happens if we move down again! + controller._calcMaxBuildPlate = MagicMock(return_value=2) + controller.updateMaxBuildPlate(SceneNode()) + assert controller._active_build_plate == 0 # We don't have any items anywere, so default to 0 + diff --git a/tests/TestCuraSceneNode.py b/tests/TestCuraSceneNode.py new file mode 100644 index 0000000000..47a4dc3cb0 --- /dev/null +++ b/tests/TestCuraSceneNode.py @@ -0,0 +1,54 @@ +from UM.Math.Polygon import Polygon +from UM.Scene.SceneNodeDecorator import SceneNodeDecorator +from cura.Scene.CuraSceneNode import CuraSceneNode +import pytest + +from unittest.mock import patch + + +class MockedConvexHullDecorator(SceneNodeDecorator): + def __init__(self): + super().__init__() + + def getConvexHull(self): + return Polygon([[5, 5], [-5, 5], [-5, -5], [5, -5]]) + + +class InvalidConvexHullDecorator(SceneNodeDecorator): + def __init__(self): + super().__init__() + + def getConvexHull(self): + return Polygon() + + +@pytest.fixture() +def cura_scene_node(): + # Replace the SettingOverrideDecorator with an empty decorator + with patch("cura.Scene.CuraSceneNode.SettingOverrideDecorator", SceneNodeDecorator): + return CuraSceneNode() + + +class TestCollidesWithAreas: + def test_noConvexHull(self, cura_scene_node): + assert not cura_scene_node.collidesWithAreas([Polygon([[10, 10], [-10, 10], [-10, -10], [10, -10]])]) + + def test_convexHullIntersects(self, cura_scene_node): + cura_scene_node.addDecorator(MockedConvexHullDecorator()) + assert cura_scene_node.collidesWithAreas([Polygon([[10, 10], [-10, 10], [-10, -10], [10, -10]])]) + + def test_convexHullNoIntersection(self, cura_scene_node): + cura_scene_node.addDecorator(MockedConvexHullDecorator()) + + assert not cura_scene_node.collidesWithAreas([Polygon([[60, 60], [40, 60], [40, 40], [60, 40]])]) + + def test_invalidConvexHull(self, cura_scene_node): + cura_scene_node.addDecorator(InvalidConvexHullDecorator()) + assert not cura_scene_node.collidesWithAreas([Polygon([[10, 10], [-10, 10], [-10, -10], [10, -10]])]) + + +def test_outsideBuildArea(cura_scene_node): + cura_scene_node.setOutsideBuildArea(True) + assert cura_scene_node.isOutsideBuildArea + + diff --git a/tests/TestExtruderManager.py b/tests/TestExtruderManager.py new file mode 100644 index 0000000000..4ad75989de --- /dev/null +++ b/tests/TestExtruderManager.py @@ -0,0 +1,31 @@ + +from unittest.mock import MagicMock, patch + + +def createMockedExtruder(extruder_id): + extruder = MagicMock() + extruder.getId = MagicMock(return_value = extruder_id) + return extruder + + +def test_getAllExtruderSettings(extruder_manager): + extruder_1 = createMockedExtruder("extruder_1") + extruder_1.getProperty = MagicMock(return_value ="beep") + extruder_2 = createMockedExtruder("extruder_2") + extruder_2.getProperty = MagicMock(return_value="zomg") + extruder_manager.getActiveExtruderStacks = MagicMock(return_value = [extruder_1, extruder_2]) + assert extruder_manager.getAllExtruderSettings("whatever", "value") == ["beep", "zomg"] + + +def test_registerExtruder(extruder_manager): + extruder = createMockedExtruder("beep") + extruder.getMetaDataEntry = MagicMock(return_value = "0") # because the extruder position gets called + + extruder_manager.extrudersChanged = MagicMock() + extruder_manager.registerExtruder(extruder, "zomg") + + assert extruder_manager.extrudersChanged.emit.call_count == 1 + + # Doing it again should not trigger anything + extruder_manager.registerExtruder(extruder, "zomg") + assert extruder_manager.extrudersChanged.emit.call_count == 1 diff --git a/tests/TestIntentManager.py b/tests/TestIntentManager.py new file mode 100644 index 0000000000..66e3085337 --- /dev/null +++ b/tests/TestIntentManager.py @@ -0,0 +1,172 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from unittest.mock import MagicMock, patch + +import pytest +from typing import Any, Dict, List + +from cura.Settings.IntentManager import IntentManager +from cura.Machines.QualityGroup import QualityGroup + +from tests.Settings.MockContainer import MockContainer + +mocked_intent_metadata = [ + {"id": "um3_aa4_pla_smooth_normal", "GUID": "abcxyz", "definition": "ultimaker3", "variant": "AA 0.4", + "material_id": "generic_pla", "intent_category": "smooth", "quality_type": "normal"}, + {"id": "um3_aa4_pla_strong_abnorm", "GUID": "defqrs", "definition": "ultimaker3", "variant": "AA 0.4", + "material_id": "generic_pla", "intent_category": "strong", "quality_type": "abnorm"}] # type:List[Dict[str, str]] + +mocked_qualitygroup_metadata = { + "normal": QualityGroup("um3_aa4_pla_normal", "normal"), + "abnorm": QualityGroup("um3_aa4_pla_abnorm", "abnorm")} # type: Dict[str, QualityGroup] + +@pytest.fixture +def mock_container_tree() -> MagicMock: + container_tree = MagicMock() + container_tree.getCurrentQualityGroups = MagicMock(return_value = mocked_qualitygroup_metadata) + container_tree.machines = { + "ultimaker3": MagicMock( + variants = { + "AA 0.4": MagicMock( + materials = { + "generic_pla": MagicMock( + qualities = { + "um3_aa4_pla_normal": MagicMock( + quality_type = "normal", + intents = { + "um3_aa4_pla_smooth_normal": MagicMock( + intent_category = "smooth", + getMetadata = MagicMock(return_value = mocked_intent_metadata[0]) + ) + } + ), + "um3_aa4_pla_abnorm": MagicMock( + quality_type = "abnorm", + intents = { + "um3_aa4_pla_strong_abnorm": MagicMock( + intent_category = "strong", + getMetadata = MagicMock(return_value = mocked_intent_metadata[1]) + ) + } + ) + } + ) + } + ) + } + ) + } + return container_tree + +@pytest.fixture +def intent_manager(application, extruder_manager, machine_manager, container_registry, global_stack) -> IntentManager: + application.getExtruderManager = MagicMock(return_value = extruder_manager) + application.getGlobalContainerStack = MagicMock(return_value = global_stack) + application.getMachineManager = MagicMock(return_value = machine_manager) + machine_manager.setIntentByCategory = MagicMock() + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value = application)): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + manager = IntentManager() + return manager + +def mockFindMetadata(**kwargs) -> List[Dict[str, Any]]: + if "id" in kwargs: + return [x for x in mocked_intent_metadata if x["id"] == kwargs["id"]] + else: + result = [] + for data in mocked_intent_metadata: + should_add = True + for key, value in kwargs.items(): + if key in data.keys(): + should_add &= (data[key] == value) + if should_add: + result.append(data) + return result + + +def mockFindContainers(**kwargs) -> List[MockContainer]: + result = [] + metadatas = mockFindMetadata(**kwargs) + for metadata in metadatas: + result.append(MockContainer(metadata)) + return result + + +def doSetup(application, extruder_manager, container_registry, global_stack) -> None: + container_registry.findContainersMetadata = MagicMock(side_effect = mockFindMetadata) + container_registry.findContainers = MagicMock(side_effect = mockFindContainers) + + for qualitygroup in mocked_qualitygroup_metadata.values(): + qualitygroup.node_for_global = MagicMock(name = "Node for global") + + global_stack.definition = MockContainer({"id": "ultimaker3"}) + + extruder_stack_a = MockContainer({"id": "Extruder The First"}) + extruder_stack_a.variant = MockContainer({"name": "AA 0.4"}) + extruder_stack_a.quality = MockContainer({"id": "um3_aa4_pla_normal"}) + extruder_stack_a.material = MockContainer({"base_file": "generic_pla"}) + extruder_stack_a.intent = MockContainer({"id": "empty_intent", "intent_category": "default"}) + extruder_stack_a.qualityChanges = MockContainer({"id": "empty_quality_changes", "intent_category": "default"}) + extruder_stack_b = MockContainer({"id": "Extruder II: Plastic Boogaloo"}) + extruder_stack_b.variant = MockContainer({"name": "AA 0.4"}) + extruder_stack_b.quality = MockContainer({"id": "um3_aa4_pla_normal"}) + extruder_stack_b.material = MockContainer({"base_file": "generic_pla"}) + extruder_stack_b.intent = MockContainer({"id": "empty_intent", "intent_category": "default"}) + extruder_stack_b.qualityChanges = MockContainer({"id": "empty_quality_changes", "intent_category": "default"}) + global_stack.extruderList = [extruder_stack_a, extruder_stack_b] + + application.getGlobalContainerStack = MagicMock(return_value = global_stack) + extruder_manager.getUsedExtruderStacks = MagicMock(return_value = [extruder_stack_a, extruder_stack_b]) + + +def test_intentCategories(intent_manager, mock_container_tree): + with patch("cura.Machines.ContainerTree.ContainerTree.getInstance", MagicMock(return_value = mock_container_tree)): + categories = intent_manager.intentCategories("ultimaker3", "AA 0.4", "generic_pla") # type:List[str] + assert "default" in categories, "default should always be in categories" + assert "strong" in categories, "strong should be in categories" + assert "smooth" in categories, "smooth should be in categories" + + +def test_getCurrentAvailableIntents(application, extruder_manager, intent_manager, container_registry, global_stack, mock_container_tree): + doSetup(application, extruder_manager, container_registry, global_stack) + + with patch("cura.Machines.ContainerTree.ContainerTree.getInstance", MagicMock(return_value = mock_container_tree)): + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value = application)): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + intents = intent_manager.getCurrentAvailableIntents() + assert ("smooth", "normal") in intents + assert ("strong", "abnorm") in intents + #assert ("default", "normal") in intents # Pending to-do in 'IntentManager'. + #assert ("default", "abnorm") in intents # Pending to-do in 'IntentManager'. + assert len(intents) == 2 # Or 4? pending to-do in 'IntentManager'. + + +def test_currentAvailableIntentCategories(application, extruder_manager, intent_manager, container_registry, global_stack, mock_container_tree): + doSetup(application, extruder_manager, container_registry, global_stack) + + with patch("cura.Machines.ContainerTree.ContainerTree.getInstance", MagicMock(return_value = mock_container_tree)): + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value = application)): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance", MagicMock(return_value = extruder_manager)): + categories = intent_manager.currentAvailableIntentCategories() + assert "default" in categories # Currently inconsistent with 'currentAvailableIntents'! + assert "smooth" in categories + assert "strong" in categories + assert len(categories) == 3 + + +def test_selectIntent(application, extruder_manager, intent_manager, container_registry, global_stack, mock_container_tree): + doSetup(application, extruder_manager, container_registry, global_stack) + + with patch("cura.Machines.ContainerTree.ContainerTree.getInstance", MagicMock(return_value = mock_container_tree)): + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value = application)): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): + with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance", MagicMock(return_value = extruder_manager)): + intents = intent_manager.getCurrentAvailableIntents() + for intent, quality in intents: + intent_manager.selectIntent(intent, quality) + extruder_stacks = extruder_manager.getUsedExtruderStacks() + assert len(extruder_stacks) == 2 + assert extruder_stacks[0].intent.getMetaDataEntry("intent_category") == intent + assert extruder_stacks[1].intent.getMetaDataEntry("intent_category") == intent diff --git a/tests/TestLayer.py b/tests/TestLayer.py new file mode 100644 index 0000000000..f8183437d6 --- /dev/null +++ b/tests/TestLayer.py @@ -0,0 +1,39 @@ +from cura.Layer import Layer +from unittest.mock import MagicMock + + +def test_lineMeshVertexCount(): + layer = Layer(1) + layer_polygon = MagicMock() + layer_polygon.lineMeshVertexCount = MagicMock(return_value = 9001) + layer.polygons.append(layer_polygon) + assert layer.lineMeshVertexCount() == 9001 + + +def test_lineMeshElementCount(): + layer = Layer(1) + layer_polygon = MagicMock() + layer_polygon.lineMeshElementCount = MagicMock(return_value = 9001) + layer.polygons.append(layer_polygon) + assert layer.lineMeshElementCount() == 9001 + + +def test_getAndSet(): + layer = Layer(0) + + layer.setThickness(12) + assert layer.thickness == 12 + + layer.setHeight(0.1) + assert layer.height == 0.1 + + +def test_elementCount(): + layer = Layer(1) + layer_polygon = MagicMock() + layer_polygon.lineMeshElementCount = MagicMock(return_value=9002) + layer_polygon.lineMeshVertexCount = MagicMock(return_value=9001) + layer_polygon.elementCount = 12 + layer.polygons.append(layer_polygon) + assert layer.build(0, 0, [], [], [], [], [] ,[] , []) == (9001, 9002) + assert layer.elementCount == 12 \ No newline at end of file diff --git a/tests/TestMachineManager.py b/tests/TestMachineManager.py index 6de6fdd941..a5d9d314cd 100644 --- a/tests/TestMachineManager.py +++ b/tests/TestMachineManager.py @@ -1,32 +1,13 @@ from unittest.mock import MagicMock, patch - import pytest -from UM.Settings.ContainerRegistry import ContainerRegistry -from cura.Settings.ExtruderManager import ExtruderManager from cura.Settings.MachineManager import MachineManager - @pytest.fixture() def global_stack(): - return MagicMock(name="Global Stack") - -@pytest.fixture() -def container_registry() -> ContainerRegistry: - return MagicMock(name = "ContainerRegistry") - - -@pytest.fixture() -def extruder_manager(application, container_registry) -> ExtruderManager: - if ExtruderManager.getInstance() is not None: - # Reset the data - ExtruderManager._ExtruderManager__instance = None - - with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): - with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): - manager = ExtruderManager() - return manager - + stack = MagicMock(name = "Global Stack") + stack.getId = MagicMock(return_value = "GlobalStack") + return stack @pytest.fixture() def machine_manager(application, extruder_manager, container_registry, global_stack) -> MachineManager: @@ -37,7 +18,7 @@ def machine_manager(application, extruder_manager, container_registry, global_st return manager - +@pytest.mark.skip(reason = "Outdated test") def test_setActiveMachine(machine_manager): registry = MagicMock() @@ -53,6 +34,29 @@ def test_setActiveMachine(machine_manager): machine_manager._application.setGlobalContainerStack.assert_called_with(mocked_global_stack) +def test_getMachine(): + registry = MagicMock() + mocked_global_stack = MagicMock() + mocked_global_stack.getId = MagicMock(return_value="test_machine") + mocked_global_stack.definition.getId = MagicMock(return_value = "test") + registry.findContainerStacks = MagicMock(return_value=[mocked_global_stack]) + with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=registry)): + assert MachineManager.getMachine("test") == mocked_global_stack + + +def test_addMachine(machine_manager): + registry = MagicMock() + + mocked_stack = MagicMock() + mocked_stack.getId = MagicMock(return_value="newlyCreatedStack") + mocked_create_machine = MagicMock(name="createMachine", return_value = mocked_stack) + machine_manager.setActiveMachine = MagicMock() + with patch("cura.Settings.CuraStackBuilder.CuraStackBuilder.createMachine", mocked_create_machine): + with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=registry)): + machine_manager.addMachine("derp") + machine_manager.setActiveMachine.assert_called_with("newlyCreatedStack") + + def test_hasUserSettings(machine_manager, application): mocked_stack = application.getGlobalContainerStack() @@ -62,3 +66,45 @@ def test_hasUserSettings(machine_manager, application): assert machine_manager.numUserSettings == 12 assert machine_manager.hasUserSettings + + +def test_totalNumberOfSettings(machine_manager): + registry = MagicMock() + mocked_definition = MagicMock() + mocked_definition.getAllKeys = MagicMock(return_value = ["omg", "zomg", "foo"]) + registry.findDefinitionContainers = MagicMock(return_value = [mocked_definition]) + with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=registry)): + assert machine_manager.totalNumberOfSettings == 3 + + +def createMockedExtruder(extruder_id): + extruder = MagicMock() + extruder.getId = MagicMock(return_value = extruder_id) + return extruder + + +def createMockedInstanceContainer(instance_id, name = ""): + instance = MagicMock() + instance.getName = MagicMock(return_value = name) + instance.getId = MagicMock(return_value=instance_id) + return instance + + +def test_globalVariantName(machine_manager, application): + global_stack = application.getGlobalContainerStack() + global_stack.variant = createMockedInstanceContainer("beep", "zomg") + assert machine_manager.globalVariantName == "zomg" + + +def test_resetSettingForAllExtruders(machine_manager): + global_stack = machine_manager.activeMachine + extruder_1 = createMockedExtruder("extruder_1") + extruder_2 = createMockedExtruder("extruder_2") + extruder_1.userChanges = createMockedInstanceContainer("settings_1") + extruder_2.userChanges = createMockedInstanceContainer("settings_2") + global_stack.extruderList = [extruder_1, extruder_2] + + machine_manager.resetSettingForAllExtruders("whatever") + + extruder_1.userChanges.removeInstance.assert_called_once_with("whatever") + extruder_2.userChanges.removeInstance.assert_called_once_with("whatever") \ No newline at end of file diff --git a/tests/TestMaterialManager.py b/tests/TestMaterialManager.py deleted file mode 100644 index 2d66dfa4fd..0000000000 --- a/tests/TestMaterialManager.py +++ /dev/null @@ -1,43 +0,0 @@ -from unittest.mock import MagicMock, patch - -from cura.Machines.MaterialManager import MaterialManager - - -mocked_registry = MagicMock() -material_1 = {"id": "test", "GUID":"TEST!", "base_file": "base_material", "definition": "fdmmachine", "approximate_diameter": 3, "brand": "generic"} -material_2 = {"id": "base_material", "GUID": "TEST2!", "base_file": "test", "definition": "fdmmachine", "approximate_diameter": 3} -mocked_registry.findContainersMetadata = MagicMock(return_value = [material_1, material_2]) - - -mocked_definition = MagicMock() -mocked_definition.getId = MagicMock(return_value = "fdmmachine") -mocked_definition.getMetaDataEntry = MagicMock(return_value = []) - - -def test_initialize(application): - # Just test if the simple loading works - with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)): - manager = MaterialManager(mocked_registry) - manager.initialize() - # Double check that we actually got some material nodes - assert manager.getMaterialGroup("base_material").name == "base_material" - assert manager.getMaterialGroup("test").name == "test" - - -def test_getAvailableMaterials(application): - with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)): - manager = MaterialManager(mocked_registry) - manager.initialize() - - available_materials = manager.getAvailableMaterials(mocked_definition, None, None, 3) - - assert "base_material" in available_materials - assert "test" in available_materials - - -def test_getMaterialNode(application): - with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)): - manager = MaterialManager(mocked_registry) - manager.initialize() - - assert manager.getMaterialNode("fdmmachine", None, None, 3, "base_material").getMetaDataEntry("id") == "test" diff --git a/tests/TestOAuth2.py b/tests/TestOAuth2.py index d4af485130..1e305c6549 100644 --- a/tests/TestOAuth2.py +++ b/tests/TestOAuth2.py @@ -1,9 +1,10 @@ -import webbrowser from datetime import datetime from unittest.mock import MagicMock, patch import requests +from PyQt5.QtGui import QDesktopServices + from UM.Preferences import Preferences from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers, TOKEN_TIMESTAMP_FORMAT from cura.OAuth2.AuthorizationService import AuthorizationService @@ -101,7 +102,7 @@ def test_initialize(): initialize_preferences = MagicMock() authorization_service = AuthorizationService(OAUTH_SETTINGS, original_preference) authorization_service.initialize(initialize_preferences) - initialize_preferences.addPreference.assert_called_once() + initialize_preferences.addPreference.assert_called_once_with("test/auth_data", "{}") original_preference.addPreference.assert_not_called() @@ -172,12 +173,12 @@ def test_storeAuthData(get_user_profile) -> None: @patch.object(LocalAuthorizationServer, "stop") @patch.object(LocalAuthorizationServer, "start") -@patch.object(webbrowser, "open_new") -def test_localAuthServer(webbrowser_open, start_auth_server, stop_auth_server) -> None: +@patch.object(QDesktopServices, "openUrl") +def test_localAuthServer(QDesktopServices_openUrl, start_auth_server, stop_auth_server) -> None: preferences = Preferences() authorization_service = AuthorizationService(OAUTH_SETTINGS, preferences) authorization_service.startAuthorizationFlow() - assert webbrowser_open.call_count == 1 + assert QDesktopServices_openUrl.call_count == 1 # Ensure that the Authorization service tried to start the server. assert start_auth_server.call_count == 1 diff --git a/tests/TestObjectsModel.py b/tests/TestObjectsModel.py new file mode 100644 index 0000000000..caed4741bb --- /dev/null +++ b/tests/TestObjectsModel.py @@ -0,0 +1,166 @@ +import pytest +import copy +from unittest.mock import patch, MagicMock + +from UM.Scene.GroupDecorator import GroupDecorator +from UM.Scene.SceneNode import SceneNode +from cura.Scene.BuildPlateDecorator import BuildPlateDecorator +from cura.Scene.SliceableObjectDecorator import SliceableObjectDecorator +from cura.UI.ObjectsModel import ObjectsModel, _NodeInfo + + +@pytest.fixture() +def objects_model(application): + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)): + return ObjectsModel() + + +@pytest.fixture() +def group_scene_node(): + node = SceneNode() + node.addDecorator(GroupDecorator()) + return node + + +@pytest.fixture() +def slicable_scene_node(): + node = SceneNode() + node.addDecorator(SliceableObjectDecorator()) + return node + +@pytest.fixture() +def application_with_mocked_scene(application): + mocked_controller = MagicMock(name = "Controller") + mocked_scene = MagicMock(name = "Scene") + mocked_controller.getScene = MagicMock(return_value = mocked_scene) + application.getController = MagicMock(return_value = mocked_controller) + return application + + +def test_setActiveBuildPlate(objects_model): + objects_model._update = MagicMock() + + objects_model.setActiveBuildPlate(12) + assert objects_model._update.call_count == 1 + + objects_model.setActiveBuildPlate(12) + assert objects_model._update.call_count == 1 + + +class Test_shouldNodeBeHandled: + def test_nonSlicableSceneNode(self, objects_model): + # An empty SceneNode should not be handled by this model + assert not objects_model._shouldNodeBeHandled(SceneNode()) + + def test_groupedNode(self, objects_model, slicable_scene_node, application): + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)): + # A node without a build plate number should not be handled. + assert not objects_model._shouldNodeBeHandled(slicable_scene_node) + + def test_childNode(self, objects_model, group_scene_node, slicable_scene_node, application): + slicable_scene_node.setParent(group_scene_node) + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)): + # A child node of a group node should not be handled. + assert not objects_model._shouldNodeBeHandled(slicable_scene_node) + + def test_slicableNodeWithoutFiltering(self, objects_model, slicable_scene_node, application): + mocked_preferences = MagicMock(name="preferences") + mocked_preferences.getValue = MagicMock(return_value = False) + application.getPreferences = MagicMock(return_value = mocked_preferences) + + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)): + # A slicable node should be handled by this model. + assert objects_model._shouldNodeBeHandled(slicable_scene_node) + + def test_slicableNodeWithFiltering(self, objects_model, slicable_scene_node, application): + mocked_preferences = MagicMock(name="preferences") + mocked_preferences.getValue = MagicMock(return_value = True) + application.getPreferences = MagicMock(return_value = mocked_preferences) + + buildplate_decorator = BuildPlateDecorator() + buildplate_decorator.setBuildPlateNumber(-1) + slicable_scene_node.addDecorator(buildplate_decorator) + + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)): + # A slicable node with the same buildplate number should be handled. + assert objects_model._shouldNodeBeHandled(slicable_scene_node) + + +class Test_renameNodes: + def test_emptyDict(self, objects_model): + assert objects_model._renameNodes({}) == [] + + def test_singleItemNoRename(self, objects_model): + node = SceneNode() + assert objects_model._renameNodes({"zomg": _NodeInfo(index_to_node={1: node})}) == [node] + + def test_singleItemRename(self, objects_model): + node = SceneNode() + result = objects_model._renameNodes({"zomg": _NodeInfo(nodes_to_rename=[node])}) + assert result == [node] + assert node.getName() == "zomg(1)" + + def test_singleItemRenameWithIndex(self, objects_model): + node = SceneNode() + objects_model._renameNodes({"zomg": _NodeInfo(index_to_node = {1: node}, nodes_to_rename=[node])}) + assert node.getName() == "zomg(2)" + + def test_multipleItemsRename(self, objects_model): + node1 = SceneNode() + node2 = SceneNode() + result = objects_model._renameNodes({"zomg": _NodeInfo(nodes_to_rename=[node1, node2])}) + assert result == [node1, node2] + assert node1.getName() == "zomg(1)" + assert node2.getName() == "zomg(2)" + + def test_renameGroup(self, objects_model, group_scene_node): + result = objects_model._renameNodes({"zomg": _NodeInfo(nodes_to_rename=[group_scene_node], is_group=True)}) + assert result == [group_scene_node] + assert group_scene_node.getName() == "zomg#1" + + +class Test_Update: + def test_updateWithGroup(self, objects_model, application_with_mocked_scene, group_scene_node): + objects_model._shouldNodeBeHandled = MagicMock(return_value = True) + application_with_mocked_scene.getController().getScene().getRoot = MagicMock(return_value = group_scene_node) + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application_with_mocked_scene)): + objects_model._update() + assert objects_model.items == [{'name': 'Group #1', 'selected': False, 'outside_build_area': False, 'buildplate_number': None, 'node': group_scene_node}] + + def test_updateWithNonGroup(self, objects_model, application_with_mocked_scene, slicable_scene_node): + objects_model._shouldNodeBeHandled = MagicMock(return_value=True) + slicable_scene_node.setName("YAY(1)") + application_with_mocked_scene.getController().getScene().getRoot = MagicMock(return_value=slicable_scene_node) + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application_with_mocked_scene)): + objects_model._update() + assert objects_model.items == [{'name': 'YAY(1)', 'selected': False, 'outside_build_area': False, 'buildplate_number': None, 'node': slicable_scene_node}] + + def test_updateWithNonTwoNodes(self, objects_model, application_with_mocked_scene, slicable_scene_node): + objects_model._shouldNodeBeHandled = MagicMock(return_value=True) + slicable_scene_node.setName("YAY") + copied_node = copy.deepcopy(slicable_scene_node) + copied_node.setParent(slicable_scene_node) + application_with_mocked_scene.getController().getScene().getRoot = MagicMock(return_value=slicable_scene_node) + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application_with_mocked_scene)): + objects_model._update() + assert objects_model.items == [{'name': 'YAY', 'selected': False, 'outside_build_area': False, 'buildplate_number': None, 'node': slicable_scene_node}, {'name': 'YAY(1)', 'selected': False, 'outside_build_area': False, 'buildplate_number': None, 'node': copied_node}] + + def test_updateWithNonTwoGroups(self, objects_model, application_with_mocked_scene, group_scene_node): + objects_model._shouldNodeBeHandled = MagicMock(return_value=True) + group_scene_node.setName("Group #1") + copied_node = copy.deepcopy(group_scene_node) + copied_node.setParent(group_scene_node) + application_with_mocked_scene.getController().getScene().getRoot = MagicMock(return_value=group_scene_node) + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application_with_mocked_scene)): + objects_model._update() + assert objects_model.items == [{'name': 'Group #1', 'selected': False, 'outside_build_area': False, 'buildplate_number': None, 'node': group_scene_node}, {'name': 'Group #2', 'selected': False, 'outside_build_area': False, 'buildplate_number': None, 'node': copied_node}] + + def test_updateOutsideBuildplate(self, objects_model, application_with_mocked_scene, group_scene_node): + objects_model._shouldNodeBeHandled = MagicMock(return_value=True) + group_scene_node.setName("Group") + group_scene_node.isOutsideBuildArea = MagicMock(return_value = True) + application_with_mocked_scene.getController().getScene().getRoot = MagicMock(return_value=group_scene_node) + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application_with_mocked_scene)): + objects_model._update() + assert objects_model.items == [{'name': 'Group #1', 'selected': False, 'outside_build_area': True, 'buildplate_number': None, 'node': group_scene_node}] + diff --git a/tests/TestQualityManager.py b/tests/TestQualityManager.py deleted file mode 100644 index 50318260b2..0000000000 --- a/tests/TestQualityManager.py +++ /dev/null @@ -1,60 +0,0 @@ -from unittest.mock import MagicMock - -import pytest - -from cura.Machines.QualityManager import QualityManager - - - -mocked_stack = MagicMock() -mocked_extruder = MagicMock() - -mocked_material = MagicMock() -mocked_material.getMetaDataEntry = MagicMock(return_value = "base_material") - -mocked_extruder.material = mocked_material -mocked_stack.extruders = {"0": mocked_extruder} - -@pytest.fixture() -def material_manager(): - result = MagicMock() - result.getRootMaterialIDWithoutDiameter = MagicMock(return_value = "base_material") - return result - -@pytest.fixture() -def container_registry(): - result = MagicMock() - mocked_metadata = [{"id": "test", "definition": "fdmprinter", "quality_type": "normal", "name": "test_name", "global_quality": True, "type": "quality"}, - {"id": "test_material", "definition": "fdmprinter", "quality_type": "normal", "name": "test_name_material", "material": "base_material", "type": "quality"}, - {"id": "quality_changes_id", "definition": "fdmprinter", "type": "quality_changes", "quality_type": "amazing!", "name": "herp"}] - result.findContainersMetadata = MagicMock(return_value = mocked_metadata) - return result - - -@pytest.fixture() -def quality_mocked_application(material_manager, container_registry): - result = MagicMock() - result.getMaterialManager = MagicMock(return_value=material_manager) - result.getContainerRegistry = MagicMock(return_value=container_registry) - return result - - -def test_getQualityGroups(quality_mocked_application): - manager = QualityManager(quality_mocked_application) - manager.initialize() - - assert "normal" in manager.getQualityGroups(mocked_stack) - - -def test_getQualityGroupsForMachineDefinition(quality_mocked_application): - manager = QualityManager(quality_mocked_application) - manager.initialize() - - assert "normal" in manager.getQualityGroupsForMachineDefinition(mocked_stack) - - -def test_getQualityChangesGroup(quality_mocked_application): - manager = QualityManager(quality_mocked_application) - manager.initialize() - - assert "herp" in manager.getQualityChangesGroups(mocked_stack) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/conftest.py b/tests/conftest.py index 7f46c202b3..876fb4f541 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,7 +3,7 @@ # The purpose of this class is to create fixtures or methods that can be shared among all tests. -import unittest.mock +from unittest.mock import MagicMock, patch import pytest # Prevents error: "PyCapsule_GetPointer called with incorrect name" with conflicting SIP configurations between Arcus and PyQt: Import Arcus and Savitar first! @@ -13,16 +13,51 @@ from UM.Qt.QtApplication import QtApplication # QtApplication import is require # Even though your IDE says these files are not used, don't believe it. It's lying. They need to be there. from cura.CuraApplication import CuraApplication +from cura.Settings.ExtruderManager import ExtruderManager +from cura.Settings.MachineManager import MachineManager from cura.UI.MachineActionManager import MachineActionManager +from UM.Settings.ContainerRegistry import ContainerRegistry # Create a CuraApplication object that will be shared among all tests. It needs to be initialized. # Since we need to use it more that once, we create the application the first time and use its instance afterwards. @pytest.fixture() def application() -> CuraApplication: - app = unittest.mock.MagicMock() + app = MagicMock() return app # Returns a MachineActionManager instance. @pytest.fixture() def machine_action_manager(application) -> MachineActionManager: return MachineActionManager(application) + +@pytest.fixture() +def global_stack(): + return MagicMock(name="Global Stack") + +@pytest.fixture() +def container_registry(application, global_stack) -> ContainerRegistry: + result = MagicMock() + result.findContainerStacks = MagicMock(return_value = [global_stack]) + application.getContainerRegistry = MagicMock(return_value = result) + return result + +@pytest.fixture() +def extruder_manager(application, container_registry) -> ExtruderManager: + if ExtruderManager.getInstance() is not None: + # Reset the data + ExtruderManager._ExtruderManager__instance = None + + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + manager = ExtruderManager() + return manager + + +@pytest.fixture() +def machine_manager(application, extruder_manager, container_registry, global_stack) -> MachineManager: + application.getExtruderManager = MagicMock(return_value = extruder_manager) + application.getGlobalContainerStack = MagicMock(return_value = global_stack) + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + manager = MachineManager(application) + + return manager